… | |
… | |
665 | SV *decode_tagged; |
665 | SV *decode_tagged; |
666 | } dec_t; |
666 | } dec_t; |
667 | |
667 | |
668 | #define ERR(reason) SB if (!dec->err) dec->err = reason; goto fail; SE |
668 | #define ERR(reason) SB if (!dec->err) dec->err = reason; goto fail; SE |
669 | |
669 | |
670 | #define WANT(len) if (ecb_expect_false (dec->cur + len > dec->end)) ERR ("unexpected end of CBOR data") |
670 | #define WANT(len) if (ecb_expect_false ((UV)(dec->end - dec->cur) < (UV)len)) ERR ("unexpected end of CBOR data") |
671 | |
671 | |
672 | #define DEC_INC_DEPTH if (ecb_expect_false (++dec->depth > dec->cbor.max_depth)) ERR (ERR_NESTING_EXCEEDED) |
672 | #define DEC_INC_DEPTH if (ecb_expect_false (++dec->depth > dec->cbor.max_depth)) ERR (ERR_NESTING_EXCEEDED) |
673 | #define DEC_DEC_DEPTH --dec->depth |
673 | #define DEC_DEC_DEPTH --dec->depth |
674 | |
674 | |
675 | static UV |
675 | static UV |
… | |
… | |
754 | av_push (av, decode_sv (dec)); |
754 | av_push (av, decode_sv (dec)); |
755 | } |
755 | } |
756 | } |
756 | } |
757 | else |
757 | else |
758 | { |
758 | { |
759 | int i, len = decode_uint (dec); |
759 | UV i, len = decode_uint (dec); |
760 | |
760 | |
761 | WANT (len); // complexity check for av_fill - need at least one byte per value, do not allow supersize arrays |
761 | WANT (len); // complexity check for av_fill - need at least one byte per value, do not allow supersize arrays |
762 | av_fill (av, len - 1); |
762 | av_fill (av, len - 1); |
763 | |
763 | |
764 | for (i = 0; i < len; ++i) |
764 | for (i = 0; i < len; ++i) |
… | |
… | |
844 | decode_he (dec, hv); |
844 | decode_he (dec, hv); |
845 | } |
845 | } |
846 | } |
846 | } |
847 | else |
847 | else |
848 | { |
848 | { |
849 | int pairs = decode_uint (dec); |
849 | UV pairs = decode_uint (dec); |
|
|
850 | |
|
|
851 | WANT (pairs); // complexity check - need at least one byte per value, do not allow supersize hashes |
850 | |
852 | |
851 | while (pairs--) |
853 | while (pairs--) |
852 | decode_he (dec, hv); |
854 | decode_he (dec, hv); |
853 | } |
855 | } |
854 | |
856 | |