diff --git a/src/backend/utils/adt/geo_ops.c b/src/backend/utils/adt/geo_ops.c
index f3b6a389ff407d3a742a4344648dc50796ee753e..8a99df1356cfdbce44840d8b59052ffd1f0872f9 100644
--- a/src/backend/utils/adt/geo_ops.c
+++ b/src/backend/utils/adt/geo_ops.c
@@ -1072,13 +1072,20 @@ line_construct_pm(Point *pt, double m)
 {
 	LINE	   *result = (LINE *) palloc(sizeof(LINE));
 
-	/* use "mx - y + yinter = 0" */
-	result->A = m;
-	result->B = -1.0;
 	if (m == DBL_MAX)
-		result->C = pt->y;
+	{
+		/* vertical - use "x = C" */
+		result->A = -1;
+		result->B = 0;
+		result->C = pt->x;
+	}
 	else
+	{
+		/* use "mx - y + yinter = 0" */
+		result->A = m;
+		result->B = -1.0;
 		result->C = pt->y - m * pt->x;
+	}
 
 #ifdef NOT_USED
 	result->m = m;