diff options
author | Sebastien Pouliot <sebastien@ximian.com> | 2004-05-27 16:29:28 +0400 |
---|---|---|
committer | Sebastien Pouliot <sebastien@ximian.com> | 2004-05-27 16:29:28 +0400 |
commit | ead10bbbe345498755d6bfa44e24554898e1e595 (patch) | |
tree | bf8540493319b03524e46dcb9e2172d378c471eb /mcs/class/Mono.Security | |
parent | 467dd77d3e2a2f891dd1ab899bbcabb006738305 (diff) |
2004-05-27 Sebastien Pouliot <sebastien@ximian.com>
* ARC4Managed.cs: Added missing exception handling in TransformBlock
and TransformFinalBlock.
svn path=/trunk/mcs/; revision=28258
Diffstat (limited to 'mcs/class/Mono.Security')
-rw-r--r-- | mcs/class/Mono.Security/Mono.Security.Cryptography/ARC4Managed.cs | 33 | ||||
-rw-r--r-- | mcs/class/Mono.Security/Mono.Security.Cryptography/ChangeLog | 2 |
2 files changed, 34 insertions, 1 deletions
diff --git a/mcs/class/Mono.Security/Mono.Security.Cryptography/ARC4Managed.cs b/mcs/class/Mono.Security/Mono.Security.Cryptography/ARC4Managed.cs index 0c85e7bd2a6..d962a995654 100644 --- a/mcs/class/Mono.Security/Mono.Security.Cryptography/ARC4Managed.cs +++ b/mcs/class/Mono.Security/Mono.Security.Cryptography/ARC4Managed.cs @@ -4,6 +4,7 @@ // using System; +using System.Globalization; using System.Security.Cryptography; namespace Mono.Security.Cryptography { @@ -113,8 +114,36 @@ namespace Mono.Security.Cryptography { } } + private void CheckInput (byte[] inputBuffer, int inputOffset, int inputCount) + { + if (inputBuffer == null) + throw new ArgumentNullException ("inputBuffer"); + if (inputOffset < 0) + throw new ArgumentOutOfRangeException ("inputOffset", "< 0"); + if (inputCount < 0) + throw new ArgumentOutOfRangeException ("inputCount", "< 0"); + // ordered to avoid possible integer overflow + if (inputOffset > inputBuffer.Length - inputCount) + throw new ArgumentException ("inputBuffer", Locale.GetText ("Overflow")); + } + public int TransformBlock (byte[] inputBuffer, int inputOffset, int inputCount, byte[] outputBuffer, int outputOffset) { + CheckInput (inputBuffer, inputOffset, inputCount); + // check output parameters + if (outputBuffer == null) + throw new ArgumentNullException ("outputBuffer"); + if (outputOffset < 0) + throw new ArgumentOutOfRangeException ("outputOffset", "< 0"); + // ordered to avoid possible integer overflow + if (outputOffset > outputBuffer.Length - inputCount) + throw new ArgumentException ("outputBuffer", Locale.GetText ("Overflow")); + + return InternalTransformBlock (inputBuffer, inputOffset, inputCount, outputBuffer, outputOffset); + } + + private int InternalTransformBlock (byte[] inputBuffer, int inputOffset, int inputCount, byte[] outputBuffer, int outputOffset) + { byte xorIndex; for (int counter = 0; counter < inputCount; counter ++) { x = (byte) (x + 1); @@ -132,8 +161,10 @@ namespace Mono.Security.Cryptography { public byte[] TransformFinalBlock (byte[] inputBuffer, int inputOffset, int inputCount) { + CheckInput (inputBuffer, inputOffset, inputCount); + byte[] output = new byte [inputCount]; - TransformBlock (inputBuffer, inputOffset, inputCount, output, 0); + InternalTransformBlock (inputBuffer, inputOffset, inputCount, output, 0); return output; } } diff --git a/mcs/class/Mono.Security/Mono.Security.Cryptography/ChangeLog b/mcs/class/Mono.Security/Mono.Security.Cryptography/ChangeLog index bc9934bd151..1f378cbb8e8 100644 --- a/mcs/class/Mono.Security/Mono.Security.Cryptography/ChangeLog +++ b/mcs/class/Mono.Security/Mono.Security.Cryptography/ChangeLog @@ -1,5 +1,7 @@ 2004-05-27 Sebastien Pouliot <sebastien@ximian.com> + * ARC4Managed.cs: Added missing exception handling in TransformBlock + and TransformFinalBlock. * SymmetricTransform.cs: Fixed possible integer overflow. 2004-05-10 Sebastien Pouliot <sebastien@ximian.com> |