diff options
author | Lev Walkin <vlm@lionet.info> | 2005-11-28 19:12:38 +0000 |
---|---|---|
committer | Lev Walkin <vlm@lionet.info> | 2005-11-28 19:12:38 +0000 |
commit | ff4cf9d2bbc80746033ac810c80110a883da9897 (patch) | |
tree | d7a03e3baedb817d91770f8eda8e405a3f3e7895 /asn1c | |
parent | 6036488576624c21d7e7035dd488cb36502b6986 (diff) |
proper reacting on nested indefinite length containers
Diffstat (limited to 'asn1c')
-rwxr-xr-x | asn1c/check-xxber.sh | 4 | ||||
-rw-r--r-- | asn1c/unber.c | 8 |
2 files changed, 8 insertions, 4 deletions
diff --git a/asn1c/check-xxber.sh b/asn1c/check-xxber.sh index ea989ec7..a5ebe797 100755 --- a/asn1c/check-xxber.sh +++ b/asn1c/check-xxber.sh @@ -19,6 +19,8 @@ cat<<EOM > $ORIG <P O="24" T="[UNIVERSAL 2]" TL="2" V="4" A="INTEGER">1¦ G</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 @@ if [ "$diffExitCode" = "0" ]; then 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 c573cfdb..21761312 100644 --- a/asn1c/unber.c +++ b/asn1c/unber.c @@ -322,9 +322,10 @@ process_deeper(const char *fname, FILE *fp, asn1c_integer_t *offset, int level, 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 @@ process_deeper(const char *fname, FILE *fp, asn1c_integer_t *offset, int level, 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; } |