(BODY for TO_LOOP): Avoid running off the end of the ISO-8859-7 from idx table.

This commit is contained in:
Ulrich Drepper 2002-05-28 04:53:57 +00:00
parent c654817804
commit 479f2cbc50

View File

@ -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; \
\ \