From d2286a98ef3fb88bafb57381b4c20b8b878827f1 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Thu, 6 Sep 2012 11:43:51 -0400 Subject: [PATCH] Allow embedded spaces without quoting in unix_socket_directories entries. This fix removes an unnecessary incompatibility with the old behavior of the unix_socket_directory parameter. Since pathnames with embedded spaces are fairly popular on some platforms, the incompatibility could be significant in practice. We'll still strip unquoted leading/trailing spaces, however. No docs update since the documentation already implied that it worked like this. Per bug #7514 from Murray Cumming. --- src/backend/utils/adt/varlena.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/backend/utils/adt/varlena.c b/src/backend/utils/adt/varlena.c index d9e6bc4338..7e7d8c73bc 100644 --- a/src/backend/utils/adt/varlena.c +++ b/src/backend/utils/adt/varlena.c @@ -2451,9 +2451,9 @@ SplitIdentifierString(char *rawstring, char separator, * * This is similar to SplitIdentifierString, except that the parsing * rules are meant to handle pathnames instead of identifiers: there is - * no downcasing, the max length is MAXPGPATH-1, and we apply - * canonicalize_path() to each extracted string. Because of the last, - * the returned strings are separately palloc'd rather than being + * no downcasing, embedded spaces are allowed, the max length is MAXPGPATH-1, + * and we apply canonicalize_path() to each extracted string. Because of the + * last, the returned strings are separately palloc'd rather than being * pointers into rawstring --- but we still scribble on rawstring. * * Inputs: @@ -2510,13 +2510,16 @@ SplitDirectoriesString(char *rawstring, char separator, } else { - /* Unquoted name --- extends to separator or whitespace */ - curname = nextp; - while (*nextp && *nextp != separator && - !isspace((unsigned char) *nextp)) + /* Unquoted name --- extends to separator or end of string */ + curname = endp = nextp; + while (*nextp && *nextp != separator) + { + /* trailing whitespace should not be included in name */ + if (!isspace((unsigned char) *nextp)) + endp = nextp + 1; nextp++; - endp = nextp; - if (curname == nextp) + } + if (curname == endp) return false; /* empty unquoted name not allowed */ } -- 2.40.0