Skip to content

Commit 10e87d2

Browse files
authored
EH: Don't call word_copy with zero size (#3105)
1 parent 43c4a5c commit 10e87d2

File tree

1 file changed

+37
-26
lines changed

1 file changed

+37
-26
lines changed

core/iwasm/interpreter/wasm_interp_classic.c

+37-26
Original file line numberDiff line numberDiff line change
@@ -1387,18 +1387,23 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module,
13871387
/* push exception_tag_index and
13881388
* exception values for rethrow */
13891389
PUSH_I32(exception_tag_index);
1390-
word_copy(frame_sp,
1391-
frame_sp_old
1392-
- cell_num_to_copy,
1393-
cell_num_to_copy);
1394-
frame_sp += cell_num_to_copy;
1395-
/* push exception values for catch
1396-
*/
1397-
word_copy(frame_sp,
1398-
frame_sp_old
1399-
- cell_num_to_copy,
1400-
cell_num_to_copy);
1401-
frame_sp += cell_num_to_copy;
1390+
if (cell_num_to_copy > 0) {
1391+
word_copy(
1392+
frame_sp,
1393+
frame_sp_old
1394+
- cell_num_to_copy,
1395+
cell_num_to_copy);
1396+
frame_sp += cell_num_to_copy;
1397+
/* push exception values for
1398+
* catch
1399+
*/
1400+
word_copy(
1401+
frame_sp,
1402+
frame_sp_old
1403+
- cell_num_to_copy,
1404+
cell_num_to_copy);
1405+
frame_sp += cell_num_to_copy;
1406+
}
14021407

14031408
/* advance to handler */
14041409
HANDLE_OP_END();
@@ -1427,11 +1432,13 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module,
14271432
frame_csp -= lookup_depth;
14281433

14291434
/* push exception values for catch */
1430-
word_copy(frame_sp,
1431-
frame_sp_old
1432-
- cell_num_to_copy,
1433-
cell_num_to_copy);
1434-
frame_sp += cell_num_to_copy;
1435+
if (cell_num_to_copy > 0) {
1436+
word_copy(frame_sp,
1437+
frame_sp_old
1438+
- cell_num_to_copy,
1439+
cell_num_to_copy);
1440+
frame_sp += cell_num_to_copy;
1441+
}
14351442

14361443
/* tag_index is already stored in
14371444
* exception_tag_index */
@@ -1452,11 +1459,13 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module,
14521459
/* push exception_tag_index and
14531460
* exception values for rethrow */
14541461
PUSH_I32(exception_tag_index);
1455-
word_copy(frame_sp,
1456-
frame_sp_old
1457-
- cell_num_to_copy,
1458-
cell_num_to_copy);
1459-
frame_sp += cell_num_to_copy;
1462+
if (cell_num_to_copy > 0) {
1463+
word_copy(frame_sp,
1464+
frame_sp_old
1465+
- cell_num_to_copy,
1466+
cell_num_to_copy);
1467+
frame_sp += cell_num_to_copy;
1468+
}
14601469
/* catch_all has no exception values */
14611470

14621471
/* advance to handler */
@@ -1483,10 +1492,12 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module,
14831492
* The values are copied to the CALLER FRAME
14841493
* (prev_frame->sp) same behvior ad WASM_OP_RETURN
14851494
*/
1486-
word_copy(prev_frame->sp,
1487-
frame_sp_old - cell_num_to_copy,
1488-
cell_num_to_copy);
1489-
prev_frame->sp += cell_num_to_copy;
1495+
if (cell_num_to_copy > 0) {
1496+
word_copy(prev_frame->sp,
1497+
frame_sp_old - cell_num_to_copy,
1498+
cell_num_to_copy);
1499+
prev_frame->sp += cell_num_to_copy;
1500+
}
14901501
*((int32 *)(prev_frame->sp)) = exception_tag_index;
14911502
prev_frame->sp++;
14921503

0 commit comments

Comments
 (0)