mirror of
https://github.com/postgres/postgres.git
synced 2025-08-30 06:01:21 +03:00
I checked all the previous string handling errors and most of them were
already fixed by You. However there were a few left and attached patch should fix the rest of them. I used StringInfo only in 2 places and both of them are inside debug ifdefs. Only performance penalty will come from using strlen() like all the other code does. I also modified some of the already patched parts by changing snprintf(buf, 2 * BUFSIZE, ... style lines to snprintf(buf, sizeof(buf), ... where buf is an array. Jukka Holappa
This commit is contained in:
@@ -12,7 +12,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/pgc.l,v 1.98 2002/07/30 16:33:08 tgl Exp $
|
||||
* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/pgc.l,v 1.99 2002/09/02 06:11:42 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -405,7 +405,7 @@ cppline {space}*#(.*\\{space})*.*
|
||||
mmerror(PARSE_ERROR, ET_ERROR, "zero-length delimited identifier");
|
||||
if (literallen >= NAMEDATALEN)
|
||||
{
|
||||
sprintf(errortext, "identifier \"%s\" will be truncated to \"%.*s\"",
|
||||
snprintf(errortext, sizeof(errortext), "identifier \"%s\" will be truncated to \"%.*s\"",
|
||||
literalbuf, NAMEDATALEN-1, literalbuf);
|
||||
literalbuf[NAMEDATALEN-1] = '\0';
|
||||
mmerror(PARSE_ERROR, ET_WARNING, errortext);
|
||||
@@ -831,7 +831,7 @@ cppline {space}*#(.*\\{space})*.*
|
||||
fprintf(stderr, "Error: Path %s/%s is too long in line %d, skipping.\n", ip->path, yytext, yylineno);
|
||||
continue;
|
||||
}
|
||||
sprintf (inc_file, "%s/%s", ip->path, yytext);
|
||||
snprintf (inc_file, sizeof(inc_file), "%s/%s", ip->path, yytext);
|
||||
yyin = fopen( inc_file, "r" );
|
||||
if (!yyin)
|
||||
{
|
||||
@@ -844,7 +844,7 @@ cppline {space}*#(.*\\{space})*.*
|
||||
}
|
||||
if (!yyin)
|
||||
{
|
||||
sprintf(errortext, "Cannot open include file %s in line %d\n", yytext, yylineno);
|
||||
snprintf(errortext, sizeof(errortext), "Cannot open include file %s in line %d\n", yytext, yylineno);
|
||||
mmerror(NO_INCLUDE_FILE, ET_FATAL, errortext);
|
||||
}
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/Attic/preproc.y,v 1.195 2002/07/21 11:09:41 meskes Exp $ */
|
||||
/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/Attic/preproc.y,v 1.196 2002/09/02 06:11:43 momjian Exp $ */
|
||||
|
||||
/* Copyright comment */
|
||||
%{
|
||||
@@ -582,7 +582,7 @@ stmt: AlterDatabaseSetStmt { output_statement($1, 0, connection); }
|
||||
|
||||
if (ptr == NULL)
|
||||
{
|
||||
sprintf(errortext, "trying to open undeclared cursor %s\n", $1);
|
||||
snprintf(errortext, sizeof(errortext), "trying to open undeclared cursor %s\n", $1);
|
||||
mmerror(PARSE_ERROR, ET_ERROR, errortext);
|
||||
}
|
||||
|
||||
@@ -1119,7 +1119,7 @@ columnDef: ColId Typename ColQualList opt_collate
|
||||
{
|
||||
if (strlen($4) > 0)
|
||||
{
|
||||
sprintf(errortext, "Currently unsupported CREATE TABLE / COLLATE %s will be passed to backend", $4);
|
||||
snprintf(errortext, sizeof(errortext), "Currently unsupported CREATE TABLE / COLLATE %s will be passed to backend", $4);
|
||||
mmerror(PARSE_ERROR, ET_WARNING, errortext);
|
||||
}
|
||||
$$ = cat_str(4, $1, $2, $3, $4);
|
||||
@@ -2406,7 +2406,7 @@ CursorStmt: DECLARE name opt_cursor CURSOR FOR SelectStmt
|
||||
if (strcmp($2, ptr->name) == 0)
|
||||
{
|
||||
/* re-definition is a bug */
|
||||
sprintf(errortext, "cursor %s already defined", $2);
|
||||
snprintf(errortext, sizeof(errortext), "cursor %s already defined", $2);
|
||||
mmerror(PARSE_ERROR, ET_ERROR, errortext);
|
||||
}
|
||||
}
|
||||
@@ -3628,7 +3628,7 @@ connection_target: database_name opt_server opt_port
|
||||
/* old style: dbname[@server][:port] */
|
||||
if (strlen($2) > 0 && *($2) != '@')
|
||||
{
|
||||
sprintf(errortext, "Expected '@', found '%s'", $2);
|
||||
sprintf(errortext, sizeof(errortext), "Expected '@', found '%s'", $2);
|
||||
mmerror(PARSE_ERROR, ET_ERROR, errortext);
|
||||
}
|
||||
|
||||
@@ -3639,13 +3639,13 @@ connection_target: database_name opt_server opt_port
|
||||
/* new style: <tcp|unix>:postgresql://server[:port][/dbname] */
|
||||
if (strncmp($1, "unix:postgresql", strlen("unix:postgresql")) != 0 && strncmp($1, "tcp:postgresql", strlen("tcp:postgresql")) != 0)
|
||||
{
|
||||
sprintf(errortext, "only protocols 'tcp' and 'unix' and database type 'postgresql' are supported");
|
||||
snprintf(errortext, sizeof(errortext), "only protocols 'tcp' and 'unix' and database type 'postgresql' are supported");
|
||||
mmerror(PARSE_ERROR, ET_ERROR, errortext);
|
||||
}
|
||||
|
||||
if (strncmp($3, "//", strlen("//")) != 0)
|
||||
{
|
||||
sprintf(errortext, "Expected '://', found '%s'", $3);
|
||||
snprintf(errortext, sizeof(errortext), "Expected '://', found '%s'", $3);
|
||||
mmerror(PARSE_ERROR, ET_ERROR, errortext);
|
||||
}
|
||||
|
||||
@@ -3653,7 +3653,7 @@ connection_target: database_name opt_server opt_port
|
||||
strncmp($3 + strlen("//"), "localhost", strlen("localhost")) != 0 &&
|
||||
strncmp($3 + strlen("//"), "127.0.0.1", strlen("127.0.0.1")) != 0)
|
||||
{
|
||||
sprintf(errortext, "unix domain sockets only work on 'localhost' but not on '%9.9s'", $3 + strlen("//"));
|
||||
snprintf(errortext, sizeof(errortext), "unix domain sockets only work on 'localhost' but not on '%9.9s'", $3 + strlen("//"));
|
||||
mmerror(PARSE_ERROR, ET_ERROR, errortext);
|
||||
}
|
||||
|
||||
@@ -3686,13 +3686,13 @@ db_prefix: ident CVARIABLE
|
||||
{
|
||||
if (strcmp($2, "postgresql") != 0 && strcmp($2, "postgres") != 0)
|
||||
{
|
||||
sprintf(errortext, "Expected 'postgresql', found '%s'", $2);
|
||||
snprintf(errortext, sizeof(errortext), "Expected 'postgresql', found '%s'", $2);
|
||||
mmerror(PARSE_ERROR, ET_ERROR, errortext);
|
||||
}
|
||||
|
||||
if (strcmp($1, "tcp") != 0 && strcmp($1, "unix") != 0)
|
||||
{
|
||||
sprintf(errortext, "Illegal connection type %s", $1);
|
||||
snprintf(errortext, sizeof(errortext), "Illegal connection type %s", $1);
|
||||
mmerror(PARSE_ERROR, ET_ERROR, errortext);
|
||||
}
|
||||
|
||||
@@ -3704,7 +3704,7 @@ server: Op server_name
|
||||
{
|
||||
if (strcmp($1, "@") != 0 && strcmp($1, "//") != 0)
|
||||
{
|
||||
sprintf(errortext, "Expected '@' or '://', found '%s'", $1);
|
||||
snprintf(errortext, sizeof(errortext), "Expected '@' or '://', found '%s'", $1);
|
||||
mmerror(PARSE_ERROR, ET_ERROR, errortext);
|
||||
}
|
||||
|
||||
@@ -3806,7 +3806,7 @@ opt_options: Op ColId
|
||||
|
||||
if (strcmp($1, "?") != 0)
|
||||
{
|
||||
sprintf(errortext, "unrecognised token '%s'", $1);
|
||||
snprintf(errortext, sizeof(errortext), "unrecognised token '%s'", $1);
|
||||
mmerror(PARSE_ERROR, ET_ERROR, errortext);
|
||||
}
|
||||
|
||||
@@ -3829,7 +3829,7 @@ ECPGCursorStmt: DECLARE name opt_cursor CURSOR FOR ident
|
||||
if (strcmp($2, ptr->name) == 0)
|
||||
{
|
||||
/* re-definition is a bug */
|
||||
sprintf(errortext, "cursor %s already defined", $2);
|
||||
snprintf(errortext, sizeof(errortext), "cursor %s already defined", $2);
|
||||
mmerror(PARSE_ERROR, ET_ERROR, errortext);
|
||||
}
|
||||
}
|
||||
@@ -3923,7 +3923,7 @@ type_declaration: S_TYPEDEF
|
||||
if (strcmp($5, ptr->name) == 0)
|
||||
{
|
||||
/* re-definition is a bug */
|
||||
sprintf(errortext, "Type %s already defined", $5);
|
||||
snprintf(errortext, sizeof(errortext), "Type %s already defined", $5);
|
||||
mmerror(PARSE_ERROR, ET_ERROR, errortext);
|
||||
}
|
||||
}
|
||||
@@ -4528,7 +4528,7 @@ ECPGTypedef: TYPE_P
|
||||
if (strcmp($3, ptr->name) == 0)
|
||||
{
|
||||
/* re-definition is a bug */
|
||||
sprintf(errortext, "Type %s already defined", $3);
|
||||
snprintf(errortext, sizeof(errortext), "Type %s already defined", $3);
|
||||
mmerror(PARSE_ERROR, ET_ERROR, errortext);
|
||||
}
|
||||
}
|
||||
|
@@ -80,13 +80,13 @@ find_struct(char *name, char *next)
|
||||
{
|
||||
if (p->type->type != ECPGt_array)
|
||||
{
|
||||
sprintf(errortext, "variable %s is not a pointer", name);
|
||||
snprintf(errortext, sizeof(errortext), "variable %s is not a pointer", name);
|
||||
mmerror(PARSE_ERROR, ET_FATAL, errortext);
|
||||
}
|
||||
|
||||
if (p->type->u.element->type != ECPGt_struct && p->type->u.element->type != ECPGt_union)
|
||||
{
|
||||
sprintf(errortext, "variable %s is not a pointer to a structure or a union", name);
|
||||
snprintf(errortext, sizeof(errortext), "variable %s is not a pointer to a structure or a union", name);
|
||||
mmerror(PARSE_ERROR, ET_FATAL, errortext);
|
||||
}
|
||||
|
||||
@@ -100,7 +100,7 @@ find_struct(char *name, char *next)
|
||||
{
|
||||
if (p->type->type != ECPGt_struct && p->type->type != ECPGt_union)
|
||||
{
|
||||
sprintf(errortext, "variable %s is neither a structure nor a union", name);
|
||||
snprintf(errortext, sizeof(errortext), "variable %s is neither a structure nor a union", name);
|
||||
mmerror(PARSE_ERROR, ET_FATAL, errortext);
|
||||
}
|
||||
|
||||
@@ -142,7 +142,7 @@ find_variable(char *name)
|
||||
|
||||
if (p == NULL)
|
||||
{
|
||||
sprintf(errortext, "The variable %s is not declared", name);
|
||||
snprintf(errortext, sizeof(errortext), "The variable %s is not declared", name);
|
||||
mmerror(PARSE_ERROR, ET_FATAL, errortext);
|
||||
}
|
||||
|
||||
@@ -290,7 +290,7 @@ get_typedef(char *name)
|
||||
for (this = types; this && strcmp(this->name, name); this = this->next);
|
||||
if (!this)
|
||||
{
|
||||
sprintf(errortext, "invalid datatype '%s'", name);
|
||||
snprintf(errortext, sizeof(errortext), "invalid datatype '%s'", name);
|
||||
mmerror(PARSE_ERROR, ET_FATAL, errortext);
|
||||
}
|
||||
|
||||
@@ -320,7 +320,7 @@ adjust_array(enum ECPGttype type_enum, int *dimension, int *length, int type_dim
|
||||
}
|
||||
|
||||
if (pointer_len>2)
|
||||
{ sprintf(errortext, "No multilevel (more than 2) pointer supported %d",pointer_len);
|
||||
{ snprintf(errortext, sizeof(errortext), "No multilevel (more than 2) pointer supported %d",pointer_len);
|
||||
mmerror(PARSE_ERROR, ET_FATAL, errortext);
|
||||
/* mmerror(PARSE_ERROR, ET_FATAL, "No multilevel (more than 2) pointer supported %d",pointer_len);*/
|
||||
}
|
||||
|
Reference in New Issue
Block a user