Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 1460c82

Browse files
author
Michael Meskes
committed
Set valid return values even in case of an error to prevent segfaults.
1 parent b775d93 commit 1460c82

File tree

2 files changed

+56
-23
lines changed

2 files changed

+56
-23
lines changed

src/interfaces/ecpg/ChangeLog

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2288,6 +2288,11 @@ Sun, 13 Jan 2008 12:52:15 +0100
22882288

22892289
- Changed prototype for ECPGdo because some compilers don't like
22902290
int/enum aliasing in there.
2291+
2292+
Mon, 14 Jan 2008 10:42:23 +0100
2293+
2294+
- Set valid return values even in case of an error to prevent
2295+
segfaults.
22912296
- Set pgtypes library version to 3.0.
22922297
- Set compat library version to 3.0.
22932298
- Set ecpg library version to 6.0.

src/interfaces/ecpg/preproc/preproc.y

Lines changed: 51 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/preproc.y,v 1.357 2007/12/28 11:25:21 meskes Exp $ */
1+
/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/preproc.y,v 1.358 2008/01/14 09:43:42 meskes Exp $ */
22

33
/* Copyright comment */
44
%{
@@ -1288,7 +1288,10 @@ VariableShowStmt: SHOW var_name ecpg_into
12881288
| SHOW SESSION AUTHORIZATION ecpg_into
12891289
{ $$ = make_str("show session authorization"); }
12901290
| SHOW ALL
1291-
{ mmerror(PARSE_ERROR, ET_ERROR, "SHOW ALL not implemented"); }
1291+
{
1292+
mmerror(PARSE_ERROR, ET_ERROR, "SHOW ALL not implemented");
1293+
$$ = EMPTY;
1294+
}
12921295
;
12931296

12941297
VariableResetStmt: RESET var_name
@@ -2300,22 +2303,22 @@ FetchStmt: FETCH fetch_direction from_in name ecpg_into
23002303
}
23012304
| FETCH from_in name ecpg_into
23022305
{
2303-
add_additional_variables($3, false);
2306+
add_additional_variables($3, false);
23042307
$$ = cat_str(3, make_str("fetch"), $2, $3);
23052308
}
23062309
| FETCH name ecpg_into
23072310
{
2308-
add_additional_variables($2, false);
2311+
add_additional_variables($2, false);
23092312
$$ = cat2_str(make_str("fetch"), $2);
23102313
}
23112314
| FETCH fetch_direction from_in name
23122315
{
2313-
add_additional_variables($4, false);
2316+
add_additional_variables($4, false);
23142317
$$ = cat_str(4, make_str("fetch"), $2, $3, $4);
23152318
}
23162319
| FETCH fetch_direction name
23172320
{
2318-
add_additional_variables($3, false);
2321+
add_additional_variables($3, false);
23192322
$$ = cat_str(4, make_str("fetch"), $2, make_str("from"), $3);
23202323
}
23212324
| FETCH from_in name
@@ -2325,7 +2328,7 @@ FetchStmt: FETCH fetch_direction from_in name ecpg_into
23252328
}
23262329
| FETCH name
23272330
{
2328-
add_additional_variables($2, false);
2331+
add_additional_variables($2, false);
23292332
$$ = cat2_str(make_str("fetch"), $2);
23302333
}
23312334
| MOVE fetch_direction from_in name
@@ -2340,42 +2343,57 @@ fetch_direction: NEXT { $$ = make_str("next"); }
23402343
| LAST_P { $$ = make_str("last"); }
23412344
| ABSOLUTE_P IntConst {
23422345
if ($2[1] == '$')
2343-
mmerror(PARSE_ERROR, ET_ERROR, "fetch/move count must not be a variable.\n");
2346+
{
2347+
mmerror(PARSE_ERROR, ET_ERROR, "fetch/move count must not be a variable, ignoring it.\n");
2348+
$$ = make_str("absolute");
2349+
}
23442350
else
23452351
$$ = cat2_str(make_str("absolute"), $2);
23462352
}
23472353
| RELATIVE_P IntConst {
23482354
if ($2[1] == '$')
2349-
mmerror(PARSE_ERROR, ET_ERROR, "fetch/move count must not be a variable.\n");
2355+
{
2356+
mmerror(PARSE_ERROR, ET_ERROR, "fetch/move count must not be a variable, ignoring it.\n");
2357+
$$ = make_str("relative");
2358+
}
23502359
else
23512360
$$ = cat2_str(make_str("relative"), $2);
23522361
}
23532362
| IntConst {
23542363
if ($1[1] == '$')
2355-
mmerror(PARSE_ERROR, ET_ERROR, "fetch/move count must not be a variable.\n");
2364+
{
2365+
mmerror(PARSE_ERROR, ET_ERROR, "fetch/move count must not be a variablei, ignoring it.\n");
2366+
$$ = EMPTY;
2367+
}
23562368
else
23572369
$$ = $1;
23582370
}
23592371
| ALL { $$ = make_str("all"); }
23602372
| FORWARD { $$ = make_str("forward"); }
23612373
| FORWARD IntConst {
23622374
if ($2[1] == '$')
2363-
mmerror(PARSE_ERROR, ET_ERROR, "fetch/move count must not be a variable.\n");
2375+
{
2376+
mmerror(PARSE_ERROR, ET_ERROR, "fetch/move count must not be a variable, ignoring it.\n");
2377+
$$ = make_str("forward");
2378+
}
23642379
else
23652380
$$ = cat2_str(make_str("forward"), $2);
23662381
}
23672382
| FORWARD ALL { $$ = make_str("forward all"); }
23682383
| BACKWARD { $$ = make_str("backward"); }
23692384
| BACKWARD IntConst {
23702385
if ($2[1] == '$')
2371-
mmerror(PARSE_ERROR, ET_ERROR, "fetch/move count must not be a variable.\n");
2386+
{
2387+
mmerror(PARSE_ERROR, ET_ERROR, "fetch/move count must not be a variable, ignoring it.\n");
2388+
$$ = make_str("backward");
2389+
}
23722390
else
23732391
$$ = cat2_str(make_str("backward"), $2);
23742392
}
23752393
| BACKWARD ALL { $$ = make_str("backward all"); }
23762394
;
23772395

2378-
from_in: IN_P { $$ = make_str("in"); }
2396+
from_in: IN_P { $$ = make_str("in"); }
23792397
| FROM { $$ = make_str("from"); }
23802398
;
23812399

@@ -2744,7 +2762,10 @@ RemoveOperStmt: DROP OPERATOR all_Op '(' oper_argtypes ')' opt_drop_behavior
27442762
;
27452763

27462764
oper_argtypes: Typename
2747-
{ mmerror(PARSE_ERROR, ET_ERROR, "parser: argument type missing (use NONE for unary operators)"); }
2765+
{
2766+
mmerror(PARSE_ERROR, ET_ERROR, "parser: argument type missing (use NONE for unary operators)");
2767+
$$ = make_str("none");
2768+
}
27482769
| Typename ',' Typename
27492770
{ $$ = cat_str(3, $1, make_str(","), $3); }
27502771
| NONE ',' Typename /* left unary */
@@ -3665,7 +3686,10 @@ select_limit: LIMIT select_limit_value OFFSET select_offset_value
36653686
| OFFSET select_offset_value
36663687
{ $$ = cat2_str(make_str("offset"), $2); }
36673688
| LIMIT select_limit_value ',' select_offset_value
3668-
{ mmerror(PARSE_ERROR, ET_WARNING, "No longer supported LIMIT #,# syntax passed to backend."); }
3689+
{
3690+
mmerror(PARSE_ERROR, ET_WARNING, "No longer supported LIMIT #,# syntax passed to backend.");
3691+
$$ = cat_str(4, make_str("limit"), $2, make_str(","), $4);
3692+
}
36693693
;
36703694

36713695
opt_select_limit: select_limit { $$ = $1; }
@@ -3757,25 +3781,28 @@ from_list: from_list ',' table_ref { $$ = cat_str(3, $1, make_str(","), $3); }
37573781
table_ref: relation_expr
37583782
{ $$ = $1; }
37593783
| relation_expr alias_clause
3760-
{ $$= cat2_str($1, $2); }
3784+
{ $$ = cat2_str($1, $2); }
37613785
| func_table
37623786
{ $$ = $1; }
37633787
| func_table alias_clause
3764-
{ $$= cat2_str($1, $2); }
3788+
{ $$ = cat2_str($1, $2); }
37653789
| func_table AS '(' TableFuncElementList ')'
3766-
{ $$=cat_str(4, $1, make_str("as ("), $4, make_str(")")); }
3790+
{ $$ = cat_str(4, $1, make_str("as ("), $4, make_str(")")); }
37673791
| func_table AS ColId '(' TableFuncElementList ')'
3768-
{ $$=cat_str(6, $1, make_str("as"), $3, make_str("("), $5, make_str(")"));}
3792+
{ $$ = cat_str(6, $1, make_str("as"), $3, make_str("("), $5, make_str(")"));}
37693793
| func_table ColId '(' TableFuncElementList ')'
3770-
{ $$=cat_str(5, $1, $2, make_str("("), $4, make_str(")")); }
3794+
{ $$ = cat_str(5, $1, $2, make_str("("), $4, make_str(")")); }
37713795
| select_with_parens
3772-
{mmerror(PARSE_ERROR, ET_ERROR, "sub-SELECT in FROM must have an alias");}
3796+
{
3797+
mmerror(PARSE_ERROR, ET_ERROR, "sub-SELECT in FROM must have an alias");
3798+
$$ = $1;
3799+
}
37733800
| select_with_parens alias_clause
3774-
{ $$=cat2_str($1, $2); }
3801+
{ $$ = cat2_str($1, $2); }
37753802
| joined_table
37763803
{ $$ = $1; }
37773804
| '(' joined_table ')' alias_clause
3778-
{ $$=cat_str(4, make_str("("), $2, make_str(")"), $4); }
3805+
{ $$ = cat_str(4, make_str("("), $2, make_str(")"), $4); }
37793806
;
37803807

37813808
/*
@@ -5159,6 +5186,7 @@ char_variable: cvariable
51595186
break;
51605187
default:
51615188
mmerror(PARSE_ERROR, ET_ERROR, "invalid datatype");
5189+
$$ = $1;
51625190
break;
51635191
}
51645192
}

0 commit comments

Comments
 (0)