diff options
Diffstat (limited to 'bcprov/src/main/java/org/bouncycastle/asn1/ConstructedOctetStream.java')
-rw-r--r-- | bcprov/src/main/java/org/bouncycastle/asn1/ConstructedOctetStream.java | 46 |
1 files changed, 29 insertions, 17 deletions
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/ConstructedOctetStream.java b/bcprov/src/main/java/org/bouncycastle/asn1/ConstructedOctetStream.java index f247b11f..fd261787 100644 --- a/bcprov/src/main/java/org/bouncycastle/asn1/ConstructedOctetStream.java +++ b/bcprov/src/main/java/org/bouncycastle/asn1/ConstructedOctetStream.java @@ -26,15 +26,14 @@ class ConstructedOctetStream return -1; } - ASN1OctetStringParser s = (ASN1OctetStringParser)_parser.readObject(); - - if (s == null) + ASN1OctetStringParser next = getNextParser(); + if (next == null) { return -1; } _first = false; - _currentStream = s.getOctetStream(); + _currentStream = next.getOctetStream(); } int totalRead = 0; @@ -54,15 +53,14 @@ class ConstructedOctetStream } else { - ASN1OctetStringParser aos = (ASN1OctetStringParser)_parser.readObject(); - - if (aos == null) + ASN1OctetStringParser next = getNextParser(); + if (next == null) { _currentStream = null; return totalRead < 1 ? -1 : totalRead; } - _currentStream = aos.getOctetStream(); + _currentStream = next.getOctetStream(); } } } @@ -77,15 +75,14 @@ class ConstructedOctetStream return -1; } - ASN1OctetStringParser s = (ASN1OctetStringParser)_parser.readObject(); - - if (s == null) + ASN1OctetStringParser next = getNextParser(); + if (next == null) { return -1; } - + _first = false; - _currentStream = s.getOctetStream(); + _currentStream = next.getOctetStream(); } for (;;) @@ -97,15 +94,30 @@ class ConstructedOctetStream return b; } - ASN1OctetStringParser s = (ASN1OctetStringParser)_parser.readObject(); - - if (s == null) + ASN1OctetStringParser next = getNextParser(); + if (next == null) { _currentStream = null; return -1; } - _currentStream = s.getOctetStream(); + _currentStream = next.getOctetStream(); } } + + private ASN1OctetStringParser getNextParser() throws IOException + { + ASN1Encodable asn1Obj = _parser.readObject(); + if (asn1Obj == null) + { + return null; + } + + if (asn1Obj instanceof ASN1OctetStringParser) + { + return (ASN1OctetStringParser)asn1Obj; + } + + throw new IOException("unknown object encountered: " + asn1Obj.getClass()); + } } |