diff options
author | Lev Walkin <vlm@lionet.info> | 2004-10-02 00:10:25 +0000 |
---|---|---|
committer | Lev Walkin <vlm@lionet.info> | 2004-10-02 00:10:25 +0000 |
commit | 7c9e9237e9498ece7bb213718c6241fd3f1a6b3d (patch) | |
tree | 6c214a680d1702793a75cba7b9e906d6c4c643ef /asn1c/unber.c | |
parent | 28c89eb4d4f51a8205bd6d675c6aaf2b5101f06c (diff) |
fixed limits accounting
Diffstat (limited to 'asn1c/unber.c')
-rw-r--r-- | asn1c/unber.c | 13 |
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; } |