Skip to content

Commit

Permalink
Merge pull request #2092 from Unity-Technologies/2022.3/bugfixes/fix-…
Browse files Browse the repository at this point in the history
…fieldlist-65535-fields

[2022.3] [UUM-78961] Fixed initialization of a class which has last fields in a table with 65535 field entries and the next class having no fields
  • Loading branch information
alexey-zakharov authored Nov 8, 2024
2 parents db8d601 + 51d6bd0 commit fd29432
Showing 1 changed file with 6 additions and 3 deletions.
9 changes: 6 additions & 3 deletions mono/metadata/class-init.c
Original file line number Diff line number Diff line change
Expand Up @@ -634,17 +634,20 @@ mono_class_create_from_typedef (MonoImage *image, guint32 type_token, MonoError

if (tt->rows > tidx){
mono_metadata_decode_row (tt, tidx, cols_next, MONO_TYPEDEF_SIZE);
field_last = cols_next [MONO_TYPEDEF_FIELD_LIST] - 1;
method_last = cols_next [MONO_TYPEDEF_METHOD_LIST] - 1;
/* check if the next row has fields at all, if not, then continue run till the end of the table */
field_last = cols_next [MONO_TYPEDEF_FIELD_LIST] ? cols_next [MONO_TYPEDEF_FIELD_LIST] - 1 : image->tables [MONO_TABLE_FIELD].rows;
method_last = cols_next [MONO_TYPEDEF_METHOD_LIST] ? cols_next [MONO_TYPEDEF_METHOD_LIST] - 1 : image->tables [MONO_TABLE_METHOD].rows;
} else {
field_last = image->tables [MONO_TABLE_FIELD].rows;
method_last = image->tables [MONO_TABLE_METHOD].rows;
}

/* validate for both fields and methods that class has non-null list entries */
if (cols [MONO_TYPEDEF_FIELD_LIST] &&
cols [MONO_TYPEDEF_FIELD_LIST] <= image->tables [MONO_TABLE_FIELD].rows)
mono_class_set_field_count (klass, field_last - first_field_idx);
if (cols [MONO_TYPEDEF_METHOD_LIST] <= image->tables [MONO_TABLE_METHOD].rows)
if (cols [MONO_TYPEDEF_METHOD_LIST] &&
cols [MONO_TYPEDEF_METHOD_LIST] <= image->tables [MONO_TABLE_METHOD].rows)
mono_class_set_method_count (klass, method_last - first_method_idx);

/* reserve space to store vector pointer in arrays */
Expand Down

0 comments on commit fd29432

Please sign in to comment.