summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBurnZeZ <devnull@localhost>2019-05-31 22:15:53 +0000
committerBurnZeZ <devnull@localhost>2019-05-31 22:15:53 +0000
commit12e136332a7dcb6e4d0b4a85fef9ff97dfa57200 (patch)
tree3362be9197a3b1fbba32ec5d2e784f399becec77
parented3a3c4dd44efb92a1897baa4e07aa685227cddd (diff)
downloadplan9front-12e136332a7dcb6e4d0b4a85fef9ff97dfa57200.tar.xz
plumber: loop will go out of bounds when *++s == '\0'; replace with strstr
-rw-r--r--sys/src/cmd/plumb/rules.c10
1 files 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("<rules input>", -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++)
;