summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2015-02-21 12:59:25 -0500
committerTom Lane <tgl@sss.pgh.pa.us>2015-02-21 12:59:35 -0500
commit9c15a778a03d009883ec4370ac8b8d30d279aaa7 (patch)
tree5fb1dd069aa485ce62ee5d3e86d5d1ee97e1af37
parent66463a3cf1a567628be29fc9084c4ff51df772cf (diff)
Fix misparsing of empty value in conninfo_uri_parse_params().
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.
-rw-r--r--src/interfaces/libpq/fe-connect.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/src/interfaces/libpq/fe-connect.c b/src/interfaces/libpq/fe-connect.c
index 6810ee3a3e8..c11ecaef9b2 100644
--- a/src/interfaces/libpq/fe-connect.c
+++ b/src/interfaces/libpq/fe-connect.c
@@ -4965,9 +4965,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);