Skip to content

Commit 2fa39bb

Browse files
committed
check overflow for VM stack
1 parent b49c7d5 commit 2fa39bb

File tree

4 files changed

+30
-2
lines changed

4 files changed

+30
-2
lines changed

port/linux/.vscode/launch.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
"program": "${workspaceFolder}/build/test/pikascript_test",
1212
// "program": "${workspaceFolder}/build/boot/demo06-pikamain/pikascript_demo06-pikamain",
1313
"args": [
14-
// "--gtest_filter=pikaMain.list_iter"
14+
"--gtest_filter=pikaMain.big_bytes"
1515
],
1616
"stopAtEntry": false,
1717
"cwd": "${workspaceFolder}",

port/linux/test/pikaMain-test.cpp

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1890,4 +1890,17 @@ TEST(pikaMain, int_from_bytes) {
18901890
/* deinit */
18911891
obj_deinit(self);
18921892
EXPECT_EQ(pikaMemNow(), 0);
1893-
}
1893+
}
1894+
1895+
// TEST(pikaMain, big_bytes) {
1896+
// /* init */
1897+
// pikaMemInfo.heapUsedMax = 0;
1898+
// /* run */
1899+
// PikaObj* self = newRootObj("pikaMain", New_PikaMain);
1900+
// __platform_printf("BEGIN\r\n");
1901+
// obj_run(self, "b = bytes(8192)\n");
1902+
// /* assert */
1903+
// /* deinit */
1904+
// obj_deinit(self);
1905+
// EXPECT_EQ(pikaMemNow(), 0);
1906+
// }

src/dataStack.c

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ int32_t stack_init(Stack* stack) {
4040
stack->stack_size_array =
4141
arg_setContent(NULL, NULL, PIKA_STACK_BUFF_SIZE / 4);
4242
stack_reset(stack);
43+
stack->stack_totle_size = PIKA_STACK_BUFF_SIZE;
4344
return 0;
4445
};
4546

@@ -60,6 +61,19 @@ int32_t stack_deinit(Stack* stack) {
6061
}
6162

6263
void stack_pushPyload(Stack* stack, Arg* content, size_t size) {
64+
size_t stack_size_after_push =
65+
size + (stack->sp - arg_getContent(stack->stack_pyload));
66+
if (stack_size_after_push > stack->stack_totle_size) {
67+
__platform_printf(
68+
"OverflowError: pika VM stack overflow, please use bigger "
69+
"PIKA_STACK_BUFF_SIZE\r\n");
70+
__platform_printf("Info: stack size request: %d\r\n",
71+
stack_size_after_push);
72+
__platform_printf("Info: stack size now: %d\r\n",
73+
stack->stack_totle_size);
74+
while (1) {
75+
}
76+
}
6377
__platform_memcpy(stack->sp, content, size);
6478
stack->sp += size;
6579
}

src/dataStack.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ typedef struct Stack_t {
3535
uint8_t* sp;
3636
int16_t* sp_size;
3737
int16_t top;
38+
size_t stack_totle_size;
3839
} Stack;
3940

4041
int32_t stack_deinit(Stack* stack);

0 commit comments

Comments
 (0)