Commit Diff


commit - a5845bb51f3d8897129c98344197970f402ec5be
commit + 31aa9f59f584734a946777192b4a2ba28f7fdb6c
blob - e000a06edf698c34c0f6e2d5139a551c9af038b8
blob + 7ad4add47961309bb1c37e54bb4b1ab70cf17e5e
--- parser.c
+++ parser.c
@@ -64,17 +64,25 @@ int
 parser_foreach_line(struct parser *p, const char *buf, size_t size,
     parsechunkfn fn)
 {
-	const char	*b, *e;
-	size_t		 l, len;
+	char		*b, *e;
+	unsigned int	 ch;
+	size_t		 i, l, len;
 
-	if (p->len == 0) {
-		b = buf;
-		len = size;
-	} else {
-		if (!parser_append(p, buf, size))
-			return 0;
-		b = p->buf;
-		len = p->len;
+	if (!parser_append(p, buf, size))
+		return 0;
+	b = p->buf;
+	len = p->len;
+
+	/* drop every "funny" ASCII character */
+	for (i = 0; i < len; ) {
+		ch = b[i];
+		if ((ch >= ' ' || ch == '\n' || ch == '\t')
+		    && ch != 127) { /* del */
+			++i;
+			continue;
+		}
+		memmove(&b[i], &b[i+1], len - i);
+		len--;
 	}
 
 	while (len > 0) {