This is the mail archive of the newlib@sourceware.org mailing list for the newlib project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

RE: [BUG] memccpy treats size_t as int


The exact same problem is also in memcpy.c, mempcpy.c, and memmove.c
(same
problem, a name different).  I did not carefully look at all of the
files in string, but did scan them and found no other instances of
size_t to int.
 
I don't see why len is ever created, actually.  In the short form
of the functions, the len0 parameter is used in the code.  In the
longer forms len is created from len0, but len0 is never used again.
(In memmove.c, the problem is the same with one name change:  len0 is
length.)
 
Assuming that there is not a special reason for this, the attached
patch corrects the 4 files.  (I left the slightly different name in
memmove.c to minimize the changes, although it was tempting to change
the name to make the similarities between the files even more obvious.)

Craig 

ChangeLog entry:
2010-09-21  Craig Howland <howland@LGSInnovations.com>

	* libc/string/memcpy.c: Do not assign size_t parameter to int
(use
	parameter directly, instead).
	* libc/string/memccpy.c:  Likewise.
	* libc/string/mempcpy.c:  Likewise.
	* libc/string/memmove.c:  Likewise.

-----Original Message-----
From: newlib-owner@sourceware.org [mailto:newlib-owner@sourceware.org]
On Behalf Of David A. Ramos
Sent: Tuesday, September 21, 2010 4:52 PM
To: newlib@sourceware.org
Subject: [BUG] memccpy treats size_t as int

Hi newlib maintainers,

It's come to my attention that newlib's memccpy (libc/string/memccpy.c)
casts the len0 argument from size_t (as required by the SUS) to int. On
64-bit Linux environments, this erroneously drops the high 32 bits. I'm
not familiar enough with newlib to know whether this issue is isolated
to memccpy or whether it's standard practice in the project. Just
thought I'd report it!

More specifically:
  int   len =  len0;
should be:
  size_t len =  len0;

-David


Attachment: memcpy.patch.txt
Description: memcpy.patch.txt


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]