svn commit: r367166 - head/usr.bin/calendar

Stefan Eßer se at FreeBSD.org
Fri Oct 30 14:32:14 UTC 2020


Author: se
Date: Fri Oct 30 14:32:13 2020
New Revision: 367166
URL: https://svnweb.freebsd.org/changeset/base/367166

Log:
  Fix length calculation in memmove
  
  MFC after:	3 days

Modified:
  head/usr.bin/calendar/events.c
  head/usr.bin/calendar/io.c

Modified: head/usr.bin/calendar/events.c
==============================================================================
--- head/usr.bin/calendar/events.c	Fri Oct 30 14:07:25 2020	(r367165)
+++ head/usr.bin/calendar/events.c	Fri Oct 30 14:32:13 2020	(r367166)
@@ -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;

Modified: head/usr.bin/calendar/io.c
==============================================================================
--- head/usr.bin/calendar/io.c	Fri Oct 30 14:07:25 2020	(r367165)
+++ head/usr.bin/calendar/io.c	Fri Oct 30 14:32:13 2020	(r367166)
@@ -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;


More information about the svn-src-all mailing list