@@ -229,6 +229,7 @@ static void mpack_partial_fill(mpack_reader_t* reader) {
229229
230230bool mpack_reader_ensure_straddle (mpack_reader_t * reader , size_t count ) {
231231 mpack_assert (count != 0 , "cannot ensure zero bytes!" );
232+ mpack_assert (reader -> error == mpack_ok , "reader cannot be in an error state!" );
232233
233234 if (count <= reader -> left ) {
234235 mpack_assert (0 ,
@@ -248,6 +249,9 @@ bool mpack_reader_ensure_straddle(mpack_reader_t* reader, size_t count) {
248249 return false;
249250 }
250251
252+ mpack_assert (count <= reader -> size , "cannot ensure byte count %i larger than buffer size %i" ,
253+ (int )count , (int )reader -> size );
254+
251255 // re-fill as much as possible
252256 mpack_partial_fill (reader );
253257
@@ -591,6 +595,8 @@ const char* mpack_read_utf8_inplace(mpack_reader_t* reader, size_t count) {
591595// Decodes a tag from a byte buffer. The size of the bytes buffer
592596// must be at least MPACK_MINIMUM_TAG_SIZE.
593597static size_t mpack_parse_tag (mpack_reader_t * reader , mpack_tag_t * tag ) {
598+ mpack_assert (reader -> error == mpack_ok , "reader cannot be in an error state!" );
599+
594600 if (!mpack_reader_ensure (reader , 1 ))
595601 return 0 ;
596602 uint8_t type = mpack_load_u8 (reader -> buffer + reader -> pos );
@@ -965,6 +971,8 @@ mpack_tag_t mpack_read_tag(mpack_reader_t* reader) {
965971 mpack_log ("reading tag\n" );
966972
967973 // make sure we can read a tag
974+ if (mpack_reader_error (reader ) != mpack_ok )
975+ return mpack_tag_nil ();
968976 if (mpack_reader_track_element (reader ) != mpack_ok )
969977 return mpack_tag_nil ();
970978
@@ -1008,6 +1016,9 @@ mpack_tag_t mpack_read_tag(mpack_reader_t* reader) {
10081016mpack_tag_t mpack_peek_tag (mpack_reader_t * reader ) {
10091017 mpack_log ("peeking tag\n" );
10101018
1019+ // make sure we can peek a tag
1020+ if (mpack_reader_error (reader ) != mpack_ok )
1021+ return mpack_tag_nil ();
10111022 if (mpack_reader_track_peek_element (reader ) != mpack_ok )
10121023 return mpack_tag_nil ();
10131024
0 commit comments