Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastien Pouliot <sebastien@ximian.com>2004-05-27 16:29:28 +0400
committerSebastien Pouliot <sebastien@ximian.com>2004-05-27 16:29:28 +0400
commitead10bbbe345498755d6bfa44e24554898e1e595 (patch)
treebf8540493319b03524e46dcb9e2172d378c471eb /mcs/class/Mono.Security
parent467dd77d3e2a2f891dd1ab899bbcabb006738305 (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.cs33
-rw-r--r--mcs/class/Mono.Security/Mono.Security.Cryptography/ChangeLog2
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>