Skip to content

Commit 7252a64

Browse files
Octavian Soldeatargos
Octavian Soldea
authored andcommitted
test: pass null params to napi_xxx_property()
For napi_set_property(), each one of the following arguments is checked: napi_env env, napi_value object, napi_value key, napi_value* value. For napi_has_property(), each one of the following arguments is checked: napi_env env, napi_value object, napi_value key, bool* result For napi_get_property, each one of the following arguments is checked: napi_env env, napi_value object, napi_value key, napi_value* result PR-URL: #27628 Reviewed-By: Gabriel Schulhof <[email protected]> Reviewed-By: Rich Trott <[email protected]>
1 parent b5498ed commit 7252a64

File tree

2 files changed

+215
-0
lines changed

2 files changed

+215
-0
lines changed

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

+27
Original file line numberDiff line numberDiff line change
@@ -225,3 +225,30 @@ assert.strictEqual(newObject.test_string, 'test string');
225225
assert.deepStrictEqual(test_object.GetPropertyNames(object),
226226
['5', 'normal', 'inherited']);
227227
}
228+
229+
// Verify that passing NULL to napi_set_property() results in the correct
230+
// error.
231+
assert.deepStrictEqual(test_object.TestSetProperty(), {
232+
envIsNull: 'pass',
233+
objectIsNull: 'pass',
234+
keyIsNull: 'pass',
235+
valueIsNull: 'pass'
236+
});
237+
238+
// Verify that passing NULL to napi_has_property() results in the correct
239+
// error.
240+
assert.deepStrictEqual(test_object.TestHasProperty(), {
241+
envIsNull: 'pass',
242+
objectIsNull: 'pass',
243+
keyIsNull: 'pass',
244+
resultIsNull: 'pass'
245+
});
246+
247+
// Verify that passing NULL to napi_get_property() results in the correct
248+
// error.
249+
assert.deepStrictEqual(test_object.TestGetProperty(), {
250+
envIsNull: 'pass',
251+
objectIsNull: 'pass',
252+
keyIsNull: 'pass',
253+
resultIsNull: 'pass'
254+
});

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

+188
Original file line numberDiff line numberDiff line change
@@ -339,6 +339,191 @@ static napi_value Unwrap(napi_env env, napi_callback_info info) {
339339
return result;
340340
}
341341

342+
static napi_value TestSetProperty(napi_env env,
343+
napi_callback_info info) {
344+
napi_status ret[4];
345+
napi_value object, key, value, prop_value;
346+
347+
NAPI_CALL(env, napi_create_object(env, &object));
348+
349+
NAPI_CALL(env, napi_create_string_utf8(env, "", NAPI_AUTO_LENGTH, &key));
350+
351+
NAPI_CALL(env, napi_create_object(env, &value));
352+
353+
ret[0] = napi_set_property(NULL, object, key, value);
354+
355+
ret[1] = napi_set_property(env, NULL, key, value);
356+
357+
ret[2] = napi_set_property(env, object, NULL, value);
358+
359+
ret[3] = napi_set_property(env, object, key, NULL);
360+
361+
NAPI_CALL(env, napi_create_string_utf8(env,
362+
(ret[0] == napi_invalid_arg ?
363+
"pass" : "fail"),
364+
NAPI_AUTO_LENGTH,
365+
&prop_value));
366+
NAPI_CALL(env, napi_set_named_property(env,
367+
object,
368+
"envIsNull",
369+
prop_value));
370+
371+
NAPI_CALL(env, napi_create_string_utf8(env,
372+
(ret[1] == napi_invalid_arg ?
373+
"pass" : "fail"),
374+
NAPI_AUTO_LENGTH,
375+
&prop_value));
376+
NAPI_CALL(env, napi_set_named_property(env,
377+
object,
378+
"objectIsNull",
379+
prop_value));
380+
381+
NAPI_CALL(env, napi_create_string_utf8(env,
382+
(ret[2] == napi_invalid_arg ?
383+
"pass" : "fail"),
384+
NAPI_AUTO_LENGTH,
385+
&prop_value));
386+
NAPI_CALL(env, napi_set_named_property(env,
387+
object,
388+
"keyIsNull",
389+
prop_value));
390+
391+
NAPI_CALL(env, napi_create_string_utf8(env,
392+
(ret[3] == napi_invalid_arg ?
393+
"pass" : "fail"),
394+
NAPI_AUTO_LENGTH,
395+
&prop_value));
396+
NAPI_CALL(env, napi_set_named_property(env,
397+
object,
398+
"valueIsNull",
399+
prop_value));
400+
401+
return object;
402+
}
403+
404+
static napi_value TestHasProperty(napi_env env,
405+
napi_callback_info info) {
406+
napi_status ret[4];
407+
napi_value object, key, prop_result;
408+
bool result;
409+
410+
NAPI_CALL(env, napi_create_object(env, &object));
411+
412+
NAPI_CALL(env, napi_create_string_utf8(env, "", NAPI_AUTO_LENGTH, &key));
413+
414+
ret[0] = napi_has_property(NULL, object, key, &result);
415+
416+
ret[1] = napi_has_property(env, NULL, key, &result);
417+
418+
ret[2] = napi_has_property(env, object, NULL, &result);
419+
420+
ret[3] = napi_has_property(env, object, key, NULL);
421+
422+
NAPI_CALL(env, napi_create_string_utf8(env,
423+
(ret[0] == napi_invalid_arg ?
424+
"pass" : "fail"),
425+
NAPI_AUTO_LENGTH,
426+
&prop_result));
427+
NAPI_CALL(env, napi_set_named_property(env,
428+
object,
429+
"envIsNull",
430+
prop_result));
431+
432+
NAPI_CALL(env, napi_create_string_utf8(env,
433+
(ret[1] == napi_invalid_arg ?
434+
"pass" : "fail"),
435+
NAPI_AUTO_LENGTH,
436+
&prop_result));
437+
NAPI_CALL(env, napi_set_named_property(env,
438+
object,
439+
"objectIsNull",
440+
prop_result));
441+
442+
NAPI_CALL(env, napi_create_string_utf8(env,
443+
(ret[2] == napi_invalid_arg ?
444+
"pass" : "fail"),
445+
NAPI_AUTO_LENGTH,
446+
&prop_result));
447+
NAPI_CALL(env, napi_set_named_property(env,
448+
object,
449+
"keyIsNull",
450+
prop_result));
451+
452+
NAPI_CALL(env, napi_create_string_utf8(env,
453+
(ret[3] == napi_invalid_arg ?
454+
"pass" : "fail"),
455+
NAPI_AUTO_LENGTH,
456+
&prop_result));
457+
NAPI_CALL(env, napi_set_named_property(env,
458+
object,
459+
"resultIsNull",
460+
prop_result));
461+
462+
return object;
463+
}
464+
465+
static napi_value TestGetProperty(napi_env env,
466+
napi_callback_info info) {
467+
napi_status ret[4];
468+
napi_value object, key, result, prop_result;
469+
470+
NAPI_CALL(env, napi_create_object(env, &object));
471+
472+
NAPI_CALL(env, napi_create_string_utf8(env, "", NAPI_AUTO_LENGTH, &key));
473+
474+
NAPI_CALL(env, napi_create_object(env, &result));
475+
476+
ret[0] = napi_get_property(NULL, object, key, &result);
477+
478+
ret[1] = napi_get_property(env, NULL, key, &result);
479+
480+
ret[2] = napi_get_property(env, object, NULL, &result);
481+
482+
ret[3] = napi_get_property(env, object, key, NULL);
483+
484+
NAPI_CALL(env, napi_create_string_utf8(env,
485+
(ret[0] == napi_invalid_arg ?
486+
"pass" : "fail"),
487+
NAPI_AUTO_LENGTH,
488+
&prop_result));
489+
NAPI_CALL(env, napi_set_named_property(env,
490+
object,
491+
"envIsNull",
492+
prop_result));
493+
494+
NAPI_CALL(env, napi_create_string_utf8(env,
495+
(ret[1] == napi_invalid_arg ?
496+
"pass" : "fail"),
497+
NAPI_AUTO_LENGTH,
498+
&prop_result));
499+
NAPI_CALL(env, napi_set_named_property(env,
500+
object,
501+
"objectIsNull",
502+
prop_result));
503+
504+
NAPI_CALL(env, napi_create_string_utf8(env,
505+
(ret[2] == napi_invalid_arg ?
506+
"pass" : "fail"),
507+
NAPI_AUTO_LENGTH,
508+
&prop_result));
509+
NAPI_CALL(env, napi_set_named_property(env,
510+
object,
511+
"keyIsNull",
512+
prop_result));
513+
514+
NAPI_CALL(env, napi_create_string_utf8(env,
515+
(ret[3] == napi_invalid_arg ?
516+
"pass" : "fail"),
517+
NAPI_AUTO_LENGTH,
518+
&prop_result));
519+
NAPI_CALL(env, napi_set_named_property(env,
520+
object,
521+
"resultIsNull",
522+
prop_result));
523+
524+
return object;
525+
}
526+
342527
EXTERN_C_START
343528
napi_value Init(napi_env env, napi_value exports) {
344529
napi_property_descriptor descriptors[] = {
@@ -355,6 +540,9 @@ napi_value Init(napi_env env, napi_value exports) {
355540
DECLARE_NAPI_PROPERTY("Inflate", Inflate),
356541
DECLARE_NAPI_PROPERTY("Wrap", Wrap),
357542
DECLARE_NAPI_PROPERTY("Unwrap", Unwrap),
543+
DECLARE_NAPI_PROPERTY("TestSetProperty", TestSetProperty),
544+
DECLARE_NAPI_PROPERTY("TestHasProperty", TestHasProperty),
545+
DECLARE_NAPI_PROPERTY("TestGetProperty", TestGetProperty),
358546
};
359547

360548
NAPI_CALL(env, napi_define_properties(

0 commit comments

Comments
 (0)