mirror of
https://github.com/timescale/timescaledb.git
synced 2025-05-15 01:53:41 +08:00
Fix segfault in cagg_validate_query
When the input to pg_parse_query does not contain anything to parse it will return NIL. This patch adds a check for NIL to prevent the segfault that would otherwise happen later in the code. Fixes: #6625
This commit is contained in:
parent
265ec175fa
commit
7ab0566ff1
2
.unreleased/pr_6655
Normal file
2
.unreleased/pr_6655
Normal file
@ -0,0 +1,2 @@
|
||||
Fixes: #6655 Fix segfault in cagg_validate_query
|
||||
Thanks: @kav23alex for reporting a segfault in cagg_validate_query
|
@ -101,7 +101,13 @@ continuous_agg_validate_query(PG_FUNCTION_ARGS)
|
||||
|
||||
tree = pg_parse_query(sql);
|
||||
|
||||
if (list_length(tree) > 1)
|
||||
if (tree == NIL)
|
||||
{
|
||||
edata->elevel = ERROR;
|
||||
edata->sqlerrcode = ERRCODE_INTERNAL_ERROR;
|
||||
edata->message = "failed to parse query";
|
||||
}
|
||||
else if (list_length(tree) > 1)
|
||||
{
|
||||
edata->elevel = WARNING;
|
||||
edata->sqlerrcode = ERRCODE_FEATURE_NOT_SUPPORTED;
|
||||
|
@ -39,6 +39,25 @@ SELECT * FROM cagg_validate_query(NULL);
|
||||
| | | | |
|
||||
(1 row)
|
||||
|
||||
-- nothing to parse
|
||||
SELECT * FROM cagg_validate_query('');
|
||||
is_valid | error_level | error_code | error_message | error_detail | error_hint
|
||||
----------+-------------+------------+-----------------------+--------------+------------
|
||||
f | ERROR | XX000 | failed to parse query | |
|
||||
(1 row)
|
||||
|
||||
SELECT * FROM cagg_validate_query('--');
|
||||
is_valid | error_level | error_code | error_message | error_detail | error_hint
|
||||
----------+-------------+------------+-----------------------+--------------+------------
|
||||
f | ERROR | XX000 | failed to parse query | |
|
||||
(1 row)
|
||||
|
||||
SELECT * FROM cagg_validate_query(';');
|
||||
is_valid | error_level | error_code | error_message | error_detail | error_hint
|
||||
----------+-------------+------------+-----------------------+--------------+------------
|
||||
f | ERROR | XX000 | failed to parse query | |
|
||||
(1 row)
|
||||
|
||||
-- syntax error
|
||||
SELECT * FROM cagg_validate_query('blahh');
|
||||
is_valid | error_level | error_code | error_message | error_detail | error_hint
|
||||
|
@ -38,6 +38,11 @@ WITH NO DATA;
|
||||
-- return NULL
|
||||
SELECT * FROM cagg_validate_query(NULL);
|
||||
|
||||
-- nothing to parse
|
||||
SELECT * FROM cagg_validate_query('');
|
||||
SELECT * FROM cagg_validate_query('--');
|
||||
SELECT * FROM cagg_validate_query(';');
|
||||
|
||||
-- syntax error
|
||||
SELECT * FROM cagg_validate_query('blahh');
|
||||
SELECT * FROM cagg_validate_query($$ SELECT time_bucket(blahh "time") FROM metrics GROUP BY 1 $$);
|
||||
@ -96,4 +101,4 @@ SELECT * FROM cagg_validate_query($$ SELECT time_bucket('1 hour', "time", timezo
|
||||
-- caggs on caggs
|
||||
SELECT * FROM cagg_validate_query($$ SELECT time_bucket('1 day', bucket) AS bucket, sum(count) AS count FROM metrics_by_hour GROUP BY 1 $$);
|
||||
SELECT * FROM cagg_validate_query($$ SELECT time_bucket('1 month', bucket) AS bucket, sum(count) AS count FROM metrics_by_hour GROUP BY 1 $$);
|
||||
SELECT * FROM cagg_validate_query($$ SELECT time_bucket('1 year', bucket) AS bucket, sum(count) AS count FROM metrics_by_month GROUP BY 1 $$);
|
||||
SELECT * FROM cagg_validate_query($$ SELECT time_bucket('1 year', bucket) AS bucket, sum(count) AS count FROM metrics_by_month GROUP BY 1 $$);
|
||||
|
Loading…
x
Reference in New Issue
Block a user