From e719ea5a42c2b4ec4bec2668056708e910f85e05 Mon Sep 17 00:00:00 2001 From: iverase Date: Mon, 14 Oct 2019 20:27:16 +0200 Subject: [PATCH] LUCENE-8928: Check that point is inside an edge bounding box when checking if the point belongs to the edge --- .../core/src/java/org/apache/lucene/geo/EdgeTree.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/lucene/core/src/java/org/apache/lucene/geo/EdgeTree.java b/lucene/core/src/java/org/apache/lucene/geo/EdgeTree.java index 9b830228b10..e97bd7743ec 100644 --- a/lucene/core/src/java/org/apache/lucene/geo/EdgeTree.java +++ b/lucene/core/src/java/org/apache/lucene/geo/EdgeTree.java @@ -119,7 +119,15 @@ public class EdgeTree { /** returns true if the provided x, y point lies on the line */ protected boolean isPointOnLine(double x, double y) { if (y <= max) { - if (orient(x1, y1, x2, y2, x, y) == 0) { + double a1x = x1; + double a1y = y1; + double b1x = x2; + double b1y = y2; + boolean outside = (a1y < y && b1y < y) || + (a1y > y && b1y > y) || + (a1x < x && b1x < x) || + (a1x > x && b1x > x); + if (outside == false && orient(a1x, a1y, b1x, b1y, x, y) == 0) { return true; } if (left != null && left.isPointOnLine(x, y)) {