Skip to content

Commit 05a4e45

Browse files
authored
Fix uninitialized data in create native property (#4650)
JerryScript-DCO-1.0-Signed-off-by: Zoltan Herczeg [email protected]
1 parent 60cbc93 commit 05a4e45

File tree

2 files changed

+39
-0
lines changed

2 files changed

+39
-0
lines changed

jerry-core/ecma/base/ecma-helpers-external-pointers.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ ecma_create_native_pointer_property (ecma_object_t *obj_p, /**< object to create
127127

128128
new_item_p = (ecma_native_pointer_chain_t *) jmem_heap_alloc_block (sizeof (ecma_native_pointer_chain_t));
129129
item_p->next_p = new_item_p;
130+
new_item_p->next_p = NULL;
130131

131132
native_pointer_p = &new_item_p->data;
132133
}

tests/unit-core/test-native-pointer.c

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,11 @@ static const jerry_object_native_info_t native_info_2 =
4040
.free_cb = NULL,
4141
};
4242

43+
static const jerry_object_native_info_t native_info_3 =
44+
{
45+
.free_cb = NULL,
46+
};
47+
4348
static void
4449
check_native_info (jerry_value_t object_value, /**< object value */
4550
const jerry_object_native_info_t *native_info_p, /**< native info */
@@ -111,6 +116,39 @@ main (void)
111116
TEST_ASSERT (!jerry_get_object_native_pointer (object_value, NULL, &native_info_1));
112117
TEST_ASSERT (!jerry_get_object_native_pointer (object_value, NULL, &native_info_2));
113118

119+
jerry_set_object_native_pointer (object_value, global_p, &native_info_1);
120+
jerry_set_object_native_pointer (object_value, NULL, &native_info_2);
121+
jerry_set_object_native_pointer (object_value, global_p, &native_info_3);
122+
123+
check_native_info (object_value, &native_info_1, global_p);
124+
check_native_info (object_value, &native_info_2, NULL);
125+
check_native_info (object_value, &native_info_3, global_p);
126+
127+
TEST_ASSERT (jerry_delete_object_native_pointer (object_value, &native_info_1));
128+
TEST_ASSERT (jerry_delete_object_native_pointer (object_value, &native_info_2));
129+
TEST_ASSERT (jerry_delete_object_native_pointer (object_value, &native_info_3));
130+
131+
TEST_ASSERT (!jerry_get_object_native_pointer (object_value, NULL, &native_info_1));
132+
TEST_ASSERT (!jerry_get_object_native_pointer (object_value, NULL, &native_info_2));
133+
TEST_ASSERT (!jerry_get_object_native_pointer (object_value, NULL, &native_info_3));
134+
135+
jerry_set_object_native_pointer (object_value, NULL, &native_info_1);
136+
jerry_set_object_native_pointer (object_value, global_p, &native_info_2);
137+
jerry_set_object_native_pointer (object_value, NULL, &native_info_3);
138+
139+
check_native_info (object_value, &native_info_1, NULL);
140+
check_native_info (object_value, &native_info_2, global_p);
141+
check_native_info (object_value, &native_info_3, NULL);
142+
143+
/* Reversed delete order. */
144+
TEST_ASSERT (jerry_delete_object_native_pointer (object_value, &native_info_3));
145+
TEST_ASSERT (jerry_delete_object_native_pointer (object_value, &native_info_2));
146+
TEST_ASSERT (jerry_delete_object_native_pointer (object_value, &native_info_1));
147+
148+
TEST_ASSERT (!jerry_get_object_native_pointer (object_value, NULL, &native_info_1));
149+
TEST_ASSERT (!jerry_get_object_native_pointer (object_value, NULL, &native_info_2));
150+
TEST_ASSERT (!jerry_get_object_native_pointer (object_value, NULL, &native_info_3));
151+
114152
jerry_release_value (object_value);
115153

116154
jerry_cleanup ();

0 commit comments

Comments
 (0)