mirror of
https://github.com/postgres/postgres.git
synced 2025-04-22 23:02:54 +03:00
Fix unportable usages of tolower(). On signed-char machines, it is necessary
to explicitly cast the output back to char before comparing it to a char value, else we get the wrong result for high-bit-set characters. Found by Rolf Jentsch. Also, fix several places where <ctype.h> functions were being called without casting the argument to unsigned char; this is likewise unportable, but we keep making that mistake :-(. These found by buildfarm member salamander, which I will desperately miss if it ever goes belly-up.
This commit is contained in:
parent
3bf822c4d7
commit
e04fa58dcd
@ -19,7 +19,7 @@
|
|||||||
* Copyright (c) 1996-2008, PostgreSQL Global Development Group
|
* Copyright (c) 1996-2008, PostgreSQL Global Development Group
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $PostgreSQL: pgsql/src/backend/utils/adt/like_match.c,v 1.20 2008/01/01 19:45:52 momjian Exp $
|
* $PostgreSQL: pgsql/src/backend/utils/adt/like_match.c,v 1.21 2008/03/01 03:26:34 tgl Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -71,7 +71,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef MATCH_LOWER
|
#ifdef MATCH_LOWER
|
||||||
#define TCHAR(t) tolower((t))
|
#define TCHAR(t) ((char) tolower((unsigned char) (t)))
|
||||||
#else
|
#else
|
||||||
#define TCHAR(t) (t)
|
#define TCHAR(t) (t)
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/execute.c,v 1.76 2008/02/07 11:09:12 meskes Exp $ */
|
/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/execute.c,v 1.77 2008/03/01 03:26:34 tgl Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The aim is to get a simpler inteface to the database routines.
|
* The aim is to get a simpler inteface to the database routines.
|
||||||
@ -122,13 +122,15 @@ next_insert(char *text, int pos, bool questionmarks)
|
|||||||
string = string ? false : true;
|
string = string ? false : true;
|
||||||
else if (!string)
|
else if (!string)
|
||||||
{
|
{
|
||||||
if (text[p] == '$' && isdigit(text[p + 1]))
|
if (text[p] == '$' && isdigit((unsigned char) text[p + 1]))
|
||||||
{
|
{
|
||||||
/* this can be either a dollar quote or a variable */
|
/* this can be either a dollar quote or a variable */
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = p + 1; isdigit(text[i]); i++);
|
for (i = p + 1; isdigit((unsigned char) text[i]); i++)
|
||||||
if (!isalpha(text[i]) && isascii(text[i]) && text[i] != '_')
|
/* empty loop body */ ;
|
||||||
|
if (!isalpha((unsigned char) text[i]) &&
|
||||||
|
isascii((unsigned char) text[i]) && text[i] != '_')
|
||||||
/* not dollar delimited quote */
|
/* not dollar delimited quote */
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/preproc.y,v 1.361 2008/02/15 22:17:06 tgl Exp $ */
|
/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/preproc.y,v 1.362 2008/03/01 03:26:35 tgl Exp $ */
|
||||||
|
|
||||||
/* Copyright comment */
|
/* Copyright comment */
|
||||||
%{
|
%{
|
||||||
@ -5847,7 +5847,7 @@ prepared_name: name {
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i< strlen($1); i++)
|
for (i = 0; i< strlen($1); i++)
|
||||||
$1[i] = tolower($1[i]);
|
$1[i] = tolower((unsigned char) $1[i]);
|
||||||
|
|
||||||
$$ = make3_str(make_str("\""), $1, make_str("\""));
|
$$ = make3_str(make_str("\""), $1, make_str("\""));
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user