Changeset: adc2a2a9b7bc for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/adc2a2a9b7bc
Modified Files:
sql/server/rel_unnest.c
sql/test/BugTracker-2026/Tests/7862-rel_has_freevar-crash.test
sql/test/BugTracker-2026/Tests/All
Branch: Dec2025
Log Message:
Fix for #7862. Add a NULL check for input arg rel.
diffs (40 lines):
diff --git a/sql/server/rel_unnest.c b/sql/server/rel_unnest.c
--- a/sql/server/rel_unnest.c
+++ b/sql/server/rel_unnest.c
@@ -163,9 +163,11 @@ rel_has_freevar(mvc *sql, sql_rel *rel)
(void) sql_error(sql, 10, SQLSTATE(42000) "Query too complex:
running out of stack space");
return 0;
}
-
- if (rel && is_independent(rel->used))
+ if (!rel)
return 0;
+ if (is_independent(rel->used))
+ return 0;
+
int res = 0;
if (is_basetable(rel->op)) {
res = 0;
diff --git a/sql/test/BugTracker-2026/Tests/7862-rel_has_freevar-crash.test
b/sql/test/BugTracker-2026/Tests/7862-rel_has_freevar-crash.test
--- a/sql/test/BugTracker-2026/Tests/7862-rel_has_freevar-crash.test
+++ b/sql/test/BugTracker-2026/Tests/7862-rel_has_freevar-crash.test
@@ -14,9 +14,8 @@ NULL
0
-- Segmentation fault. in rel_has_freevar (sql=0x7f0a081844e0, rel=0x0) at
sql/server/rel_unnest.c:170 if (is_basetable(rel->op)) { -- cause of seg
fault: rel=0x0
-query II rowsort
+statement error 42000!Query too complex: running out of stack space
SELECT x , CASE WHEN x > 12 THEN 1 ELSE 0 END AS x
FROM ( SELECT 10 AS x UNION SELECT 11 AS x GROUP BY CUBE ( x , x ) UNION
SELECT 12 AS x UNION SELECT 13 AS x )
WHERE x IN ( WITH RECURSIVE x ( row_number ) AS ( SELECT 1 UNION SELECT x + 1
FROM x WHERE x < 20 ) SELECT x AS x FROM x WHERE x NOT IN ( 8 , 12 , CAST(
0.000000 AS FLOAT ) , 24 , 32 ) OR x = 512 GROUP BY x HAVING NOT x < ANY ( CASE
WHEN NULLIF ( ( WITH RECURSIVE x ( x ) AS ( SELECT 1 UNION SELECT x + 1 FROM (
WITH RECURSIVE x ( x ) AS ( SELECT CASE WHEN x < - 13 * - ( 0 ) + 39 * - (
SELECT '1' ) + 0.100000 + 0.100000 THEN CAST( '-0' AS DOUBLE ) END UNION SELECT
ROUND ( 70 , 2 ) FROM x ) SELECT * FROM ( SELECT 'b' AS x FROM x ) WHERE x NOT
IN ( 'a' ) ) WHERE x < 8 ) SELECT - COUNT ( * ) FROM x AS x WHERE NOT ( - x )
BETWEEN - x AND NULL ) , NULL ) IS NULL THEN 1 ELSE 0 END AND 6 IN ( SELECT MAX
( x ) , x < -1234567 , MAX ( x ) , MIN ( x ) , MAX ( x ) , MIN ( x ) ORDER BY 1
, 2 LIMIT 0 OFFSET 0 ) ) )
-----
diff --git a/sql/test/BugTracker-2026/Tests/All
b/sql/test/BugTracker-2026/Tests/All
--- a/sql/test/BugTracker-2026/Tests/All
+++ b/sql/test/BugTracker-2026/Tests/All
@@ -59,4 +59,4 @@ KNOWNFAIL?7774-insert-into-renamed-table
7855-ntile
7856-crash-exp-match
7857-rollup-crash
-KNOWNFAIL?7862-rel_has_freevar-crash
+7862-rel_has_freevar-crash
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]