git.postgresql.org Git - postgresql.git/commitdiff

git projects / postgresql.git / commitdiff
? search:
summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: b589f21)
Fix array subscript warnings
2023年11月30日 09:56:48 +0000 (10:56 +0100)
2023年11月30日 09:56:48 +0000 (10:56 +0100)
Commit a5cf808be55 accidentally passed signed chars to isalpha and
isspace in the parser code which leads to undefined behavior. Fix
by casting the parameters to unsigned chars.

Author: Pavel Stehule <pavel.stehule@gmail.com>
Reported-by: Tom Lane <tgl@sss.pgh.pa.us>
Reported-by: Michael Paquier <michael@paquier.xyz>
Discussion: https://postgr.es/m/388186.1701315586@sss.pgh.pa.us
Discussion: https://postgr.es/m/ZWgg5xim2CXQcfmh@paquier.xyz


diff --git a/src/bin/pg_dump/filter.c b/src/bin/pg_dump/filter.c
index dff871c7cd02675480920190bca4183548562ea7..d79b6da27c0d6451d7982ad87be6d54aa72a19a7 100644 (file)
--- a/src/bin/pg_dump/filter.c
+++ b/src/bin/pg_dump/filter.c
@@ -185,14 +185,14 @@ filter_get_keyword(const char **line, int *size)
*size = 0;
/* Skip initial whitespace */
- while (isspace(*ptr))
+ while (isspace((unsigned char) *ptr))
ptr++;
- if (isalpha(*ptr))
+ if (isalpha((unsigned char) *ptr))
{
result = ptr++;
- while (isalpha(*ptr) || *ptr == '_')
+ while (isalpha((unsigned char) *ptr) || *ptr == '_')
ptr++;
*size = ptr - result;
@@ -301,7 +301,7 @@ read_pattern(FilterStateData *fstate, const char *str, PQExpBuffer pattern)
bool found_space = false;
/* Skip initial whitespace */
- while (isspace(*str))
+ while (isspace((unsigned char) *str))
str++;
if (*str == '0円')
@@ -312,7 +312,7 @@ read_pattern(FilterStateData *fstate, const char *str, PQExpBuffer pattern)
while (*str && *str != '#')
{
- while (*str && !isspace(*str) && !strchr("#,.()\"", *str))
+ while (*str && !isspace((unsigned char) *str) && !strchr("#,.()\"", *str))
{
/*
* Append space only when it is allowed, and when it was found in
@@ -351,7 +351,7 @@ read_pattern(FilterStateData *fstate, const char *str, PQExpBuffer pattern)
found_space = false;
/* skip ending whitespaces */
- while (isspace(*str))
+ while (isspace((unsigned char) *str))
{
found_space = true;
str++;
@@ -400,7 +400,7 @@ filter_read_item(FilterStateData *fstate,
fstate->lineno++;
/* Skip initial white spaces */
- while (isspace(*str))
+ while (isspace((unsigned char) *str))
str++;
/*
This is the main PostgreSQL git repository.
RSS Atom

AltStyle によって変換されたページ (->オリジナル) /