Opened 10 years ago
Closed 10 years ago
#2956 closed defect (fixed)
ST_AsTWKB(NULL) crashes the backend
Reported by: | strk | Owned by: | nicklas |
---|---|---|---|
Priority: | blocker | Milestone: | PostGIS 2.2.0 |
Component: | postgis | Version: | master |
Keywords: | Cc: |
Description
select st_astwkb(null,0); -- boom
Change History (6)
comment:1 by , 10 years ago
comment:3 by , 10 years ago
Right behavior is return null. Here's a quick patch (but needs regress test added):
diff --git a/postgis/lwgeom_inout.c b/postgis/lwgeom_inout.c index 6bf84f9..d924f3a 100644 --- a/postgis/lwgeom_inout.c +++ b/postgis/lwgeom_inout.c @@ -406,7 +406,7 @@ Datum WKBFromLWGEOM(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(TWKBFromLWGEOM); Datum TWKBFromLWGEOM(PG_FUNCTION_ARGS) { - GSERIALIZED *geom = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *geom; LWGEOM *lwgeom; uint8_t *twkb; size_t twkb_size; @@ -414,6 +414,10 @@ Datum TWKBFromLWGEOM(PG_FUNCTION_ARGS) bytea *result; int64_t id; int prec; + + if ( PG_ARGISNULL(0) ) PG_RETURN_NULL(); + + geom = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); /* If user specified precision, respect it */ if ( (PG_NARGS()>1) && (!PG_ARGISNULL(1)) )
comment:5 by , 10 years ago
Actually I just removed strict a few days ago because I used null as default value for id:
CREATE OR REPLACE FUNCTION ST_AsTWKB(geometry,int4,int8 default null,boolean default false, boolean default false)
Maybe that is a bad solution. The reason is that it is not supposed to be any default value. If id is not declared the twkb-geometry is created without any space for id. Since id can be 0 that is not possible to use as default. Any other ideas to do it the cleanest way? Or is it the best way to go to catch the null value in the C-function like in strks patch?
That's not good.
I think you are right that I haven't protected against that.
Will try to look at it this evening.