@@ -229,6 +229,7 @@ static void mpack_partial_fill(mpack_reader_t* reader) {
229
229
230
230
bool mpack_reader_ensure_straddle (mpack_reader_t * reader , size_t count ) {
231
231
mpack_assert (count != 0 , "cannot ensure zero bytes!" );
232
+ mpack_assert (reader -> error == mpack_ok , "reader cannot be in an error state!" );
232
233
233
234
if (count <= reader -> left ) {
234
235
mpack_assert (0 ,
@@ -248,6 +249,9 @@ bool mpack_reader_ensure_straddle(mpack_reader_t* reader, size_t count) {
248
249
return false;
249
250
}
250
251
252
+ mpack_assert (count <= reader -> size , "cannot ensure byte count %i larger than buffer size %i" ,
253
+ (int )count , (int )reader -> size );
254
+
251
255
// re-fill as much as possible
252
256
mpack_partial_fill (reader );
253
257
@@ -591,6 +595,8 @@ const char* mpack_read_utf8_inplace(mpack_reader_t* reader, size_t count) {
591
595
// Decodes a tag from a byte buffer. The size of the bytes buffer
592
596
// must be at least MPACK_MINIMUM_TAG_SIZE.
593
597
static 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
+
594
600
if (!mpack_reader_ensure (reader , 1 ))
595
601
return 0 ;
596
602
uint8_t type = mpack_load_u8 (reader -> buffer + reader -> pos );
@@ -965,6 +971,8 @@ mpack_tag_t mpack_read_tag(mpack_reader_t* reader) {
965
971
mpack_log ("reading tag\n" );
966
972
967
973
// make sure we can read a tag
974
+ if (mpack_reader_error (reader ) != mpack_ok )
975
+ return mpack_tag_nil ();
968
976
if (mpack_reader_track_element (reader ) != mpack_ok )
969
977
return mpack_tag_nil ();
970
978
@@ -1008,6 +1016,9 @@ mpack_tag_t mpack_read_tag(mpack_reader_t* reader) {
1008
1016
mpack_tag_t mpack_peek_tag (mpack_reader_t * reader ) {
1009
1017
mpack_log ("peeking tag\n" );
1010
1018
1019
+ // make sure we can peek a tag
1020
+ if (mpack_reader_error (reader ) != mpack_ok )
1021
+ return mpack_tag_nil ();
1011
1022
if (mpack_reader_track_peek_element (reader ) != mpack_ok )
1012
1023
return mpack_tag_nil ();
1013
1024
0 commit comments