]> granicus.if.org Git - postgis/commitdiff
Avoid unaligned memory access in BOX2D_out
authorRaúl Marín Rodríguez <rmrodriguez@carto.com>
Thu, 22 Nov 2018 16:16:23 +0000 (16:16 +0000)
committerRaúl Marín Rodríguez <rmrodriguez@carto.com>
Thu, 22 Nov 2018 16:16:23 +0000 (16:16 +0000)
References #4244

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

NEWS
postgis/lwgeom_box.c

diff --git a/NEWS b/NEWS
index 383c5b7785d5a2b2eb0df3d08d87c2b0925795aa..9aa58fa97ebeba248c048e62d1f0a43c61e64b90 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -5,6 +5,7 @@ XXXX/XX/XX
   - #4247, Avoid undefined behaviour in next_float functions (Raúl Marín)
   - #4249, Fix undefined behaviour in raster intersection (Raúl Marín)
   - #4246, Fix undefined behaviour in ST_3DDistance (Raúl Marín)
+  - #4244, Avoid unaligned memory access in BOX2D_out (Raúl Marín)
 
 PostGIS 2.5.1
 2018/11/18
index 92a6635248e4e4d1c4b5edcafedd5fc41c2c4b9e..3c0b99ed2e7abd0c339c7f290be34fa02a69e10f 100644 (file)
@@ -95,13 +95,21 @@ Datum BOX2D_in(PG_FUNCTION_ARGS)
 PG_FUNCTION_INFO_V1(BOX2D_out);
 Datum BOX2D_out(PG_FUNCTION_ARGS)
 {
-       GBOX *box = (GBOX *) PG_GETARG_POINTER(0);
        char tmp[500]; /* big enough */
        char *result;
        int size;
 
-       size  = sprintf(tmp,"BOX(%.15g %.15g,%.15g %.15g)",
-                       box->xmin, box->ymin, box->xmax, box->ymax);
+       GBOX *box = (GBOX *)PG_GETARG_POINTER(0);
+       /* Avoid unaligned access to the gbox struct */
+       GBOX box_aligned;
+       memcpy(&box_aligned, box, sizeof(GBOX));
+
+       size = sprintf(tmp,
+                      "BOX(%.15g %.15g,%.15g %.15g)",
+                      box_aligned.xmin,
+                      box_aligned.ymin,
+                      box_aligned.xmax,
+                      box_aligned.ymax);
 
        result= palloc(size+1); /* +1= null term */
        memcpy(result,tmp,size+1);