]> granicus.if.org Git - postgis/commitdiff
Fix crash on null input to ST_Union(raster)
authorSandro Santilli <strk@keybit.net>
Wed, 27 Aug 2014 08:53:30 +0000 (08:53 +0000)
committerSandro Santilli <strk@keybit.net>
Wed, 27 Aug 2014 08:53:30 +0000 (08:53 +0000)
git-svn-id: http://svn.osgeo.org/postgis/trunk@12925 b70326c6-7e19-0410-871a-916f4a2858ee

raster/rt_pg/rtpg_mapalgebra.c
raster/test/regress/rt_union.sql
raster/test/regress/rt_union_expected

index b486e1986bb4e29cc86db218c4327a2f81fb5e5c..54a9cf62dd73ee4fc952c3c997036eed2d8e4647 100644 (file)
@@ -2876,6 +2876,8 @@ Datum RASTER_union_finalfn(PG_FUNCTION_ARGS)
        pfree(itrset);
        rtpg_union_arg_destroy(iwr);
 
+       if (!_rtn) PG_RETURN_NULL();
+
        pgraster = rt_raster_serialize(_rtn);
        rt_raster_destroy(_rtn);
 
index 7a2e6a22f2e2ac7d31471e85aca8b142652d3ecf..8b47e877f663e15dcee750910c657f7fe5fddc27 100644 (file)
@@ -424,6 +424,7 @@ INSERT INTO raster_union_in
        SELECT 61, ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 1, -1, 0, 0, 0), 1, '8BUI', 2, 0) AS rast UNION ALL
        SELECT 62, ST_AddBand(ST_MakeEmptyRaster(2, 2, 2, 0, 1, -1, 0, 0, 0), 1, '8BUI', 3, 0) AS rast UNION ALL
        SELECT 63, ST_AddBand(ST_MakeEmptyRaster(2, 2, -1, -3, 1, -1, 0, 0, 0), 1, '8BUI', 4, 0) AS rast UNION ALL
+       SELECT  0, NULL::raster UNION ALL -- toxic element embedded
        SELECT 64, ST_AddBand(ST_MakeEmptyRaster(2, 2, -2, 4, 1, -1, 0, 0, 0), 1, '8BUI', 5, 0) AS rast
 ;
 
@@ -452,3 +453,7 @@ ORDER BY uniontype, y, x;
 
 DROP TABLE IF EXISTS raster_union_in;
 DROP TABLE IF EXISTS raster_union_out;
+
+-- Some toxic input
+SELECT 'none', ST_Union(r) from ( select null::raster r where false ) f;
+SELECT 'null', ST_Union(null::raster);
index 4b72d924248802444be2dacf076c5ff786c00704..ac32ef69d49133dab9814a1bf36209cc15cf348a 100644 (file)
@@ -628,3 +628,5 @@ LAST|5|8|1
 LAST|6|8|1
 LAST|2|9|4
 LAST|3|9|4
+none|
+null|