Fix array subscript warnings
Commit a5cf808be5
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
This commit is contained in:
parent
b589f211e0
commit
17935e1fdf
|
@ -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++;
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in New Issue