Skip to content

Commit b203b9d

Browse files
committed
src: fix napi_check_object_type_tag()
This fixes a comparison failure occurring when the upper value of a type tag is 0, or a type tag value is 0. Signed-off-by: Daeyeon Jeong [email protected]
1 parent 71cbab6 commit b203b9d

File tree

3 files changed

+19
-5
lines changed

3 files changed

+19
-5
lines changed

‎src/js_native_api_v8.cc‎

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2452,8 +2452,16 @@ napi_status NAPI_CDECL napi_check_object_type_tag(napi_env env,
24522452
napi_type_tag tag;
24532453
val.As<v8::BigInt>()->ToWordsArray(
24542454
&sign, &size, reinterpret_cast<uint64_t*>(&tag));
2455-
if (size == 2 && sign == 0)
2456-
*result = (tag.lower == type_tag->lower && tag.upper == type_tag->upper);
2455+
if (sign == 0){
2456+
if (size == 2){
2457+
*result =
2458+
(tag.lower == type_tag->lower && tag.upper == type_tag->upper);
2459+
} elseif (size == 1){
2460+
*result = (tag.lower == type_tag->lower);
2461+
} elseif (size == 0){
2462+
*result = (type_tag->lower == 0 && type_tag->upper == 0);
2463+
}
2464+
}
24572465
}
24582466

24592467
returnGET_RETURN_STATUS(env);

‎test/js-native-api/test_object/test.js‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,10 +163,14 @@ assert.strictEqual(newObject.test_string, 'test string');
163163
// Verify that objects can be type-tagged and type-tag-checked.
164164
constobj1=test_object.TypeTaggedInstance(0);
165165
constobj2=test_object.TypeTaggedInstance(1);
166+
constobj3=test_object.TypeTaggedInstance(2);
167+
constobj4=test_object.TypeTaggedInstance(3);
166168

167169
// Verify that type tags are correctly accepted.
168170
assert.strictEqual(test_object.CheckTypeTag(0,obj1),true);
169171
assert.strictEqual(test_object.CheckTypeTag(1,obj2),true);
172+
assert.strictEqual(test_object.CheckTypeTag(2,obj3),true);
173+
assert.strictEqual(test_object.CheckTypeTag(3,obj4),true);
170174

171175
// Verify that wrongly tagged objects are rejected.
172176
assert.strictEqual(test_object.CheckTypeTag(0,obj2),false);

‎test/js-native-api/test_object/test_object.c‎

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -605,9 +605,11 @@ static napi_value TestSeal(napi_env env,
605605
}
606606

607607
// We create two type tags. They are basically 128-bit UUIDs.
608-
staticconstnapi_type_tagtype_tags[2] ={
609-
{0xdaf987b3cc62481a, 0xb745b0497f299531 },
610-
{0xbb7936c374084d9b, 0xa9548d0762eeedb9 }
608+
staticconstnapi_type_tagtype_tags[5] ={
609+
{0xdaf987b3cc62481a, 0xb745b0497f299531},
610+
{0xbb7936c374084d9b, 0xa9548d0762eeedb9},
611+
{0xa5ed9ce2e4c00c38, 0x0},
612+
{0x0, 0x0},
611613
};
612614

613615
staticnapi_value

0 commit comments

Comments
(0)