2009-03-02 Jeff Johnston <jjohnstn@redhat.com>

* libc/stdlib/wctomb_r.c (_wctomb_r): When checking single-byte
        charset, cast wchar to size_t in case wchar_t is signed.
        * libc/stdlib/wctomb.c (wctomb): Add similar single-byte check.
This commit is contained in:
Jeff Johnston 2009-03-02 23:30:59 +00:00
parent 49b09e5afa
commit 95d85fcb1a
3 changed files with 14 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2009-03-02 Jeff Johnston <jjohnstn@redhat.com>
* libc/stdlib/wctomb_r.c (_wctomb_r): When checking single-byte
charset, cast wchar to size_t in case wchar_t is signed.
* libc/stdlib/wctomb.c (wctomb): Add similar single-byte check.
2009-03-02 Corinna Vinschen <corinna@vinschen.de>
* libc/stdlib/wctomb_r.c (_wctomb_r): Return EILSEQ in case of an

View File

@ -48,6 +48,7 @@ effects vary with the locale.
#include <newlib.h>
#include <stdlib.h>
#include <errno.h>
int
_DEFUN (wctomb, (s, wchar),
@ -62,6 +63,12 @@ _DEFUN (wctomb, (s, wchar),
if (s == NULL)
return 0;
/* Verify that wchar is a valid single-byte character. */
if ((size_t)wchar >= 0x100) {
errno = EILSEQ;
return -1;
}
*s = (char) wchar;
return 1;
#endif /* not _MB_CAPABLE */

View File

@ -207,7 +207,7 @@ _DEFUN (_wctomb_r, (r, s, wchar, state),
return 0;
/* otherwise we are dealing with a single byte character */
if (wchar >= 0x100)
if ((size_t)wchar >= 0x100)
{
r->_errno = EILSEQ;
return -1;