Hi Arnold,

> This code in regex_internal.c:
> 
> -------------------------------------
> static reg_errcode_t
> __attribute_warn_unused_result__
> re_node_set_alloc (re_node_set *set, Idx size)
> {
>   set->alloc = size;
>   set->nelem = 0;
>   set->elems = re_malloc (Idx, size);
>   if (__glibc_unlikely (set->elems == NULL))
>     return REG_ESPACE;
>   return REG_NOERROR;
> }
> -------------------------------------
> 
> If size is zero, malloc() is called with zero.  IIRC, it's formally
> undefined what happens if malloc(0) is called, and NULL is a possibly
> valid result.  If used with a malloc() that does return NULL, compilation
> of a regex fails.  regex needs to take this into account.

Yes, and it already does: The module 'regex' has a dependency towards
the module 'malloc-gnu'. The module malloc-gnu guarantees that malloc(0)
is non-NULL except in out-of-memory situations.

> This happened in gawk using the Persistent Memory Allocator (PMA).
> 
> I have worked around it with additional gawk-specific code that sets
> size to 1 if it's 0.

Yeah, IIRC gawk does not use gnulib-tool and therefore has to do things
differently than gnulib.

Bruno




Reply via email to