aboutsummaryrefslogtreecommitdiffstats
path: root/asn1c/unber.c
diff options
context:
space:
mode:
authorLev Walkin <vlm@lionet.info>2004-10-02 00:10:25 +0000
committerLev Walkin <vlm@lionet.info>2004-10-02 00:10:25 +0000
commit7c9e9237e9498ece7bb213718c6241fd3f1a6b3d (patch)
tree6c214a680d1702793a75cba7b9e906d6c4c643ef /asn1c/unber.c
parent28c89eb4d4f51a8205bd6d675c6aaf2b5101f06c (diff)
fixed limits accounting
Diffstat (limited to 'asn1c/unber.c')
-rw-r--r--asn1c/unber.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/asn1c/unber.c b/asn1c/unber.c
index bb52690f..2ed9565c 100644
--- a/asn1c/unber.c
+++ b/asn1c/unber.c
@@ -301,11 +301,17 @@ static pd_code_e process_deeper(const char *fname, FILE *fp, int level, ssize_t
* This is a constructed type. Process recursively.
*/
printf(">\n"); /* Close the opening tag */
+ if(tlv_len != -1 && limit != -1) {
+ assert(limit >= tlv_len);
+ }
pdc = process_deeper(fname, fp, level + 1,
tlv_len == -1 ? limit : tlv_len,
&dec, tlv_len == -1);
if(pdc == PD_FAILED) return pdc;
- if(limit != -1) limit -= dec;
+ if(limit != -1) {
+ assert(limit >= dec);
+ limit -= dec;
+ }
*decoded += dec;
if(tlv_len == -1) {
tblen = 0;
@@ -316,7 +322,10 @@ static pd_code_e process_deeper(const char *fname, FILE *fp, int level, ssize_t
if(print_V(fname, fp, tlv_tag, tlv_len))
return PD_FAILED;
- limit -= tlv_len;
+ if(limit != -1) {
+ assert(limit >= tlv_len);
+ limit -= tlv_len;
+ }
*decoded += tlv_len;
}