Skip to content

Commit a43175e

Browse files
two-heartmmcgee-jump
authored andcommitted
gui: terminate strings copied from block engine tile
otherwise we can have inter-tile memory corruptions
1 parent 498c7ad commit a43175e

File tree

1 file changed

+12
-3
lines changed

1 file changed

+12
-3
lines changed

src/disco/gui/fd_gui.c

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2155,9 +2155,18 @@ fd_gui_handle_block_engine_update( fd_gui_t * gui,
21552155
fd_plugin_msg_block_engine_update_t const * update = (fd_plugin_msg_block_engine_update_t const *)msg;
21562156

21572157
gui->block_engine.has_block_engine = 1;
2158-
memcpy( gui->block_engine.name, update->name, sizeof(gui->block_engine.name )-1 );
2159-
memcpy( gui->block_engine.url, update->url, sizeof(gui->block_engine.url )-1 );
2160-
memcpy( gui->block_engine.ip_cstr, update->ip_cstr, sizeof(gui->block_engine.ip_cstr)-1 );
2158+
2159+
/* copy strings and ensure null termination within bounds */
2160+
FD_TEST( fd_cstr_nlen( update->name, sizeof(gui->block_engine.name ) ) < sizeof(gui->block_engine.name ) );
2161+
FD_TEST( fd_cstr_nlen( update->url, sizeof(gui->block_engine.url ) ) < sizeof(gui->block_engine.url ) );
2162+
FD_TEST( fd_cstr_nlen( update->ip_cstr, sizeof(gui->block_engine.ip_cstr) ) < sizeof(gui->block_engine.ip_cstr) );
2163+
ulong name_len = fd_cstr_nlen( update->name, sizeof(gui->block_engine.name ) );
2164+
ulong url_len = fd_cstr_nlen( update->url, sizeof(gui->block_engine.url ) );
2165+
ulong ip_cstr_len = fd_cstr_nlen( update->ip_cstr, sizeof(gui->block_engine.ip_cstr) );
2166+
fd_memcpy( gui->block_engine.name, update->name, name_len+1UL );
2167+
fd_memcpy( gui->block_engine.url, update->url, url_len+1UL );
2168+
fd_memcpy( gui->block_engine.ip_cstr, update->ip_cstr, ip_cstr_len+1UL );
2169+
21612170
gui->block_engine.status = update->status;
21622171

21632172
fd_gui_printf_block_engine( gui );

0 commit comments

Comments
 (0)