Fix length calculation in memmove
MFC after: 3 days
This commit is contained in:
parent
7c58c37ebb
commit
6bdb89a898
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=367166
@ -55,6 +55,7 @@ set_new_encoding(void)
|
||||
const char *newenc;
|
||||
|
||||
newenc = nl_langinfo(CODESET);
|
||||
fprintf(stderr, "NEWENC=%s\n", newenc); // DEBUG
|
||||
if (currentEncoding == NULL) {
|
||||
currentEncoding = strdup(newenc);
|
||||
if (currentEncoding == NULL)
|
||||
@ -98,13 +99,14 @@ convert(char *input)
|
||||
else
|
||||
err(1, "Initialization failure");
|
||||
}
|
||||
fprintf(stderr, "CONV=%p\n", conv); // DEBUG
|
||||
}
|
||||
|
||||
inleft = strlen(input);
|
||||
inbuf = input;
|
||||
|
||||
outlen = inleft;
|
||||
if ((output = malloc(outlen + 1)) == NULL)
|
||||
outlen = inleft + 3;
|
||||
if ((output = malloc(outlen)) == NULL)
|
||||
errx(1, "convert: cannot allocate memory");
|
||||
|
||||
for (;;) {
|
||||
@ -112,7 +114,9 @@ convert(char *input)
|
||||
outbuf = output + converted;
|
||||
outleft = outlen - converted;
|
||||
|
||||
fprintf(stderr, "-< %s %p %ld %ld\n", inbuf, outbuf, inleft, outleft); // DEBUG
|
||||
converted = iconv(conv, (char **) &inbuf, &inleft, &outbuf, &outleft);
|
||||
fprintf(stderr, "-> %ld %s %p %ld %ld\n", converted, inbuf, outbuf, inleft, outleft); // DEBUG
|
||||
if (converted != (size_t) -1 || errno == EINVAL) {
|
||||
/* finished or invalid multibyte, so truncate and ignore */
|
||||
break;
|
||||
|
@ -311,16 +311,19 @@ cal_parse(FILE *in, FILE *out)
|
||||
c = strstr(buf, "//");
|
||||
cc = strstr(buf, "/*");
|
||||
if (c != NULL && (cc == NULL || c - cc < 0)) {
|
||||
/* single line comment */
|
||||
*c = '\0';
|
||||
linelen = c - buf;
|
||||
break;
|
||||
} else if (cc != NULL) {
|
||||
c = strstr(cc + 2, "*/");
|
||||
if (c != NULL) {
|
||||
/* multi-line comment ending on same line */
|
||||
c += 2;
|
||||
memmove(cc, c, c - buf + linelen);
|
||||
memmove(cc, c, buf + linelen + 1 - c);
|
||||
linelen -= c - cc;
|
||||
} else {
|
||||
/* multi-line comment */
|
||||
*cc = '\0';
|
||||
linelen = cc - buf;
|
||||
incomment = true;
|
||||
|
Loading…
Reference in New Issue
Block a user