@@ -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