]> granicus.if.org Git - postgis/commitdiff
Fix memory error in ST_Split (short allocation)
authorSandro Santilli <strk@keybit.net>
Thu, 13 May 2010 08:39:49 +0000 (08:39 +0000)
committerSandro Santilli <strk@keybit.net>
Thu, 13 May 2010 08:39:49 +0000 (08:39 +0000)
git-svn-id: http://svn.osgeo.org/postgis/trunk@5618 b70326c6-7e19-0410-871a-916f4a2858ee

postgis/lwgeom_geos_split.c

index 9365585aec66773471413290c4c61279588c1e91..99bcf33dd9789f879fbfdb64bcc5c050201ce4ee 100644 (file)
@@ -382,7 +382,7 @@ lwcollection_split(LWCOLLECTION* lwcoll_in, LWGEOM* blade_in)
        size_t i,j;
 
        split_vector_capacity=8;
-       split_vector = lwalloc(split_vector_capacity);
+       split_vector = lwalloc(split_vector_capacity * sizeof(LWGEOM*));
        if ( ! split_vector ) {
                lwerror("Out of virtual memory");
                return NULL;
@@ -402,8 +402,10 @@ lwcollection_split(LWCOLLECTION* lwcoll_in, LWGEOM* blade_in)
                /* Reallocate split_vector if needed */
                if ( split_vector_size + col->ngeoms > split_vector_capacity )
                {
-                       split_vector_capacity *= 2;
-                       split_vector = lwrealloc(split_vector, split_vector_capacity);
+                       /* NOTE: we could be smarter on reallocations here */
+                       split_vector_capacity += col->ngeoms;
+                       split_vector = lwrealloc(split_vector,
+                               split_vector_capacity * sizeof(LWGEOM*));
                        if ( ! split_vector ) {
                                lwerror("Out of virtual memory");
                                return NULL;