diff --git a/src/backend/utils/adt/geo_ops.c b/src/backend/utils/adt/geo_ops.c index fdbeaadbb55..55fce191fb0 100644 --- a/src/backend/utils/adt/geo_ops.c +++ b/src/backend/utils/adt/geo_ops.c @@ -2913,7 +2913,7 @@ close_ps(PG_FUNCTION_ARGS) } /* - * at this point the "normal" from point will hit lseg. The closet point + * at this point the "normal" from point will hit lseg. The closest point * will be somewhere on the lseg */ tmp = line_construct_pm(pt, invm); @@ -2922,7 +2922,15 @@ close_ps(PG_FUNCTION_ARGS) tmp->A, tmp->B, tmp->C, tmp->m); #endif result = interpt_sl(lseg, tmp); - Assert(result != NULL); + + /* + * ordinarily we should always find an intersection point, but that could + * fail in the presence of NaN coordinates, and perhaps even from simple + * roundoff issues. Return a SQL NULL if so. + */ + if (result == NULL) + PG_RETURN_NULL(); + #ifdef GEODEBUG printf("close_ps- result.x %f result.y %f\n", result->x, result->y); #endif