Opened 5 years ago

Closed 5 years ago

#3146 closed defect (fixed)

ST_EffectiveArea possible 32-bit crasher

Reported by: robe Owned by: pramsey
Priority: blocker Milestone: PostGIS 2.2.0
Component: postgis Version: master
Keywords: Cc:


Doing garden crash test on my 32-bit PostgreSQL 9.4 EDB, this crashes

SELECT ST_SetEffectiveArea(foo1.the_geom, 20.1, 5) As result
							FROM ((SELECT ST_GeomFromText('LINESTRING(1 2, 1 2)',4326) As the_geom
			UNION ALL SELECT ST_MakeLine('SRID=4326;POINT(1 2)'::geometry, 'SRID=4326;POINT EMPTY'::geometry) As the_geom ) ) As foo1 LIMIT 3;

It might just be a 32-bit crasher on my 9.5 instance works okay, but I haven't tested against 64-bit 9.4 EDB install to be sure it's not a VC/mingw64 thing.

My 64-bit install is also a bit older. This I tested under:

POSTGIS="2.2.0dev r13601" GEOS="3.5.0dev-CAPI-1.9.0 r4054" PROJ="Rel. 4.8.0, 6 March 2012" GDAL="GDAL 1.11.1, released 2014/09/24" LIBXML="2.7.8" LIBJSON="0.12" RASTER;PostgreSQL 9.4.2, compiled by Visual C++ build 1800, 32-bit

Change History (8)

comment:1 Changed 5 years ago by robe

Just tested on my 64-bit VC EDB 9.4, and that one doesn't crash so this may be another 32-bit specific issue.

comment:2 Changed 5 years ago by robe

Hold on this could be a false alarm. Just realized it doesn't crash on my mingw32 only version, but my mingw32 is 9.4rc1 (and my vc EDB 32-bit is 9.4.2), so could be just incompatibility here with running a compiled 9.4rc1 on a 9.4.2.

comment:3 Changed 5 years ago by nicklas

If it crashes on ST_SetEffectiveArea it would be very interesting to know if it also crashes on ST_SimplifyVW. It is the same function but with different defaults.

comment:4 Changed 5 years ago by robe

Hmm well still crashes and yes crashes on ST_SimplifyVW.

SELECT ST_SimplifyVW(foo1.the_geom, 20.1) As result
							FROM ((SELECT ST_GeomFromText('LINESTRING(1 2, 1 2)',4326) As the_geom
			UNION ALL SELECT ST_MakeLine('SRID=4326;POINT(1 2)'::geometry, 'SRID=4326;POINT EMPTY'::geometry) As the_geom ) ) As foo1 LIMIT 3;

This is one of those annoying bugs I can only exercise under VC++ build and only on the 32-bit one at that.

Here is the backtrace for the ST_SimplifyVW call crash:

(gdb) bt
#0  0x006da63b in postgres!pfree ()
#1  0x708bfd03 in destroy_effectivearea (ea=0x310eca8) at effectivearea.c:30
#2  0x708c02de in ptarray_set_effective_area (inpts=<optimized out>,
    avoid_collaps=avoid_collaps@entry=2, set_area=set_area@entry=0,
    trshld=trshld@entry=20.100000000000001) at effectivearea.c:431
#3  0x708c0616 in lwline_set_effective_area (trshld=20.100000000000001,
    set_area=0, iline=0x310ec30) at effectivearea.c:452
#4  lwgeom_set_effective_area (igeom=igeom@entry=0x310ec30,
    set_area=set_area@entry=0, trshld=trshld@entry=20.100000000000001)
    at effectivearea.c:533
#5  0x70883db9 in LWGEOM_SetEffectiveArea (fcinfo=0x310cfbc)
    at lwgeom_functions_analytic.c:97
#6  0x004e70e4 in postgres!ExecProject ()
#7  0x004e93c3 in postgres!ExecProject ()
#8  0x004e588f in postgres!ExecProject ()
#9  0x004f8420 in postgres!ExecResult ()
#10 0x004e33e8 in postgres!ExecProcNode ()
#11 0x004f4661 in postgres!ExecLimit ()
#12 0x004e3596 in postgres!ExecProcNode ()
#13 0x004e28ce in postgres!EvalPlanQualEnd ()
#14 0x004e0bf6 in standard_ExecutorRun ()
#15 0x005f4bbb in postgres!PortalRunFetch ()
#16 0x005f4542 in postgres!PortalRun ()
#17 0x005f27f9 in postgres!get_stats_option_name ()
#18 0x005f0f4a in postgres!PostgresMain ()
#19 0x005a33a0 in postgres!ShmemBackendArrayAllocation ()
#20 0x00000001 in ?? ()
#21 0x00eae008 in ?? ()
#22 0x005a08c1 in postgres!SubPostmasterMain ()
#23 0x00510610 in postgres!main ()

comment:5 Changed 5 years ago by robe

Well teh good news is I can only trigger the issue with a 1-pointed linestring. The 2-pointed duplicated point one doesn't error out. Here is the offending query in it's simplest form:

SELECT ST_SimplifyVW('0102000020E610000001000000000000000000F03F0000000000000040'::geometry,20.1);

comment:6 Changed 5 years ago by nicklas

I'm on it. I did also realize I haven't guarded from 1-point linestrings. So I am just running the checks and I will commit.

It is a little surprising that it works on other platforms. But 1-point linestrings certainly makes things unstable in there.

points have to turn in the door, and so should 1-point linestrings, or even 2-point linestrings since they cannot be simplified.

Last edited 5 years ago by nicklas (previous) (diff)

comment:7 Changed 5 years ago by nicklas

Ok I think r13606 should help.

Please test.

comment:8 Changed 5 years ago by robe

Resolution: fixed
Status: newclosed

yap that fixed it. No more garden crashers for my 32-bit.

Note: See TracTickets for help on using tickets.