]> granicus.if.org Git - postgresql/commitdiff
Fix misparsing of empty value in conninfo_uri_parse_params().
authorTom Lane <tgl@sss.pgh.pa.us>
Sat, 21 Feb 2015 17:59:25 +0000 (12:59 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Sat, 21 Feb 2015 17:59:43 +0000 (12:59 -0500)
After finding an "=" character, the pointer was advanced twice when it
should only advance once.  This is harmless as long as the value after "="
has at least one character; but if it doesn't, we'd miss the terminator
character and include too much in the value.

In principle this could lead to reading off the end of memory.  It does not
seem worth treating as a security issue though, because it would happen on
client side, and besides client logic that's taking conninfo strings from
untrusted sources has much worse security problems than this.

Report and patch received off-list from Thomas Fanghaenel.
Back-patch to 9.2 where the faulty code was introduced.

src/interfaces/libpq/fe-connect.c

index 65beaf3c8804f9a86306bf1ba95b238266f9aa53..30f3c539d42ce9552c55c2f212b2834bf83d677e 100644 (file)
@@ -4959,9 +4959,8 @@ conninfo_uri_parse_params(char *params,
                                        ++p;
                                break;
                        }
-
-                       /* Advance, NUL is checked in the 'if' above */
-                       ++p;
+                       else
+                               ++p;                    /* Advance over all other bytes. */
                }
 
                keyword = conninfo_uri_decode(keyword, errorMessage);