loconv() did not terminate strings when copying

This commit is contained in:
Gunnar Ritter 2005-02-20 16:19:05 +00:00
parent a2e6b9bf06
commit ac7a080336
1 changed files with 11 additions and 6 deletions

17
ex_re.c
View File

@ -73,7 +73,7 @@
#ifndef lint #ifndef lint
#ifdef DOSCCS #ifdef DOSCCS
static char sccsid[] = "@(#)ex_re.c 1.53 (gritter) 2/20/05"; static char sccsid[] = "%W% (gritter) %G%";
#endif #endif
#endif #endif
@ -131,10 +131,11 @@ loconv(register char *dst, register const char *src)
wchar_t wc; wchar_t wc;
int len, i, nlen; int len, i, nlen;
while (*src) { for (;;) {
if ((*src & 0200) == 0) { if ((*src & 0200) == 0) {
*dst++ = tolower(*src); *dst++ = tolower(*src);
src++; if (*src++ == '\0')
break;
} else if ((len = mbtowc(&wc, src, mb_cur_max)) <= 0) { } else if ((len = mbtowc(&wc, src, mb_cur_max)) <= 0) {
*dst++ = *src++; *dst++ = *src++;
} else { } else {
@ -160,10 +161,9 @@ loconv(register char *dst, register const char *src)
} else } else
#endif /* MB */ #endif /* MB */
{ {
while (*src) { do
*dst++ = tolower(*src & 0377); *dst++ = tolower(*src & 0377);
src++; while (*src++);
}
} }
return dst - odst; return dst - odst;
} }
@ -936,12 +936,16 @@ compile1(void)
if ((n = regcomp(re.Expbuf, re.Patbuf, re.Flags)) != 0) { if ((n = regcomp(re.Expbuf, re.Patbuf, re.Flags)) != 0) {
switch (n) { switch (n) {
case REG_EBRACK: case REG_EBRACK:
free(re.Expbuf);
re.Expbuf = 0;
cerror(catgets(catd, 1, 154, "Missing ]")); cerror(catgets(catd, 1, 154, "Missing ]"));
/*NOTREACHED*/ /*NOTREACHED*/
break; break;
default: default:
regerror(n, re.Expbuf, &re.Patbuf[1], regerror(n, re.Expbuf, &re.Patbuf[1],
sizeof re.Patbuf - 1); sizeof re.Patbuf - 1);
free(re.Expbuf);
re.Expbuf = 0;
cerror(&re.Patbuf[1]); cerror(&re.Patbuf[1]);
} }
} }
@ -961,6 +965,7 @@ compile1(void)
if (r == 0) { if (r == 0) {
char *cp; char *cp;
free(re.Expbuf); free(re.Expbuf);
re.Expbuf = 0;
switch (regerrno) { switch (regerrno) {
case 11: case 11:
cp = "Range endpoint too large|Range endpoint " cp = "Range endpoint too large|Range endpoint "