1 files changed, 20 insertions, 8 deletions
diff --git a/crypto/src/asn1/DerBMPString.cs b/crypto/src/asn1/DerBMPString.cs
index 33d950ff8..061900b9c 100644
--- a/crypto/src/asn1/DerBMPString.cs
+++ b/crypto/src/asn1/DerBMPString.cs
@@ -55,32 +55,44 @@ namespace Org.BouncyCastle.Asn1
/**
* basic constructor - byte encoded string.
*/
- public DerBmpString(
- byte[] str)
+ [Obsolete("Will become internal")]
+ public DerBmpString(byte[] str)
{
if (str == null)
throw new ArgumentNullException("str");
- char[] cs = new char[str.Length / 2];
+ int byteLen = str.Length;
+ if (0 != (byteLen & 1))
+ throw new ArgumentException("malformed BMPString encoding encountered", "str");
- for (int i = 0; i != cs.Length; i++)
+ int charLen = byteLen / 2;
+ char[] cs = new char[charLen];
+
+ for (int i = 0; i != charLen; i++)
{
cs[i] = (char)((str[2 * i] << 8) | (str[2 * i + 1] & 0xff));
}
- this.str = new string(cs);
+ this.str = new string(cs);
+ }
+
+ internal DerBmpString(char[] str)
+ {
+ if (str == null)
+ throw new ArgumentNullException("str");
+
+ this.str = new string(str);
}
/**
* basic constructor
*/
- public DerBmpString(
- string str)
+ public DerBmpString(string str)
{
if (str == null)
throw new ArgumentNullException("str");
- this.str = str;
+ this.str = str;
}
public override string GetString()
|