avr-libc-dev
[Top][All Lists]
Advanced

[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/





reply via email to

[Prev in Thread] Current Thread [Next in Thread]