projects
/
kopensolaris-gnu
/
glibc.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
(BODY to IBM937): Correct several mistakes in buffer and table handling.
[kopensolaris-gnu/glibc.git]
/
iconvdata
/
ibm937.c
diff --git
a/iconvdata/ibm937.c
b/iconvdata/ibm937.c
index
6da55ae
..
4fee56a
100644
(file)
--- a/
iconvdata/ibm937.c
+++ b/
iconvdata/ibm937.c
@@
-188,13
+188,15
@@
enum
\
/* Use the UCS4 table for single byte. */ \
cp = __ucs4_to_ibm937sb[ch]; \
\
/* Use the UCS4 table for single byte. */ \
cp = __ucs4_to_ibm937sb[ch]; \
- if (__builtin_expect (ch >=
sizeof (__ucs4_to_ibm937sb)
\
-
/ sizeof (__ucs4_to_ibm937sb[0]), 0)
\
+ if (__builtin_expect (ch >=
(sizeof (__ucs4_to_ibm937sb)
\
+
/ sizeof (__ucs4_to_ibm937sb[0])), 0)
\
|| (__builtin_expect (cp[0], '\1') == '\0' && ch != 0)) \
{ \
/* Use the UCS4 table for double byte. */ \
cp = __ucs4_to_ibm937db[ch]; \
|| (__builtin_expect (cp[0], '\1') == '\0' && ch != 0)) \
{ \
/* Use the UCS4 table for double byte. */ \
cp = __ucs4_to_ibm937db[ch]; \
- if (__builtin_expect (cp[0], '\1') == '\0' && ch != 0) \
+ if (__builtin_expect (ch >= (sizeof (__ucs4_to_ibm937db) \
+ / sizeof (__ucs4_to_ibm937db[0])), 0) \
+ || __builtin_expect (cp[0], '\1') == '\0') \
{ \
/* This is an illegal character. */ \
if (! ignore_errors_p ()) \
{ \
/* This is an illegal character. */ \
if (! ignore_errors_p ()) \
@@
-209,13
+211,13
@@
enum
if (curcs == sb) \
{ \
*outptr++ = SO; \
if (curcs == sb) \
{ \
*outptr++ = SO; \
- if (__builtin_expect (outptr == outend, 0)) \
- { \
- result = __GCONV_FULL_OUTPUT; \
- break; \
- } \
curcs = db; \
} \
curcs = db; \
} \
+ if (__builtin_expect (outptr + 1 >= outend, 0)) \
+ { \
+ result = __GCONV_FULL_OUTPUT; \
+ break; \
+ } \
*outptr++ = cp[0]; \
*outptr++ = cp[1]; \
} \
*outptr++ = cp[0]; \
*outptr++ = cp[1]; \
} \
@@
-225,13
+227,13
@@
enum
if (curcs == db) \
{ \
*outptr++ = SI; \
if (curcs == db) \
{ \
*outptr++ = SI; \
+ curcs = sb; \
if (__builtin_expect (outptr == outend, 0)) \
{ \
result = __GCONV_FULL_OUTPUT; \
break; \
} \
} \
if (__builtin_expect (outptr == outend, 0)) \
{ \
result = __GCONV_FULL_OUTPUT; \
break; \
} \
} \
- curcs = sb; \
*outptr++ = cp[0]; \
} \
\
*outptr++ = cp[0]; \
} \
\