]> granicus.if.org Git - postgis/commitdiff
Fix crasher in raster when fed an empty raster (note was tempted to change the def...
authorRegina Obe <lr@pcorp.us>
Wed, 28 Mar 2018 08:53:19 +0000 (08:53 +0000)
committerRegina Obe <lr@pcorp.us>
Wed, 28 Mar 2018 08:53:19 +0000 (08:53 +0000)
References #3055 for PostGIS 2.4.4,
also minor doc fix references #2925 for PostGIS 2.4.4

git-svn-id: http://svn.osgeo.org/postgis/branches/2.4@16504 b70326c6-7e19-0410-871a-916f4a2858ee

NEWS
doc/reference_raster.xml
raster/rt_pg/rtpg_mapalgebra.c
raster/test/regress/tickets.sql
raster/test/regress/tickets_expected

diff --git a/NEWS b/NEWS
index 9fc10a74159c053ccd8f9e31ce111078cac76033..8c1fc9e3e9b829a22b19b1fc6c446774c54d6347 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,7 +1,9 @@
 PostGIS 2.4.4dev
-2018/MM/DD
+2018/04/DD
 
  * Bug fixes *
+  - #3055, [raster] ST_Clip() on a raster without band crashes the server
+          (Regina Obe)
   - #3942, geojson: Do not include private header for json-c >= 0.13
            (Björn Esser)
   - #3952, ST_Transform fails in parallel mode (Paul Ramsey)
index ca715dc751357604604972737fdec04ae242a864..3298e2e55b66a732efe7e0a028f16a023f3d062c 100644 (file)
@@ -1817,7 +1817,7 @@ FROM ST_BandMetadata(
                                                  </informalfigure></para>
                 <programlisting>
 -- this will output a black circle taking up 150 x 150 pixels --
-SELECT ST_AsPNG(ST_AsRaster(ST_Buffer(ST_Point(1,5),10),150, 150, '2BUI'));</programlisting>
+SELECT ST_AsPNG(ST_AsRaster(ST_Buffer(ST_Point(1,5),10),150, 150));</programlisting>
 
  <para><informalfigure>
                                                        <mediaobject>
index 6629c9466ef7feb1be4b7aa256f724a1b4c34dcf..6232c748ea4cf5ff640d4985111b3fe0220e5d55 100644 (file)
@@ -3022,8 +3022,8 @@ Datum RASTER_clip(PG_FUNCTION_ARGS)
        }
 
        /* raster is empty, return empty raster */
-       if (rt_raster_is_empty(arg->raster)) {
-               elog(NOTICE, "Input raster is empty. Returning empty raster");
+       if (rt_raster_is_empty(arg->raster) || rt_raster_get_num_bands(arg->raster) == 0) {
+               elog(NOTICE, "Input raster is empty or has no bands. Returning empty raster");
 
                rtpg_clip_arg_destroy(arg);
                PG_FREE_IF_COPY(pgraster, 0);
index cba9b72aac0b0a48ed8c70ef489a7920738615d7..4a62cb3b320f2b514c196c2c2e035675a1d1b916 100644 (file)
@@ -112,3 +112,8 @@ DROP TABLE IF EXISTS test_raster_scale_big;
 DROP TABLE IF EXISTS test_raster_scale_small;
 
 SET client_min_messages TO DEFAULT;
+
+/******************************************************************************
+ #3055 ST_Clip() on a raster without band crashes the server
+******************************************************************************/
+SELECT ST_SummaryStats(ST_Clip(ST_MakeEmptyRaster(42, 42, 0, 0, 1.0, 1.0, 0, 0, 4269), ST_MakeEnvelope(0, 0, 20, 20, 4269)));
index f758838d7670dbac131ee0b477018cfee8203bf5..de6373b22e03f438c4be8be96375a906f1118b68 100644 (file)
@@ -12,3 +12,5 @@ ERROR:  new row for relation "test_raster_scale_big" violates check constraint "
 t
 test_raster_scale_small|rast||1
 ERROR:  new row for relation "test_raster_scale_small" violates check constraint "enforce_scaley_rast"
+NOTICE:  Input raster is empty or has no bands. Returning empty raster
+NOTICE:  Invalid band index (must use 1-based). Returning NULL