From 3f9c380d61f0660616a61d801e98ccf6a0ecab84 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Ra=C3=BAl=20Mar=C3=ADn=20Rodr=C3=ADguez?= Date: Thu, 22 Nov 2018 16:14:23 +0000 Subject: [PATCH] Avoid unaligned memory access in BOX2D_out References #4244 git-svn-id: http://svn.osgeo.org/postgis/branches/2.3@17056 b70326c6-7e19-0410-871a-916f4a2858ee --- NEWS | 1 + postgis/lwgeom_box.c | 14 +++++++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/NEWS b/NEWS index 7ee9be832..acc17ec6e 100644 --- a/NEWS +++ b/NEWS @@ -19,6 +19,7 @@ PostGIS 2.3.8 - #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 diff --git a/postgis/lwgeom_box.c b/postgis/lwgeom_box.c index b5a04e108..dd2b3a45f 100644 --- a/postgis/lwgeom_box.c +++ b/postgis/lwgeom_box.c @@ -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); -- 2.49.0