[postgis-tickets] r16870 - Fix undefined behaviour in ptarray_clone_deep
Raul
raul at rmr.ninja
Tue Oct 2 04:41:43 PDT 2018
Author: algunenano
Date: 2018-10-02 04:41:43 -0700 (Tue, 02 Oct 2018)
New Revision: 16870
Modified:
branches/2.5/NEWS
branches/2.5/liblwgeom/ptarray.c
Log:
Fix undefined behaviour in ptarray_clone_deep
References #4191
Modified: branches/2.5/NEWS
===================================================================
--- branches/2.5/NEWS 2018-10-02 11:40:51 UTC (rev 16869)
+++ branches/2.5/NEWS 2018-10-02 11:41:43 UTC (rev 16870)
@@ -5,7 +5,9 @@
- #4183, St_AsMVTGeom: Drop invalid geometries after simplification (Raúl Marín)
- #4188, Avoid division by zero in kmeans (Raúl Marín)
- #4189, Fix undefined behaviour in SADFWrite (Raúl Marín)
+ - #4191, Fix undefined behaviour in ptarray_clone_deep (Raúl Marín)
+
PostGIS 2.5.0
2018/09/23
WARNING: If compiling with PostgreSQL+JIT, LLVM >= 6 is required
Modified: branches/2.5/liblwgeom/ptarray.c
===================================================================
--- branches/2.5/liblwgeom/ptarray.c 2018-10-02 11:40:51 UTC (rev 16869)
+++ branches/2.5/liblwgeom/ptarray.c 2018-10-02 11:41:43 UTC (rev 16870)
@@ -628,7 +628,6 @@
ptarray_clone_deep(const POINTARRAY *in)
{
POINTARRAY *out = lwalloc(sizeof(POINTARRAY));
- size_t size;
LWDEBUG(3, "ptarray_clone_deep called.");
@@ -638,9 +637,17 @@
FLAGS_SET_READONLY(out->flags, 0);
- size = in->npoints * ptarray_point_size(in);
- out->serialized_pointlist = lwalloc(size);
- memcpy(out->serialized_pointlist, in->serialized_pointlist, size);
+ if (!in->npoints)
+ {
+ // Avoid calling lwalloc of 0 bytes
+ out->serialized_pointlist = NULL;
+ }
+ else
+ {
+ size_t size = in->npoints * ptarray_point_size(in);
+ out->serialized_pointlist = lwalloc(size);
+ memcpy(out->serialized_pointlist, in->serialized_pointlist, size);
+ }
return out;
}
More information about the postgis-tickets
mailing list