diff options
-rw-r--r-- | networking/httpd.c | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/networking/httpd.c b/networking/httpd.c index b8aa02fe4..52b2b2a7a 100644 --- a/networking/httpd.c +++ b/networking/httpd.c | |||
@@ -530,27 +530,39 @@ static void parse_conf(const char *path, int flag) | |||
530 | while (fgets(buf, sizeof(buf), f) != NULL) { | 530 | while (fgets(buf, sizeof(buf), f) != NULL) { |
531 | unsigned strlen_buf; | 531 | unsigned strlen_buf; |
532 | unsigned char ch; | 532 | unsigned char ch; |
533 | char *after_colon = NULL; | 533 | char *after_colon; |
534 | 534 | ||
535 | { /* remove all whitespace, and # comments */ | 535 | { /* remove all whitespace, and # comments */ |
536 | char *p, *p0; | 536 | char *p, *p0; |
537 | 537 | ||
538 | p = p0 = buf; | 538 | p0 = buf; |
539 | while ((ch = *p0++) != '\0' && ch != '#') { | 539 | /* skip non-whitespace beginning. Often the whole line |
540 | if (!isspace(ch)) { | 540 | * is non-whitespace. We want this case to work fast, |
541 | * without needless copying, therefore we don't merge | ||
542 | * this operation into next while loop. */ | ||
543 | while ((ch = *p0) != '\0' && ch != '\n' && ch != '#' | ||
544 | && ch != ' ' && ch != '\t' | ||
545 | ) { | ||
546 | p0++; | ||
547 | } | ||
548 | p = p0; | ||
549 | /* if we enter this loop, we have some whitespace. | ||
550 | * discard it */ | ||
551 | while (ch != '\0' && ch != '\n' && ch != '#') { | ||
552 | if (ch != ' ' && ch != '\t') { | ||
541 | *p++ = ch; | 553 | *p++ = ch; |
542 | if (ch == ':' && after_colon == NULL) | ||
543 | after_colon = p; | ||
544 | } | 554 | } |
555 | ch = *++p0; | ||
545 | } | 556 | } |
546 | *p = '\0'; | 557 | *p = '\0'; |
547 | strlen_buf = p - buf; | 558 | strlen_buf = p - buf; |
548 | if (strlen_buf == 0) | 559 | if (strlen_buf == 0) |
549 | continue; | 560 | continue; /* empty line */ |
550 | } | 561 | } |
551 | 562 | ||
563 | after_colon = strchr(buf, ':'); | ||
552 | /* strange line? */ | 564 | /* strange line? */ |
553 | if (after_colon == NULL || *after_colon == '\0') | 565 | if (after_colon == NULL || *++after_colon == '\0') |
554 | goto config_error; | 566 | goto config_error; |
555 | 567 | ||
556 | ch = (buf[0] & ~0x20); /* toupper if it's a letter */ | 568 | ch = (buf[0] & ~0x20); /* toupper if it's a letter */ |