Opened 9 years ago

Closed 9 years ago

#3002 closed defect (invalid)

ST_GeomFromGeoJSON() Causes postgres to crash

Reported by: vannut Owned by: pramsey
Priority: medium Milestone: PostGIS 2.1.6
Component: postgis Version: 2.1.x
Keywords: Cc:

Description

When executing a query which uses 'ST_GeomFromGeoJSON()' the backend crashes and you need to reconnect.

This simple query crashes: SELECT ST_GeomFromGeoJSON('{"type":"Point","coordinates":[-48.23456,20.12345]}'));

When using gdb to track whats going on, I can see this in the output:

Program received signal SIGSEGV, Segmentation fault.
0xb70dda59 in _IO_vfprintf_internal (s=0xbfde7150, format=<optimized out>,  ap=0xbfde7298 "") at vfprintf.c:1630
1630    vfprintf.c: No such file or directory.

I'm using postgis 2.1.4 r12966 and a postgresql 9.3.5 server.

Change History (13)

comment:1 by pramsey, 9 years ago

Hm, I'm not able to replicate, you example works fine for me. What platform are you on?

comment:2 by vannut, 9 years ago

The server itself is a VPS running Ubuntu 12.04.

comment:3 by darkblueb, 9 years ago

addr_test_94=# SELECT ST_GeomFromGeoJSON('{"type":"Point","coordinates":[-48.23456,20.12345]}');
             st_geomfromgeojson             
--------------------------------------------
 01010000009279E40F061E48C0F2B0506B9A1F3440
(1 row)

addr_test_94=# select version();
                                                version                                                
-------------------------------------------------------------------------------------------------------
 PostgreSQL 9.4rc1 on x86_64-unknown-linux-gnu, compiled by gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2, 64-bit
(1 row)

addr_test_94=# select postgis_full_version();

POSTGIS="2.2.0dev r13129" GEOS="3.4.3dev-CAPI-1.8.3 r4029" PROJ="Rel. 4.8.0, 6 March 2012" GDAL="GDAL 1.10.1, released 2013/08/26" LIBXML="2.9.1" LIBJSON="0.11.99" RASTER
(1 row)

comment:4 by vannut, 9 years ago

The postgis version-string is different; it appears the libjson is not present.

POSTGIS="2.1.4 r12966" GEOS="3.3.3-CAPI-1.7.4" PROJ="Rel. 4.7.1, 23 September 2009" GDAL="GDAL 1.9.0, released 2011/12/29" LIBXML="2.7.8" LIBJSON="UNKNOWN" RASTER

How can I resolve that?

comment:5 by robe, 9 years ago

Mine works fine too running on windows 9.3 64-bit.

SELECT ST_GeomFromGeoJSON('{"type":"Point","coordinates":[-48.23456,20.12345]}');
             st_geomfromgeojson
--------------------------------------------
 01010000009279E40F061E48C0F2B0506B9A1F3440
(1 row)

{{{SELECT postgis_full_version(); POSTGIS="2.1.4 r12966" GEOS="3.4.2-CAPI-1.8.2 r3924" PROJ="Rel. 4.8.0, 6 March 2012" GDAL="GDAL 1.11.0, released 2014/04/16" LIBXML="2.7.8" LIBJSON="UNKNOWN" TOPOLOGY RASTER

SELECT version();

version


PostgreSQL 9.3.5, compiled by Visual C++ build 1600, 64-bit

}}}

Regarding the LIBJSON version not showing, PostGIS only shows the JSON version if you are running LIBJSON 0.11 and above as I recall so the fact it doesn't show is not an issue. You probably do want to check what version yours was compiled with.

Actually I'm not even sure if we show the libjson version in PostGIS 2.1 for any version of LIBJSON (I think we do, but mine doesn't but my json version might be too low). Brian is cheating cause he's running a development version of both PostgreSQL and PostGIS :)

comment:6 by pramsey, 9 years ago

I've just experienced a crash on centos 6, with json-c 0.11. My local json-c on OSX is listed as 0.12 with a date appended to it, and darkblueb is listed as 0.11.99, which indicates to me that both of us are running pre-release tips of json rather than a real release. Not sure why robe would get a free pass from this bug, but maybe her version is actually to *old* to show the issue up. I'm going to try and get a from-source build failing (my test was on the rpm packages for opengeo suite) so I can find this.

comment:7 by vannut, 9 years ago

I installed json-c via apt-get. If I look at the version installed, it is:

Version: 0.11-4+deb.sury.org~precise+1

Strange that this happens.

comment:8 by pramsey, 9 years ago

The root our *our* crash problem was library version mismatch. The build system was using 0.9, but I was deploying on a system with 0.11. The RPM packages only declared their requirement as "json-c" without any version specificity. Apparently json is not forward binary compatible, so packagers beware: you have to peg your json-c version in your package dependency declarations.

comment:9 by robe, 9 years ago

My version is a) too old maybe. I should test on my 2.2 install which I do have json 0.12 installed

Most likely though, I never have more than one JSON in my environment path ao I don't think I would ever run into the issue. Also my json is compiled in statically into the postgis dll.

It hought 0.9 wass under a different name thought no — issn't that why wwe do that json-c dance when going from 0.9 to 0.10 or was I mistaken.

comment:10 by ruio, 9 years ago

I have the same problem with: Postgis 2.1.4 Postgresql 9.3.5 CentOS 6.5 x64

The package json-c is installed but I have a segmentation fault error when I execute the example query

comment:11 by pramsey, 9 years ago

As noted, this seems to be more of an environment problem than a PostGIS problem. If you build against an old json-c and run against a new one (or vice versa) things will go awry.

comment:12 by pramsey, 9 years ago

Milestone: PostGIS 2.1.5PostGIS 2.1.6

comment:13 by pramsey, 9 years ago

Resolution: invalid
Status: newclosed

Closing because this is a build problem.

Note: See TracTickets for help on using tickets.