Zero-length variable-length-arrays are not allowed in standard C99, and perhaps more importantly, they cause ASAN to complain. (See, e.g., https://gcc.gnu.org/ml/gcc-patches/2013-09/msg00917.html.)
With this patch, the libiberty tests, including demangler-fuzzer, are ASAN-clean. - Brooks ---- ==== libiberty/ChangeLog ==== --- a/libiberty/ChangeLog +++ b/libiberty/ChangeLog @@ -1,3 +1,8 @@ +2016-06-12 Brooks Moses <bmo...@google.com> + + * cp-demangle.c (cplus_demangle_print_callback): Avoid zero-length + VLAs. + 2016-05-31 Alan Modra <amo...@gmail.com> * xmemdup.c (xmemdup): Use xmalloc rather than xcalloc. ==== libiberty/cp-demangle.c ==== --- a/libiberty/cp-demangle.c +++ b/libiberty/cp-demangle.c @@ -4120,8 +4120,10 @@ { #ifdef CP_DYNAMIC_ARRAYS - __extension__ struct d_saved_scope scopes[dpi.num_saved_scopes]; - __extension__ struct d_print_template temps[dpi.num_copy_templates]; + __extension__ struct d_saved_scope scopes[(dpi.num_saved_scopes > 0) + ? dpi.num_saved_scopes : 1]; + __extension__ struct d_print_template temps[(dpi.num_copy_templates > 0) + ? dpi.num_copy_templates : 1]; dpi.saved_scopes = scopes; dpi.copy_templates = temps;