From: Sandro Santilli Date: Thu, 29 Mar 2012 12:37:42 +0000 (+0000) Subject: Fix crash on NULL item in ND index (#1734) X-Git-Tag: 2.0.0rc2~10 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=504c4ac404007c1cd9fd7a276c90209296161374;p=postgis Fix crash on NULL item in ND index (#1734) Add regression testing for the case git-svn-id: http://svn.osgeo.org/postgis/trunk@9577 b70326c6-7e19-0410-871a-916f4a2858ee --- diff --git a/postgis/gserialized_gist_nd.c b/postgis/gserialized_gist_nd.c index fccfe705f..8d4e4a89d 100644 --- a/postgis/gserialized_gist_nd.c +++ b/postgis/gserialized_gist_nd.c @@ -212,17 +212,17 @@ static float gidx_union_volume(GIDX *a, GIDX *b) return 0.0; } - if ( gidx_is_unknown(a) && gidx_is_unknown(b) ) - { - return 0.0; - } - if ( a == NULL || gidx_is_unknown(a) ) return gidx_volume(b); if ( b == NULL || gidx_is_unknown(b) ) return gidx_volume(a); + if ( gidx_is_unknown(a) && gidx_is_unknown(b) ) + { + return 0.0; + } + /* Ensure 'a' has the most dimensions. */ gidx_dimensionality_check(&a, &b); diff --git a/regress/tickets.sql b/regress/tickets.sql index fffa36524..c90756fba 100644 --- a/regress/tickets.sql +++ b/regress/tickets.sql @@ -644,5 +644,15 @@ SELECT '#1697.2', count(*) FROM eg WHERE gm && 'POINT(0 0)'::geometry; SELECT '#1697.3', count(*) FROM eg WHERE gm ~= 'POINT EMPTY'::geometry; DROP TABLE eg; +-- #1734 -- +create table eg (g geography); +create index egi on eg using gist (g); +INSERT INTO eg(g) VALUES (NULL); +INSERT INTO eg (g) VALUES ('POINT(0 0)'::geography); +INSERT INTO eg (g) select 'POINT(0 0)'::geography + FROM generate_series(1,1024); +SELECT '#1734.1', count(*) FROM eg; +DROP table eg; + -- Clean up DELETE FROM spatial_ref_sys; diff --git a/regress/tickets_expected b/regress/tickets_expected index 07ee581ba..637517860 100644 --- a/regress/tickets_expected +++ b/regress/tickets_expected @@ -213,3 +213,4 @@ NOTICE: SRID value -1 converted to the officially unknown SRID value 0 #1697.1|0 #1697.2|0 #1697.3|1024 +#1734.1|1026