mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-23 17:53:37 +08:00
(BODY for TO_LOOP): Avoid running off the end of the ISO-8859-7 from idx table.
This commit is contained in:
parent
c654817804
commit
479f2cbc50
@ -701,25 +701,29 @@ static const cvlist_t conversion_lists[4] =
|
|||||||
} \
|
} \
|
||||||
else if (set2 == ISO88597_set) \
|
else if (set2 == ISO88597_set) \
|
||||||
{ \
|
{ \
|
||||||
const struct gap *rp = from_idx; \
|
if (__builtin_expect (ch < 0xffff, 1)) \
|
||||||
\
|
|
||||||
while (ch > rp->end) \
|
|
||||||
++rp; \
|
|
||||||
if (ch >= rp->start) \
|
|
||||||
{ \
|
{ \
|
||||||
unsigned char res = iso88597_from_ucs4[ch - 0xa0 + rp->idx]; \
|
const struct gap *rp = from_idx; \
|
||||||
if (res != '\0') \
|
|
||||||
{ \
|
|
||||||
if (__builtin_expect (outptr + 3 > outend, 0)) \
|
|
||||||
{ \
|
|
||||||
result = __GCONV_FULL_OUTPUT; \
|
|
||||||
break; \
|
|
||||||
} \
|
|
||||||
\
|
\
|
||||||
*outptr++ = ESC; \
|
while (ch > rp->end) \
|
||||||
*outptr++ = 'N'; \
|
++rp; \
|
||||||
*outptr++ = res; \
|
if (ch >= rp->start) \
|
||||||
written = 3; \
|
{ \
|
||||||
|
unsigned char res = \
|
||||||
|
iso88597_from_ucs4[ch - 0xa0 + rp->idx]; \
|
||||||
|
if (res != '\0') \
|
||||||
|
{ \
|
||||||
|
if (__builtin_expect (outptr + 3 > outend, 0)) \
|
||||||
|
{ \
|
||||||
|
result = __GCONV_FULL_OUTPUT; \
|
||||||
|
break; \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
*outptr++ = ESC; \
|
||||||
|
*outptr++ = 'N'; \
|
||||||
|
*outptr++ = res; \
|
||||||
|
written = 3; \
|
||||||
|
} \
|
||||||
} \
|
} \
|
||||||
} \
|
} \
|
||||||
} \
|
} \
|
||||||
@ -810,43 +814,45 @@ static const cvlist_t conversion_lists[4] =
|
|||||||
} \
|
} \
|
||||||
\
|
\
|
||||||
/* Try ISO 8859-7 upper half. */ \
|
/* Try ISO 8859-7 upper half. */ \
|
||||||
{ \
|
if (__builtin_expect (ch < 0xffff, 1)) \
|
||||||
const struct gap *rp = from_idx; \
|
{ \
|
||||||
|
const struct gap *rp = from_idx; \
|
||||||
\
|
\
|
||||||
while (ch > rp->end) \
|
while (ch > rp->end) \
|
||||||
++rp; \
|
++rp; \
|
||||||
if (ch >= rp->start) \
|
if (ch >= rp->start) \
|
||||||
{ \
|
{ \
|
||||||
unsigned char res = \
|
unsigned char res = \
|
||||||
iso88597_from_ucs4[ch - 0xa0 + rp->idx]; \
|
iso88597_from_ucs4[ch - 0xa0 + rp->idx]; \
|
||||||
if (res != '\0') \
|
if (res != '\0') \
|
||||||
{ \
|
{ \
|
||||||
if (set2 != ISO88597_set) \
|
if (set2 != ISO88597_set) \
|
||||||
{ \
|
{ \
|
||||||
if (__builtin_expect (outptr + 3 > outend, 0))\
|
if (__builtin_expect (outptr + 3 > outend, \
|
||||||
{ \
|
0)) \
|
||||||
result = __GCONV_FULL_OUTPUT; \
|
{ \
|
||||||
break; \
|
result = __GCONV_FULL_OUTPUT; \
|
||||||
} \
|
break; \
|
||||||
*outptr++ = ESC; \
|
} \
|
||||||
*outptr++ = '.'; \
|
*outptr++ = ESC; \
|
||||||
*outptr++ = 'F'; \
|
*outptr++ = '.'; \
|
||||||
set2 = ISO88597_set; \
|
*outptr++ = 'F'; \
|
||||||
} \
|
set2 = ISO88597_set; \
|
||||||
|
} \
|
||||||
\
|
\
|
||||||
if (__builtin_expect (outptr + 3 > outend, 0)) \
|
if (__builtin_expect (outptr + 3 > outend, 0)) \
|
||||||
{ \
|
{ \
|
||||||
result = __GCONV_FULL_OUTPUT; \
|
result = __GCONV_FULL_OUTPUT; \
|
||||||
break; \
|
break; \
|
||||||
} \
|
} \
|
||||||
*outptr++ = ESC; \
|
*outptr++ = ESC; \
|
||||||
*outptr++ = 'N'; \
|
*outptr++ = 'N'; \
|
||||||
*outptr++ = res; \
|
*outptr++ = res; \
|
||||||
result = __GCONV_OK; \
|
result = __GCONV_OK; \
|
||||||
break; \
|
break; \
|
||||||
} \
|
} \
|
||||||
} \
|
} \
|
||||||
} \
|
} \
|
||||||
\
|
\
|
||||||
break; \
|
break; \
|
||||||
\
|
\
|
||||||
|
Loading…
Reference in New Issue
Block a user