[postgis-devel] crash (somehow) resolved (was: different EWKB representations on different machines?)

strk at refractions.net strk at refractions.net
Fri Nov 11 03:03:51 PST 2005


I think I've found the problem.
It's in lwpoint.c around line 77:

        else if (TYPE_NDIMS(point->type) == 2)
                getPoint2d_p(point->point, 0, (POINT2D *)loc);
        else if (TYPE_NDIMS(point->type) == 4)
                getPoint4d_p(point->point, 0, (POINT4D *)loc);

The POINT4D and POINT2D casts do not take memory alignment into
account. Checking around I found that this construct is used
also in line and polygon serializers.

I'll provide you with a patch for testing, meanwhile it would
be useful if you provide a set of tests with all geometry types
and all dimensions with and w/out a bounding box. (well, should
add this to the regress test actually).

--strk;

On Fri, Nov 11, 2005 at 12:40:57AM +0100, Alex Mayrhofer wrote:
> strk at refractions.net wrote:
> >Yes, printf debugging is the way to go.
> >It's lwnotice() in this case, same signature as printf().
> 
> Ok, i've tracked it down to:
> 
> Program received signal SIGBUS, Bus error.
> getPoint4d_p (pa=0x3af658, n=0, point=0x3af515) at lwgeom_api.c:445
> 445             memset(point, 0, sizeof(POINT3DZ));
> (gdb) bt
> #0  getPoint4d_p (pa=0x3af658, n=0, point=0x3af515) at lwgeom_api.c:445
> #1  0x7107db94 in lwpoint_serialize_buf (point=0x3af678, buf=0x3af510 "q",
>     retsize=0xefffe7f4) at lwpoint.c:85
> #2  0x7107da08 in lwpoint_serialize (point=0x3af678) at lwpoint.c:21
> #3  0x7108e75c in LWGEOM_pointn_linestring (fcinfo=0xefffe8e8)
>     at lwgeom_ogc.c:546
> 
> [...]
> 
> i've tried to figure out what goes wrong in the memset() call - i didn't 
> find an abvious problem (besides that the 4D code uses "sizeof(POINT3DM)", 
> which is probably 8 bytes too few).
> 
> However, when i desperately tried to _remove_ the memset line from the code 
> (and the similar line around lwgeom_api.c:496) my query suddenly works (i 
> was inspired to do that because the 2D code around lwgeom_api.c:557 does 
> _not_ initialize the point before copying it...)
> 
> So, the problem is solved for me - anybody sparc-savvy here who could 
> enlighten me?
> 
> cheers
> 
> alex
> _______________________________________________
> postgis-devel mailing list
> postgis-devel at postgis.refractions.net
> http://postgis.refractions.net/mailman/listinfo/postgis-devel

-- 

 /"\    ASCII Ribbon Campaign
 \ /    Respect for open standards
  X     No HTML/RTF in email
 / \    No M$ Word docs in email




More information about the postgis-devel mailing list