Skip to content

Commit 0787b98

Browse files
committed
Created a test for segmentation fault in metacall await.
1 parent 1704e18 commit 0787b98

File tree

2 files changed

+50
-0
lines changed

2 files changed

+50
-0
lines changed

source/scripts/node/nod/source/nod.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,26 @@ function this_function_should_not_be_exported() {
7070
return 5;
7171
}
7272

73+
async function verify_jwt(url, token) {
74+
console.log(url, token);
75+
await sleep(1);
76+
return true;
77+
}
78+
79+
const verify_func = (url, f) => async (token, serial, range) => {
80+
if (await verify_jwt(url, token)) {
81+
return await f(serial, range);
82+
} else {
83+
return { error: 'Failed to verify token' };
84+
}
85+
}
86+
87+
async function get_random_data(serial, range) {
88+
console.log(serial, range);
89+
await sleep(1);
90+
return 12.0;
91+
}
92+
7393
module.exports = {
7494
hello_boy,
7595
hello_boy_await,
@@ -86,4 +106,5 @@ module.exports = {
86106
default_values,
87107
all_mixed,
88108
/* this_function_should_not_be_exported, */
109+
get_random_data: verify_func('https://some.random.serivce.to.verify.jwt.com', get_random_data),
89110
};

source/tests/metacall_map_await_test/source/metacall_map_await_test.cpp

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,35 @@ TEST_F(metacall_map_await_test, DefaultConstructor)
174174

175175
metacall_value_destroy(ret);
176176

177+
/* Call by map using serial (segmentation fault on vaule destroy) */
178+
static const char args_random_map[] = "{\"token\":\"abc\",\"serial\":[\"XYZ\",\"ABC\"],\"range\":\"eee\"}";
179+
180+
func = metacall_function("get_random_data");
181+
182+
ASSERT_NE((void *)NULL, (void *)func);
183+
184+
ret = metacallfms_await(
185+
func, args_random_map, sizeof(args_random_map), allocator, [](void *result, void *) -> void * {
186+
EXPECT_NE((void *)NULL, (void *)result);
187+
188+
EXPECT_EQ((enum metacall_value_id)metacall_value_id(result), (enum metacall_value_id)METACALL_DOUBLE);
189+
190+
EXPECT_EQ((double)metacall_value_to_double(result), (double)12.0);
191+
192+
printf("get_random_data future (from map serial) callback: %f\n", metacall_value_to_double(result));
193+
194+
fflush(stdout);
195+
196+
return NULL;
197+
},
198+
NULL, NULL);
199+
200+
EXPECT_NE((void *)NULL, (void *)ret);
201+
202+
EXPECT_EQ((enum metacall_value_id)metacall_value_id(ret), (enum metacall_value_id)METACALL_FUTURE);
203+
204+
metacall_value_destroy(ret);
205+
177206
/* Call by map using arrays (nested await) */
178207
func = metacall_function("hello_boy_nested_await");
179208

0 commit comments

Comments
 (0)