From: martijn Date: Wed, 12 Jan 2022 15:13:36 +0000 (+0000) Subject: Make lputs use psl instead of expecting it to be null-terminated. X-Git-Url: http://artulab.com/gitweb/?a=commitdiff_plain;h=4ad5840584cc6f79cbe4e8fd7ba2ff452201b026;p=openbsd Make lputs use psl instead of expecting it to be null-terminated. This allows us to enable the commandl1 and commandl2 regress tests. Original analysis from seL4 disroot org OK millert@ --- diff --git a/usr.bin/sed/process.c b/usr.bin/sed/process.c index cc31fcb57a3..932e333fde4 100644 --- a/usr.bin/sed/process.c +++ b/usr.bin/sed/process.c @@ -1,4 +1,4 @@ -/* $OpenBSD: process.c,v 1.34 2018/11/14 10:59:33 martijn Exp $ */ +/* $OpenBSD: process.c,v 1.35 2022/01/12 15:13:36 martijn Exp $ */ /*- * Copyright (c) 1992 Diomidis Spinellis. @@ -60,7 +60,7 @@ static SPACE HS, PS, SS; static inline int applies(struct s_command *); static void flush_appends(void); -static void lputs(char *); +static void lputs(char *, size_t); static inline int regexec_e(regex_t *, const char *, int, int, size_t, size_t); static void regsub(SPACE *, char *, char *); @@ -158,7 +158,7 @@ redirect: (void)fprintf(outfile, "%s", cp->t); break; case 'l': - lputs(ps); + lputs(ps, psl); break; case 'n': if (!nflag && !pd) @@ -478,14 +478,14 @@ flush_appends(void) } static void -lputs(char *s) +lputs(char *s, size_t len) { int count; extern int termwidth; const char *escapes; char *p; - for (count = 0; *s; ++s) { + for (count = 0; len > 0; len--, s++) { if (count >= termwidth) { (void)fprintf(outfile, "\\\n"); count = 0; @@ -501,7 +501,7 @@ lputs(char *s) } else { escapes = "\\\a\b\f\r\t\v"; (void)fputc('\\', outfile); - if ((p = strchr(escapes, *s))) { + if ((p = strchr(escapes, *s)) && *s != '\0') { (void)fputc("\\abfrtv"[p - escapes], outfile); count += 2; } else {