From: Tom Lane Date: Mon, 14 Apr 2014 15:10:32 +0000 (-0400) Subject: Fix bogus handling of bad strategy number in GIST consistent() functions. X-Git-Tag: REL9_4_BETA1~182 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=4dfb065b3ab662dcc96d07ee7fc9dadf6975a0cb;p=postgresql Fix bogus handling of bad strategy number in GIST consistent() functions. Make sure we throw an error instead of silently doing the wrong thing when fed a strategy number we don't recognize. Also, in the places that did already throw an error, spell the error message in a way more consistent with our message style guidelines. Per report from Paul Jones. Although this is a bug, it won't occur unless a superuser tries to do something he shouldn't, so it doesn't seem worth back-patching. --- diff --git a/src/backend/access/gist/gistproc.c b/src/backend/access/gist/gistproc.c index 6e1e204769..db0bec6e3e 100644 --- a/src/backend/access/gist/gistproc.c +++ b/src/backend/access/gist/gistproc.c @@ -926,7 +926,9 @@ gist_box_leaf_consistent(BOX *key, BOX *query, StrategyNumber strategy) PointerGetDatum(query))); break; default: - retval = FALSE; + elog(ERROR, "unrecognized strategy number: %d", strategy); + retval = false; /* keep compiler quiet */ + break; } return retval; } @@ -1015,7 +1017,9 @@ rtree_internal_consistent(BOX *key, BOX *query, StrategyNumber strategy) PointerGetDatum(query))); break; default: - retval = FALSE; + elog(ERROR, "unrecognized strategy number: %d", strategy); + retval = false; /* keep compiler quiet */ + break; } return retval; } @@ -1306,7 +1310,9 @@ gist_point_consistent_internal(StrategyNumber strategy, } break; default: - elog(ERROR, "unknown strategy number: %d", strategy); + elog(ERROR, "unrecognized strategy number: %d", strategy); + result = false; /* keep compiler quiet */ + break; } return result; @@ -1422,8 +1428,9 @@ gist_point_consistent(PG_FUNCTION_ARGS) } break; default: - elog(ERROR, "unknown strategy number: %d", strategy); + elog(ERROR, "unrecognized strategy number: %d", strategy); result = false; /* keep compiler quiet */ + break; } PG_RETURN_BOOL(result); @@ -1445,8 +1452,9 @@ gist_point_distance(PG_FUNCTION_ARGS) PG_GETARG_POINT_P(1)); break; default: - elog(ERROR, "unknown strategy number: %d", strategy); + elog(ERROR, "unrecognized strategy number: %d", strategy); distance = 0.0; /* keep compiler quiet */ + break; } PG_RETURN_FLOAT8(distance);