[postgis-users] 1.3.3 Pre-Release Notice

Mark Cave-Ayland mark.cave-ayland at siriusit.co.uk
Wed Apr 9 02:05:35 PDT 2008


On Tuesday 08 April 2008 22:37:34 Paul Ramsey wrote:
> OK, they should be gone now... btw what compiler are you using, I
> didn't get those...

Just standard GCC that comes with Debian testing:

$ gcc -v
Using built-in specs.
Target: x86_64-linux-gnu
Configured 
with: ../src/configure -v --enable-languages=c,c++,fortran,objc,obj-c++,treelang --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --with-gxx-include-dir=/usr/include/c++/4.2 --program-suffix=-4.2 --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --enable-mpfr --disable-libmudflap --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.2.3 (Debian 4.2.3-2)

Taking a look at the committed fix, I see that you have the following:

if ( sr_id && strcmp(sr_id,"-1") ) printf("SRID=%s;", sr_id);

I have a very strong feeling that evaluation order in C is unspecified, rather 
than being from left to right; so for example the compiler could decide to 
generate code that evaluates the strcmp() first, in which case it would 
segfault on a NULL :( I think you would need to re-write something like this:

if (sr_id)
	if (strcmp(sr_id,"-1") ) printf("SRID=%s;", sr_id);

(looks even closer...)

In fact, why is sr_id stored as a string anyway? We should make sr_id an 
integer with a default value of -1, and then use sscanf() within the switch() 
statement of pgis_getopt() to read its value.


ATB,

Mark.

-- 
Mark Cave-Ayland
Sirius Corporation - The Open Source Experts
http://www.siriusit.co.uk
T: +44 870 608 0063



More information about the postgis-users mailing list