summary refs log tree commit diff
path: root/crypto/src/asn1/cmp/ErrorMsgContent.cs
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/src/asn1/cmp/ErrorMsgContent.cs')
-rw-r--r--crypto/src/asn1/cmp/ErrorMsgContent.cs22
1 files changed, 9 insertions, 13 deletions
diff --git a/crypto/src/asn1/cmp/ErrorMsgContent.cs b/crypto/src/asn1/cmp/ErrorMsgContent.cs
index 44646313e..1af52e65c 100644
--- a/crypto/src/asn1/cmp/ErrorMsgContent.cs
+++ b/crypto/src/asn1/cmp/ErrorMsgContent.cs
@@ -36,20 +36,16 @@ namespace Org.BouncyCastle.Asn1.Cmp
 
 		private ErrorMsgContent(Asn1Sequence seq)
 		{
-			m_pkiStatusInfo = PkiStatusInfo.GetInstance(seq[0]);
+            int count = seq.Count, pos = 0;
+            if (count < 1 || count > 3)
+                throw new ArgumentException("Bad sequence size: " + count, nameof(seq));
 
-			for (int pos = 1; pos < seq.Count; ++pos)
-			{
-				Asn1Encodable ae = seq[pos];
-				if (ae is DerInteger)
-				{
-					m_errorCode = DerInteger.GetInstance(ae);
-				}
-				else
-				{
-					m_errorDetails = PkiFreeText.GetInstance(ae);
-				}
-			}
+			m_pkiStatusInfo = PkiStatusInfo.GetInstance(seq[pos++]);
+			m_errorCode = Asn1Utilities.ReadOptional(seq, ref pos, DerInteger.GetOptional);
+            m_errorDetails = Asn1Utilities.ReadOptional(seq, ref pos, PkiFreeText.GetOptional);
+
+            if (pos != count)
+                throw new ArgumentException("Unexpected elements in sequence", nameof(seq));
 		}
 
 		public ErrorMsgContent(PkiStatusInfo pkiStatusInfo)