Hi,

currently ap_getword_conf() considers a word is quoted when (and only
when) it starts with a quote, regardless of this word ending (or not)
with the same quote.

That is, eg., ap_getword_conf("\"") == "" or
ap_getword_conf("\"whatever \\\"badly\\\" quoted") == "whatever
\"badly\" quoted".

I wonder if it should not return the (first) word as-is in this case,
hence including the leading quote and up to the first space (ie.
restart "normal" parsing from the beginning of the given line):

Index: server/util.c
===================================================================
--- server/util.c    (revision 1674046)
+++ server/util.c    (working copy)
@@ -780,7 +780,7 @@ AP_DECLARE(char *) ap_getword_conf_nc(apr_pool_t *

 AP_DECLARE(char *) ap_getword_conf(apr_pool_t *p, const char **line)
 {
-    const char *str = *line, *strend;
+    const char *str = *line, *strend = NULL;
     char *res;
     char quote;

@@ -803,12 +803,16 @@ AP_DECLARE(char *) ap_getword_conf(apr_pool_t *p,
                 ++strend;
             }
         }
-        res = substring_conf(p, str + 1, strend - str - 1, quote);

-        if (*strend == quote)
+        if (*strend) {
+            res = substring_conf(p, str + 1, strend - str - 1, quote);
             ++strend;
+        }
+        else {
+            strend = NULL;
+        }
     }
-    else {
+    if (!strend) {
         strend = str;
         while (*strend && !apr_isspace(*strend))
             ++strend;
--

With this, ap_getword_conf("\"") == "\"" and
ap_getword_conf("\"whatever \\\"badly\\\" quoted") == "\"whatever" =>
"\\\"badly\\\" => "quoted", which may raise syntax errors/typos the
administrator could be interested in.

Is that more of a fix or a compatibility issue?

Regards,
Yann.

Reply via email to