aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNoah Misch <noah@leadboat.com>2013-06-12 19:50:52 -0400
committerNoah Misch <noah@leadboat.com>2013-06-12 19:50:52 -0400
commit3a5d0c55338e6beb4c01ed5fadb1462e90db7545 (patch)
tree0cb5ef8db1911f1f2051c5c66628c18fabec3e9e
parent813895e4acfa646c6c0405a0a8c5d05637f42865 (diff)
downloadpostgresql-3a5d0c55338e6beb4c01ed5fadb1462e90db7545.tar.gz
postgresql-3a5d0c55338e6beb4c01ed5fadb1462e90db7545.zip
Avoid reading below the start of a stack variable in tokenize_file().
We would wrongly overwrite the prior stack byte if it happened to contain '\n' or '\r'. New in 9.3, so no back-patch.
-rw-r--r--src/backend/libpq/hba.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/backend/libpq/hba.c b/src/backend/libpq/hba.c
index e946a4659f2..91f6ced0d2f 100644
--- a/src/backend/libpq/hba.c
+++ b/src/backend/libpq/hba.c
@@ -411,9 +411,9 @@ tokenize_file(const char *filename, FILE *file,
line_number, filename)));
/* Strip trailing linebreak from rawline */
- while (rawline[strlen(rawline) - 1] == '\n' ||
- rawline[strlen(rawline) - 1] == '\r')
- rawline[strlen(rawline) - 1] = '\0';
+ lineptr = rawline + strlen(rawline) - 1;
+ while (lineptr >= rawline && (*lineptr == '\n' || *lineptr == '\r'))
+ *lineptr-- = '\0';
lineptr = rawline;
while (strlen(lineptr) > 0)