On Fri, May 06, 2016 at 10:46:12PM +0800, Marcel Böhme wrote:
> d_print_init (&dpi, callback, opaque, dc);
>
> - {
> -#ifdef CP_DYNAMIC_ARRAYS
> - __extension__ struct d_saved_scope scopes[dpi.num_saved_scopes];
> - __extension__ struct d_print_template temps[dpi.num_copy_templates];
> + dpi.copy_templates
> + = (struct d_print_template *) malloc (((size_t) dpi.num_copy_templates)
> + * sizeof (*dpi.copy_templates));
> + dpi.saved_scopes
> + = (struct d_saved_scope *) malloc (((size_t) dpi.num_saved_scopes)
> + * sizeof (*dpi.saved_scopes));
> +
> + if (! dpi.copy_templates || ! dpi.saved_scopes)
> + {
> + d_print_error (&dpi);
> + return 0;
> + }
If one malloc succeeds and the other fails, you leak memory.
Jakub