proper reacting on nested indefinite length containers


git-svn-id: https://asn1c.svn.sourceforge.net/svnroot/asn1c/trunk@1017 59561ff5-6e30-0410-9f3c-9617f08c8826
diff --git a/asn1c/check-xxber.sh b/asn1c/check-xxber.sh
index ea989ec..a5ebe79 100755
--- a/asn1c/check-xxber.sh
+++ b/asn1c/check-xxber.sh
@@ -19,6 +19,8 @@
 <P O="24" T="[UNIVERSAL 2]" TL="2" V="4" A="INTEGER">&#x31;&#xa6;&#x20;&#x47;</P>
 </C O="30" T="[UNIVERSAL 16]" A="SEQUENCE" L="8">
 </C O="30" T="[UNIVERSAL 16]" A="SEQUENCE" L="24">
+<I O="30" T="[UNIVERSAL 16]" TL="2" V="Indefinite" A="SEQUENCE">
+</I O="32" T="[UNIVERSAL 0]" TL="2" L="4">
 EOM
 
 ./enber $ORIG | ./unber -p -i 0 - > $TEST 2>&1
@@ -31,7 +33,7 @@
 fi
 
 # Append necessary terminator
-echo '</I O="30" T="[UNIVERSAL 0]" TL="2" L="32">' >> $ORIG
+echo '</I O="34" T="[UNIVERSAL 0]" TL="2" L="36">' >> $ORIG
 
 # Try trancoding again
 ./enber $ORIG | ./unber -p -i 0 - > $TEST 2>&1
diff --git a/asn1c/unber.c b/asn1c/unber.c
index c573cfd..2176131 100644
--- a/asn1c/unber.c
+++ b/asn1c/unber.c
@@ -322,9 +322,10 @@
 		effective_size += t_len + l_len;
 		local_esize += t_len + l_len;
 
-		if(expect_eoc && tagbuf[0] == '\0' && tagbuf[1] == '\0') {
+		if(expect_eoc && !tagbuf[0] && !tagbuf[1]) {
 			/* End of content octets */
-			print_TL(1, *offset - 2, level - 1, 1, 2, 0, -1, effective_size);
+			print_TL(1, *offset - 2, level - 1, 1, 2, 0, -1,
+					effective_size);
 			return PD_FINISHED;
 		}
 
@@ -350,7 +351,8 @@
 			local_esize += dec;
 			if(tlv_len == -1) {
 				tblen = 0;
-				if(pdc == PD_FINISHED && limit < 0)
+				if(pdc == PD_FINISHED
+					&& limit < 0 && !expect_eoc)
 					return pdc;
 				continue;
 			}