diff options
-rw-r--r-- | ChangeLog | 1 | ||||
-rwxr-xr-x | asn1c/check-xxber.sh | 12 | ||||
-rw-r--r-- | asn1c/unber.c | 5 |
3 files changed, 13 insertions, 5 deletions
@@ -11,6 +11,7 @@ * Made unber(1) program more verbose: effective structure length is now displayed as L="<n>" at the closing tag. (Test check-xxber.sh). * Fixed unber(1)'s -1 switch for indefinite encoding length. + * New command line option for unber(1): -m to enable minimalistic mode. 0.9.17: 2005-Aug-07 diff --git a/asn1c/check-xxber.sh b/asn1c/check-xxber.sh index cb8cdeec..ea989ec7 100755 --- a/asn1c/check-xxber.sh +++ b/asn1c/check-xxber.sh @@ -10,9 +10,15 @@ diff -u . . 2>/dev/null && diffArgs="$diffArgs -u" # Unified diff output cat<<EOM > $ORIG <I O="0" T="[UNIVERSAL 16]" TL="2" V="Indefinite" A="SEQUENCE"> <P O="2" T="[UNIVERSAL 19]" TL="2" V="2" A="PrintableString">US</P> -<C O="6" T="[UNIVERSAL 16]" TL="2" V="6" A="SEQUENCE"> +<C O="6" T="[UNIVERSAL 16]" TL="2" V="22" A="SEQUENCE"> <P O="8" T="[UNIVERSAL 2]" TL="2" V="4" A="INTEGER">1¦ G</P> -</C O="14" T="[UNIVERSAL 16]" A="SEQUENCE" L="8"> +<C O="14" T="[UNIVERSAL 16]" TL="2" V="6" A="SEQUENCE"> +<P O="16" T="[UNIVERSAL 2]" TL="2" V="4" A="INTEGER">1¦ G</P> +</C O="22" T="[UNIVERSAL 16]" A="SEQUENCE" L="8"> +<C O="22" T="[UNIVERSAL 16]" TL="2" V="6" A="SEQUENCE"> +<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"> EOM ./enber $ORIG | ./unber -p -i 0 - > $TEST 2>&1 @@ -25,7 +31,7 @@ if [ "$diffExitCode" = "0" ]; then fi # Append necessary terminator -echo '</I O="14" T="[UNIVERSAL 0]" TL="2" L="16">' >> $ORIG +echo '</I O="30" T="[UNIVERSAL 0]" TL="2" L="32">' >> $ORIG # Try trancoding again ./enber $ORIG | ./unber -p -i 0 - > $TEST 2>&1 diff --git a/asn1c/unber.c b/asn1c/unber.c index 8758ca56..80091812 100644 --- a/asn1c/unber.c +++ b/asn1c/unber.c @@ -202,11 +202,11 @@ process_deeper(const char *fname, FILE *fp, asn1c_integer_t *offset, int level, pd_code_e pdc = PD_FINISHED; ber_tlv_tag_t tlv_tag; ber_tlv_len_t tlv_len; - ber_tlv_len_t local_esize = effective_size; ssize_t t_len; ssize_t l_len; do { + ber_tlv_len_t local_esize = 0; int constr; int ch; @@ -295,6 +295,8 @@ process_deeper(const char *fname, FILE *fp, asn1c_integer_t *offset, int level, *offset += t_len + l_len; *frame_size += t_len + l_len; effective_size += t_len + l_len; + printf("LES %d + %d + %d\n", + (int)local_esize, (int)t_len, (int)l_len); local_esize += t_len + l_len; if(expect_eoc && tagbuf[0] == '\0' && tagbuf[1] == '\0') { @@ -346,7 +348,6 @@ process_deeper(const char *fname, FILE *fp, asn1c_integer_t *offset, int level, print_TL(1, *offset, level, constr, tblen, tlv_tag, tlv_len, local_esize); - local_esize = 0; tblen = 0; } while(1); |