File tree 2 files changed +7
-0
lines changed
2 files changed +7
-0
lines changed Original file line number Diff line number Diff line change @@ -534,6 +534,8 @@ void jl_compute_field_offsets(jl_datatype_t *st)
534
534
size_t fsz , al ;
535
535
if (jl_isbits (ty ) && jl_is_leaf_type (ty )) {
536
536
fsz = jl_datatype_size (ty );
537
+ if (__unlikely (fsz > JL_FIELD_MAX_SIZE ))
538
+ jl_throw (jl_overflow_exception );
537
539
al = ((jl_datatype_t * )ty )-> alignment ;
538
540
st -> fields [i ].isptr = 0 ;
539
541
}
@@ -550,6 +552,8 @@ void jl_compute_field_offsets(jl_datatype_t *st)
550
552
if (al > alignm )
551
553
alignm = al ;
552
554
}
555
+ if (__unlikely (sz > JL_FIELD_MAX_OFFSET ))
556
+ jl_throw (jl_overflow_exception );
553
557
st -> fields [i ].offset = sz ;
554
558
st -> fields [i ].size = fsz ;
555
559
sz += fsz ;
Original file line number Diff line number Diff line change @@ -265,6 +265,9 @@ typedef struct {
265
265
uint16_t isptr :1 ;
266
266
} jl_fielddesc_t ;
267
267
268
+ #define JL_FIELD_MAX_OFFSET ((1ul << 16) - 1ul)
269
+ #define JL_FIELD_MAX_SIZE ((1ul << 15) - 1ul)
270
+
268
271
typedef struct _jl_datatype_t {
269
272
JL_DATA_TYPE
270
273
jl_typename_t * name ;
You can’t perform that action at this time.
0 commit comments