From 12e136332a7dcb6e4d0b4a85fef9ff97dfa57200 Mon Sep 17 00:00:00 2001 From: BurnZeZ Date: Fri, 31 May 2019 22:15:53 +0000 Subject: [PATCH] plumber: loop will go out of bounds when *++s == '\0'; replace with strstr --- sys/src/cmd/plumb/rules.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/sys/src/cmd/plumb/rules.c b/sys/src/cmd/plumb/rules.c index 5f7ea34e7..c5bec452d 100644 --- a/sys/src/cmd/plumb/rules.c +++ b/sys/src/cmd/plumb/rules.c @@ -728,7 +728,7 @@ morerules(uchar *text, int done) { int n; Ruleset *rs; - uchar *otext, *s, *endofrule; + uchar *otext, *p; pushinput("", -1, text); if(done) @@ -738,15 +738,11 @@ morerules(uchar *text, int done) * Help user by sending any full rules to parser so any parse errors will * occur on write rather than close. A heuristic will do: blank line ends rule. */ - endofrule = nil; - for(s=text; *s!='\0'; s++) - if(*s=='\n' && *++s=='\n') - endofrule = s+1; - if(endofrule == nil){ + if((p = (uchar*)strstr((char*)text, "\n\n")) == nil){ popinput(); return text; } - input->end = endofrule; + input->end = p+2; } for(n=0; rules[n]; n++) ;