tech-userlevel archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Ping: [PATCH] inttypes.h: strtoi(), strtou(): Prefer reporting ERANGE over ENOTSUP



Hi Guillem!

On Wed, Jan 24, 2024 at 07:16:23PM +0100, Alejandro Colomar wrote:
> If both ERANGE and ENOTSUP conditions happen, ENOTSUP can be tested
> secondarily as `*end != '\0'`.  However, there's no secondary mechanism
> to test ERANGE.  Thus, it is important to report ERANGE, and let the
> user check *end if necessary.
> 
> Most NetBSD and Debian existing code assumed that strtoi/u() reported
> ERANGE with preference, and so there were several bugs caused by the old
> behavior.  In fact, there was only one place where it was the other way
> around: the implementation of strtonum().  This change of behavior fixes
> several bugs in various code bases.
> 
> The implementation of strtonum() has been adjusted to keep its behavior
> unmodified.
> 
> NetBSD has changed the behavior of their implementation after my bug
> report, so this patch makes our API compatible with theirs.

NetBSD's git mirror now contains the patches:

	$ git show f1987b28c87e --stat \
	| grep '|' \
	| awk '{print $1}' \
	| xargs git log --oneline -- \
	| awk '{print $1}' \
	| head -n2 \
	| xargs git show --stat;
	commit 0c834cb5237e0081f73e7baa8eb3367b57fdb80c
	Author: christos <christos%NetBSD.org@localhost>
	Date:   Sat Jan 20 16:45:07 2024 +0000

	    generate strtou.3 from strtoi.3, grammar police

	 lib/libc/stdlib/Makefile.inc |   8 +-
	 lib/libc/stdlib/strtoi.3     |   4 +-
	 lib/libc/stdlib/strtou.3     | 240 -------------------------------------------
	 3 files changed, 9 insertions(+), 243 deletions(-)

	commit f1987b28c87ee37690268b93ba1b11ed8d571305
	Author: christos <christos%NetBSD.org@localhost>
	Date:   Sat Jan 20 16:13:39 2024 +0000

	    PR/57828: Alejandro Colomar: Prioritize test for ERANGE before testing for
	    fully consuming the string. Adjust strtonum(3) to behave as before. Document
	    the order of the tests and sync the man pages (I should really autogenerate
	    one of the two man pages...)

	 common/lib/libc/stdlib/_strtoi.h | 18 +++++++++---------
	 lib/libc/stdlib/strtoi.3         | 20 +++++++++++++-------
	 lib/libc/stdlib/strtonum.c       | 33 ++++++++++++++++++++-------------
	 lib/libc/stdlib/strtou.3         | 18 ++++++++++++------
	 4 files changed, 54 insertions(+), 35 deletions(-)

Have a lovely day,
Alex

> 
> Link: <https://lists.sr.ht/~hallyn/shadow/%3CZZoQDms6Sv6e5SPE%40debian%3E>
> Link: <https://gnats.netbsd.org/cgi-bin/query-pr-single.pl?number=57828>
> Cc: Guillem Jover <guillem%hadrons.org@localhost>
> Cc: Thorsten Glaser <tg%mirbsd.de@localhost>
> Cc: christos <christos%netbsd.org@localhost>
> Cc: Taylor R Campbell <riastradh%netbsd.org@localhost>
> Cc: Mouse <mouse%Rodents-Montreal.ORG@localhost>
> Cc: roy <roy%netbsd.org@localhost>
> Cc: <tech-userlevel%netbsd.org@localhost>
> Signed-off-by: Alejandro Colomar <alx%kernel.org@localhost>
> ---
>  man/strtoi.3bsd |  4 +++-
>  man/strtou.3bsd |  4 +++-
>  src/strtoi.c    | 14 ++++++--------
>  src/strtonum.c  |  6 ++++--
>  src/strtou.c    | 14 ++++++--------
>  5 files changed, 22 insertions(+), 20 deletions(-)


-- 
<https://www.alejandro-colomar.es/>
Looking for a remote C programming job at the moment.

Attachment: signature.asc
Description: PGP signature



Home | Main Index | Thread Index | Old Index