namecache-flat crashes if started on an empty or non-existent file. gnunet-service-[2568]: segfault at 0 ip 00007fe32dc8bb3c sp 00007ffde11826f0 error 4 in libgnunet_plugin_namecache_flat.so[7fe32dc8a000+202000] gnunet-service-[2576]: segfault at 0 ip 00007f2a6be75b3c sp 00007ffdf9b6d880 error 4 in libgnunet_plugin_namecache_flat.so[7f2a6be74000+202000] gnunet-service-[2581]: segfault at 0 ip 00007ff1dcfb1b3c sp 00007fff834070f0 error 4 in libgnunet_plugin_namecache_flat.so[7ff1dcfb0000+202000]
This fix at least prevents parsing a 0-byte file, however, looking at the code it is clear that more needs to be done to prevent crashes in case of corrupted or incompletely written cache data. Are you sure it's at all a good idea to implement parsers using standard C string functions...? (what about bison and flex?) Signed-off-by: Daniel Golle <[email protected]> --- src/namecache/plugin_namecache_flat.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/namecache/plugin_namecache_flat.c b/src/namecache/plugin_namecache_flat.c index 409b058..85bb692 100644 --- a/src/namecache/plugin_namecache_flat.c +++ b/src/namecache/plugin_namecache_flat.c @@ -132,6 +132,9 @@ database_setup (struct Plugin *plugin) return GNUNET_SYSERR; } + if (0 == size) + return GNUNET_OK; + buffer = GNUNET_malloc (size); if (GNUNET_SYSERR == GNUNET_DISK_file_read (fh, -- 2.6.2 _______________________________________________ GNUnet-developers mailing list [email protected] https://lists.gnu.org/mailman/listinfo/gnunet-developers
