misc/134320: strtol: overflow error when it shouldn't be

Bruce Evans brde at optusnet.com.au
Thu May 7 04:40:03 UTC 2009


The following reply was made to PR misc/134320; it has been noted by GNATS.

From: Bruce Evans <brde at optusnet.com.au>
To: Yuri <yuri at tsoft.com>
Cc: freebsd-gnats-submit at freebsd.org, freebsd-bugs at freebsd.org
Subject: Re: misc/134320: strtol: overflow error when it shouldn't be
Date: Thu, 7 May 2009 11:46:02 +1000 (EST)

 On Wed, 6 May 2009, Yuri wrote:
 
 > main() {
 >  const char *nptr = "d223d221";
 >  long l = ::strtol(nptr, NULL, 16);
 >  printf("l=%x errno=%i err=%s\n", l, errno, strerror(errno));
 > }
 > ------------------------
 >
 > It prints: l=7fffffff errno=34 err=Result too large
 >
 > Why result is too large? 0xd223d221 is a valid representation of a signed 32-bit integer between LONG_MIN=-2,147,483,648(0x80000000) and LONG_MAX=+2,147,483,647(0x7fffffff).
 
 Hex values are non-negative, so they can never give a valid representation
 of a negative integer.  Here 0xd223d221 is an integer exceeding LONG_MAX.
 
 Bruce


More information about the freebsd-bugs mailing list