asnprintf followup
Jeff Johnston
jjohnstn@redhat.com
Thu May 10 02:03:00 GMT 2007
Ok.
-- Jeff J.
Eric Blake wrote:
> May I commit this? It turns out that GNU code found it useful to call
> asnprintf with an existing buf not on the heap, but a calculated remaining size
> of 0; asnprintf dumped core when it tried to realloc the user's buf to make
> room for the trailing NUL.
>
> 2007-05-09 Eric Blake <ebb9@byu.net>
>
> Allow zero size with non-null buf in *asnprintf.
> * libc/stdio/asnprintf.c (_asnprintf_r, asnprintf): Avoid free'ing
> user's buf.
> * libc/stdio/asniprintf.c (_asniprintf_r, asniprintf): Likewise.
> * libc/stdio/vasniprintf.c (_vasniprintf_r): Likewise.
> * libc/stdio/vasnprintf.c (_vasnprintf_r): Likewise.
>
> Index: libc/stdio/asniprintf.c
> ===================================================================
> RCS file: /cvs/src/src/newlib/libc/stdio/asniprintf.c,v
> retrieving revision 1.1
> diff -u -r1.1 asniprintf.c
> --- libc/stdio/asniprintf.c 4 May 2007 02:55:16 -0000 1.1
> +++ libc/stdio/asniprintf.c 9 May 2007 16:36:23 -0000
> @@ -34,6 +34,7 @@
> /* mark a zero-length reallocatable buffer */
> f._flags = __SWR | __SSTR | __SMBF;
> len = 0;
> + buf = NULL;
> }
> f._bf._base = f._p = (unsigned char *) buf;
> /* For now, inherit the 32-bit signed limit of FILE._bf._size.
> @@ -80,6 +81,7 @@
> /* mark a zero-length reallocatable buffer */
> f._flags = __SWR | __SSTR | __SMBF;
> len = 0;
> + buf = NULL;
> }
> f._bf._base = f._p = (unsigned char *) buf;
> /* For now, inherit the 32-bit signed limit of FILE._bf._size.
> Index: libc/stdio/asnprintf.c
> ===================================================================
> RCS file: /cvs/src/src/newlib/libc/stdio/asnprintf.c,v
> retrieving revision 1.1
> diff -u -r1.1 asnprintf.c
> --- libc/stdio/asnprintf.c 4 May 2007 02:55:16 -0000 1.1
> +++ libc/stdio/asnprintf.c 9 May 2007 16:36:23 -0000
> @@ -34,6 +34,7 @@
> /* mark a zero-length reallocatable buffer */
> f._flags = __SWR | __SSTR | __SMBF;
> len = 0;
> + buf = NULL;
> }
> f._bf._base = f._p = (unsigned char *) buf;
> /* For now, inherit the 32-bit signed limit of FILE._bf._size.
> @@ -80,6 +81,7 @@
> /* mark a zero-length reallocatable buffer */
> f._flags = __SWR | __SSTR | __SMBF;
> len = 0;
> + buf = NULL;
> }
> f._bf._base = f._p = (unsigned char *) buf;
> /* For now, inherit the 32-bit signed limit of FILE._bf._size.
> Index: libc/stdio/vasniprintf.c
> ===================================================================
> RCS file: /cvs/src/src/newlib/libc/stdio/vasniprintf.c,v
> retrieving revision 1.1
> diff -u -r1.1 vasniprintf.c
> --- libc/stdio/vasniprintf.c 4 May 2007 02:55:16 -0000 1.1
> +++ libc/stdio/vasniprintf.c 9 May 2007 16:36:23 -0000
> @@ -34,6 +34,7 @@
> /* mark a zero-length reallocatable buffer */
> f._flags = __SWR | __SSTR | __SMBF;
> len = 0;
> + buf = NULL;
> }
> f._bf._base = f._p = (unsigned char *) buf;
> /* For now, inherit the 32-bit signed limit of FILE._bf._size.
> Index: libc/stdio/vasnprintf.c
> ===================================================================
> RCS file: /cvs/src/src/newlib/libc/stdio/vasnprintf.c,v
> retrieving revision 1.1
> diff -u -r1.1 vasnprintf.c
> --- libc/stdio/vasnprintf.c 4 May 2007 02:55:16 -0000 1.1
> +++ libc/stdio/vasnprintf.c 9 May 2007 16:36:23 -0000
> @@ -34,6 +34,7 @@
> /* mark a zero-length reallocatable buffer */
> f._flags = __SWR | __SSTR | __SMBF;
> len = 0;
> + buf = NULL;
> }
> f._bf._base = f._p = (unsigned char *) buf;
> /* For now, inherit the 32-bit signed limit of FILE._bf._size.
>
>
More information about the Newlib
mailing list