@@ -1676,9 +1676,15 @@ ecma_builtin_array_prototype_object_index_of (const ecma_value_t args[], /**< ar
16761676 {
16771677 ecma_extended_object_t * ext_obj_p = (ecma_extended_object_t * ) obj_p ;
16781678
1679- if (ext_obj_p -> u .array .u .hole_count < ECMA_FAST_ARRAY_HOLE_ONE
1680- && len != 0 )
1679+ if (ext_obj_p -> u .array .u .hole_count < ECMA_FAST_ARRAY_HOLE_ONE )
16811680 {
1681+ if (JERRY_UNLIKELY (obj_p -> u1 .property_list_cp == JMEM_CP_NULL ))
1682+ {
1683+ return ecma_make_integer_value (-1 );
1684+ }
1685+
1686+ len = JERRY_MIN (ext_obj_p -> u .array .length , len );
1687+
16821688 ecma_value_t * buffer_p = ECMA_GET_NON_NULL_POINTER (ecma_value_t , obj_p -> u1 .property_list_cp );
16831689
16841690 while (from_idx < len )
@@ -1775,12 +1781,16 @@ ecma_builtin_array_prototype_object_last_index_of (const ecma_value_t args[], /*
17751781 if (ecma_op_object_is_fast_array (obj_p ))
17761782 {
17771783 ecma_extended_object_t * ext_obj_p = (ecma_extended_object_t * ) obj_p ;
1778- // It is possible that the length changed due to the callback performed above.
1779- uint32_t array_length = ext_obj_p -> u .array .length ;
17801784
1781- if (ext_obj_p -> u .array .u .hole_count < ECMA_FAST_ARRAY_HOLE_ONE
1782- && array_length > 0 )
1785+ if (ext_obj_p -> u .array .u .hole_count < ECMA_FAST_ARRAY_HOLE_ONE )
17831786 {
1787+ if (JERRY_UNLIKELY (obj_p -> u1 .property_list_cp == JMEM_CP_NULL ))
1788+ {
1789+ return ecma_make_integer_value (-1 );
1790+ }
1791+
1792+ len = JERRY_MIN (ext_obj_p -> u .array .length , len );
1793+
17841794 ecma_value_t * buffer_p = ECMA_GET_NON_NULL_POINTER (ecma_value_t , obj_p -> u1 .property_list_cp );
17851795
17861796 while (from_idx < len )
@@ -2294,9 +2304,14 @@ ecma_builtin_array_prototype_fill (ecma_value_t value, /**< value */
22942304 ecma_extended_object_t * ext_obj_p = (ecma_extended_object_t * ) obj_p ;
22952305
22962306 if (ext_obj_p -> u .array .u .hole_count < ECMA_FAST_ARRAY_HOLE_ONE
2297- && len != 0
22982307 && ecma_op_ordinary_object_is_extensible (obj_p ))
22992308 {
2309+ if (JERRY_UNLIKELY (obj_p -> u1 .property_list_cp == JMEM_CP_NULL ))
2310+ {
2311+ ecma_ref_object (obj_p );
2312+ return ecma_make_object_value (obj_p );
2313+ }
2314+
23002315 ecma_value_t * buffer_p = ECMA_GET_NON_NULL_POINTER (ecma_value_t , obj_p -> u1 .property_list_cp );
23012316
23022317 while (k < final )
0 commit comments