diff options
author | se <se@ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f> | 2020-10-30 14:32:13 +0000 |
---|---|---|
committer | se <se@ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f> | 2020-10-30 14:32:13 +0000 |
commit | cadaf9d9f227a246b9e3a3df08c49f48164656ed (patch) | |
tree | 1e20648ea69dce77be966d2349afe392b02e4976 | |
parent | bff9dedaf4d5f5b38990e7135a995b00f65142bc (diff) | |
download | freebsd-cadaf9d9f227a246b9e3a3df08c49f48164656ed.tar.gz freebsd-cadaf9d9f227a246b9e3a3df08c49f48164656ed.tar.bz2 |
Fix length calculation in memmove
MFC after: 3 days
git-svn-id: http://svn.freebsd.org/base/head@367166 ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f
-rw-r--r-- | usr.bin/calendar/events.c | 8 | ||||
-rw-r--r-- | usr.bin/calendar/io.c | 5 |
2 files changed, 10 insertions, 3 deletions
diff --git a/usr.bin/calendar/events.c b/usr.bin/calendar/events.c index 39ede509e4d..1275c66dca1 100644 --- a/usr.bin/calendar/events.c +++ b/usr.bin/calendar/events.c @@ -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; diff --git a/usr.bin/calendar/io.c b/usr.bin/calendar/io.c index 286cf5026ac..992697af76b 100644 --- a/usr.bin/calendar/io.c +++ b/usr.bin/calendar/io.c @@ -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; |