[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[avr-libc-dev] [bugs #11494] strtol() return wrong value in the underflo
From: |
anonymous |
Subject: |
[avr-libc-dev] [bugs #11494] strtol() return wrong value in the underflow case |
Date: |
Wed, 12 Jan 2005 03:03:33 +0000 |
User-agent: |
|
This is an automated notification sent by Savannah.
It relates to:
bugs #11494, project AVR C Runtime Library
==============================================================================
LATEST MODIFICATIONS of bugs #11494:
==============================================================================
Posted by: an anonymous user
Posted on: 2005-01-11 22:03 ()
_______________________________________________________
Follow-up Comment:
Sorry, a mistake in last comment. Read as:
But if anybody is needing a function, that must return value,
"exactly 32 bits length"...
==============================================================================
OVERVIEW of bugs #11494:
==============================================================================
URL:
<http://savannah.nongnu.org/bugs/?func=detailitem&item_id=11494>
Summary: strtol() return wrong value in the underflow case
Project: AVR C Runtime Library
Submitted by: None
Submitted on: Wed 01/05/2005 at 02:31
Category: Library
Severity: 5 - Average
Priority: 9 - Immediate
Item Group: None
Status: None
Privacy: Public
Percent Complete: 0%
Assigned to: None
Originator Email: address@hidden
Open/Closed: Open
_______________________________________________________
This is very old bug.
strtol() must return LONG_MIN for inputs too small.
Original Berkeley version do it. But avr-libc's version, for example,
"-5000000000" --> -705032704 (simulavr, avr-gcc 3.3.4). You can reproduce
such result on any 32-bit computer.
The reason is the attemption to negative LONG_MIN value (0x80000000).
Attached patch correct this mistake. (And it excude compiler warnings in
comparison).
_______________________________________________________
Follow-up Comments:
-------------------------------------------------------
Date: Tue 01/11/2005 at 22:03 By: Anonymous
Sorry, a mistake in last comment. Read as:
But if anybody is needing a function, that must return value,
"exactly 32 bits length"...
-------------------------------------------------------
Date: Tue 01/11/2005 at 17:16 By: Anonymous
My opinion about "-mint8 compatibility":
Without -mint8 option, original (and patched) `strtol'
return `long' value, that is clipped in bounds LONG_MIN
and LONG_MAX. Such, strtol("5000000000",0,0) must return
2147483647.
With -mint8 option, `strtol' must also return `long'
value, clipped by LONG_MIN and LONG_MAX also. But, due
to reduced size of `long' (and reduced LONG_MAX, LONG_MIN),
the result of strtol("5000000000",0,0) must be 32767.
Such behavior agree, for example, glibc. On computer
with 64-bit long, result of strtol("5000000000",0,0) will
be 5000000000.
In such sence, strtol (original and patched) work true with
any size of `long'.
But if anybody is needing a function, that must return value,
"at least as 32 bits", it is necessity to write another function,
with another name, like:
int32_t strto32 (const char *, char **, int) .
Thanks.
P.S. In patch #3618 (strtol optimization) second part of source
contain test for strtol with strings, like:
{ "2147483647", 0, 0x7fffffff, 0, 10 }
This test do not work with `-mint8' option and must be rewrited
with conditional compilation usage.
-------------------------------------------------------
Date: Mon 01/10/2005 at 17:51 By: Eric Weddington <arcanum>
In the patch for this bug, can you rewrite your typecasts using the types
found in stdint.h? (for example uint32_t, uint16_t)
That way it can start to be -mint8 compatible.
Thanks!
Eric
-------------------------------------------------------
Date: Thu 01/06/2005 at 02:29 By: Anonymous
Look, please, the optimized strtol, patch #3618. Twice speed up, and 32 bytes
stack usage decrease. Code size the same.
_______________________________________________________
File Attachments:
-------------------------------------------------------
Date: Wed 01/05/2005 at 02:31 Name: strtol-20050105.diff Size: 856B By:
None
Patch for strtol.c (from avr-libc-1.2.0)
<http://savannah.nongnu.org/bugs/download.php?item_id=11494&item_file_id=2025>
==============================================================================
This item URL is:
<http://savannah.nongnu.org/bugs/?func=detailitem&item_id=11494>
_______________________________________________
Message sent via/by Savannah
http://savannah.nongnu.org/