@@ -89,7 +89,7 @@ get_pool_block_size(mrb_state *mrb, mrb_irep *irep)
8989 str = mrb_fixnum_to_str (mrb , irep -> pool [pool_no ], 10 );
9090 {
9191 mrb_int len = RSTRING_LEN (str );
92- mrb_assert ( len >= 0 && ( size_t ) len <= SIZE_MAX );
92+ mrb_assert_int_fit ( mrb_int , len , size_t , SIZE_MAX );
9393 size += (size_t )len ;
9494 }
9595 break ;
@@ -98,15 +98,15 @@ get_pool_block_size(mrb_state *mrb, mrb_irep *irep)
9898 {
9999 int len ;
100100 len = mrb_float_to_str (buf , mrb_float (irep -> pool [pool_no ]));
101- mrb_assert ( len >= 0 && ( size_t ) len <= SIZE_MAX );
101+ mrb_assert_int_fit ( mrb_int , len , size_t , SIZE_MAX );
102102 size += (size_t )len ;
103103 }
104104 break ;
105105
106106 case MRB_TT_STRING :
107107 {
108108 mrb_int len = RSTRING_LEN (irep -> pool [pool_no ]);
109- mrb_assert ( len >= 0 && ( size_t ) len <= SIZE_MAX );
109+ mrb_assert_int_fit ( mrb_int , len , size_t , SIZE_MAX );
110110 size += (size_t )len ;
111111 }
112112 break ;
@@ -142,9 +142,9 @@ write_pool_block(mrb_state *mrb, mrb_irep *irep, uint8_t *buf)
142142 char_ptr = RSTRING_PTR (str );
143143 {
144144 mrb_int tlen ;
145+
145146 tlen = RSTRING_LEN (str );
146- mrb_assert (tlen >= 0 );
147- mrb_assert (tlen <= INT16_MAX );
147+ mrb_assert_int_fit (mrb_int , tlen , uint16_t , UINT16_MAX );
148148 len = (uint16_t )tlen ;
149149 }
150150 break ;
@@ -154,8 +154,7 @@ write_pool_block(mrb_state *mrb, mrb_irep *irep, uint8_t *buf)
154154 {
155155 int tlen ;
156156 tlen = mrb_float_to_str (char_buf , mrb_float (irep -> pool [pool_no ]));
157- mrb_assert (tlen >= 0 );
158- mrb_assert (tlen <= INT16_MAX );
157+ mrb_assert_int_fit (int , tlen , uint16_t , UINT16_MAX );
159158 len = (uint16_t )tlen ;
160159 }
161160 char_ptr = & char_buf [0 ];
@@ -166,9 +165,9 @@ write_pool_block(mrb_state *mrb, mrb_irep *irep, uint8_t *buf)
166165 char_ptr = RSTRING_PTR (irep -> pool [pool_no ]);
167166 {
168167 mrb_int tlen ;
168+
169169 tlen = RSTRING_LEN (irep -> pool [pool_no ]);
170- mrb_assert (tlen >= 0 );
171- mrb_assert (tlen <= INT16_MAX );
170+ mrb_assert_int_fit (mrb_int , tlen , uint16_t , UINT16_MAX );
172171 len = (uint16_t )tlen ;
173172 }
174173 break ;
@@ -222,7 +221,7 @@ write_syms_block(mrb_state *mrb, mrb_irep *irep, uint8_t *buf)
222221
223222 name = mrb_sym2name_len (mrb , irep -> syms [sym_no ], & len );
224223
225- mrb_assert ( len <= UINT16_MAX );
224+ mrb_assert_int_fit ( mrb_int , len , uint16_t , UINT16_MAX );
226225 cur += uint16_to_bin ((uint16_t )len , cur ); /* length of symbol name */
227226 memcpy (cur , name , len ); /* symbol name */
228227 cur += (uint16_t )len ;
@@ -315,7 +314,8 @@ write_section_irep_header(mrb_state *mrb, size_t section_size, uint8_t *bin)
315314 struct rite_section_irep_header * header = (struct rite_section_irep_header * )bin ;
316315
317316 memcpy (header -> section_identify , RITE_SECTION_IREP_IDENTIFIER , sizeof (header -> section_identify ));
318- mrb_assert (section_size <= UINT32_MAX );
317+
318+ mrb_assert_int_fit (size_t , section_size , uint32_t , UINT32_MAX );
319319 uint32_to_bin ((uint32_t )section_size , header -> section_size );
320320 memcpy (header -> rite_version , RITE_VM_VER , sizeof (header -> rite_version ));
321321
@@ -392,7 +392,7 @@ write_lineno_record_1(mrb_state *mrb, mrb_irep *irep, uint8_t* bin)
392392 } else {
393393 filename_len = 0 ;
394394 }
395- mrb_assert ( filename_len <= UINT16_MAX );
395+ mrb_assert_int_fit ( size_t , filename_len , uint16_t , UINT16_MAX );
396396 cur += uint16_to_bin ((uint16_t )filename_len , cur ); /* filename size */
397397
398398 if (filename_len ) {
@@ -401,7 +401,7 @@ write_lineno_record_1(mrb_state *mrb, mrb_irep *irep, uint8_t* bin)
401401 }
402402
403403 if (irep -> lines ) {
404- mrb_assert ( irep -> ilen <= UINT32_MAX );
404+ mrb_assert_int_fit ( size_t , irep -> ilen , uint32_t , UINT32_MAX );
405405 cur += uint32_to_bin ((uint32_t )(irep -> ilen ), cur ); /* niseq */
406406 for (iseq_no = 0 ; iseq_no < irep -> ilen ; iseq_no ++ ) {
407407 cur += uint16_to_bin (irep -> lines [iseq_no ], cur ); /* opcode */
@@ -412,12 +412,11 @@ write_lineno_record_1(mrb_state *mrb, mrb_irep *irep, uint8_t* bin)
412412 }
413413
414414 diff = cur - bin ;
415- mrb_assert (diff >= 0 );
416- mrb_assert ((uint32_t )diff <= UINT32_MAX );
415+ mrb_assert_int_fit (ptrdiff_t , diff , uint32_t , UINT32_MAX );
417416
418417 uint32_to_bin ((uint32_t )diff , bin ); /* record size */
419418
420- mrb_assert (( size_t ) diff <= SIZE_MAX );
419+ mrb_assert_int_fit ( ptrdiff_t , diff , size_t , SIZE_MAX );
421420 return (size_t )diff ;
422421}
423422
@@ -565,8 +564,7 @@ write_debug_record_1(mrb_state *mrb, mrb_irep *irep, uint8_t *bin, mrb_sym const
565564 /* filename index */
566565 filename_idx = find_filename_index (filenames , filenames_len ,
567566 file -> filename_sym );
568- mrb_assert (filename_idx >= 0 );
569- mrb_assert (filename_idx <= UINT16_MAX );
567+ mrb_assert_int_fit (int , filename_idx , uint16_t , UINT16_MAX );
570568 cur += uint16_to_bin ((uint16_t )filename_idx , cur );
571569
572570 /* lines */
@@ -593,10 +591,10 @@ write_debug_record_1(mrb_state *mrb, mrb_irep *irep, uint8_t *bin, mrb_sym const
593591 }
594592
595593 ret = cur - bin ;
596- mrb_assert ( ret >= 0 && ( uint32_t ) ret <= UINT32_MAX );
594+ mrb_assert_int_fit ( ptrdiff_t , ret , uint32_t , UINT32_MAX );
597595 uint32_to_bin (ret , bin );
598596
599- mrb_assert ( ret >= 0 && ( size_t ) ret <= SIZE_MAX );
597+ mrb_assert_int_fit ( ptrdiff_t , ret , size_t , SIZE_MAX );
600598 return (size_t )ret ;
601599}
602600
0 commit comments