[postgis-tickets] r17056 - Avoid unaligned memory access in BOX2D_out

Raul raul at rmr.ninja
Thu Nov 22 08:14:23 PST 2018


Author: algunenano
Date: 2018-11-22 08:14:23 -0800 (Thu, 22 Nov 2018)
New Revision: 17056

Modified:
   branches/2.3/NEWS
   branches/2.3/postgis/lwgeom_box.c
Log:
Avoid unaligned memory access in BOX2D_out 

References #4244



Modified: branches/2.3/NEWS
===================================================================
--- branches/2.3/NEWS	2018-11-22 15:24:41 UTC (rev 17055)
+++ branches/2.3/NEWS	2018-11-22 16:14:23 UTC (rev 17056)
@@ -19,6 +19,7 @@
   - #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.3.7
 2018/04/06

Modified: branches/2.3/postgis/lwgeom_box.c
===================================================================
--- branches/2.3/postgis/lwgeom_box.c	2018-11-22 15:24:41 UTC (rev 17055)
+++ branches/2.3/postgis/lwgeom_box.c	2018-11-22 16:14:23 UTC (rev 17056)
@@ -95,14 +95,22 @@
 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);
 	result[size] = '\0';



More information about the postgis-tickets mailing list