]> git.openstreetmap.org Git - nominatim.git/commitdiff
restrict range for interpolated housenumbers
authorSarah Hoffmann <lonvia@denofr.de>
Tue, 5 Sep 2023 09:41:41 +0000 (11:41 +0200)
committerSarah Hoffmann <lonvia@denofr.de>
Tue, 5 Sep 2023 09:41:41 +0000 (11:41 +0200)
Interpolations are only supported up to 2^32 by the database.
Limit to 8 digits, which is still more than should be needed.

nominatim/api/search/db_searches.py
test/python/api/search/test_search_places.py

index e9df3beeb8f12e0951e8196b5f19e31341a4b984..1f7eb0093a6bc8245bbe3b422084e4bcd25d73fd 100644 (file)
@@ -685,7 +685,8 @@ class PlaceSearch(AbstractSearch):
             if self.qualifiers:
                 place_sql = place_sql.where(self.qualifiers.sql_restrict(thnr))
 
-            numerals = [int(n) for n in self.housenumbers.values if n.isdigit()]
+            numerals = [int(n) for n in self.housenumbers.values
+                        if n.isdigit() and len(n) < 8]
             interpol_sql: SaColumn
             tiger_sql: SaColumn
             if numerals and \
index df369b81e1d36f77c65d0c66ea0fb9182a5051e3..8d17ec2da25b7a3d9448b42faa5daa24fcd74ad3 100644 (file)
@@ -267,6 +267,26 @@ class TestStreetWithHousenumber:
         assert all(geom.name.lower() in r.geometry for r in results)
 
 
+def test_very_large_housenumber(apiobj):
+    apiobj.add_placex(place_id=93, class_='place', type='house',
+                      parent_place_id=2000,
+                      housenumber='2467463524544', country_code='pt')
+    apiobj.add_placex(place_id=2000, class_='highway', type='residential',
+                      rank_search=26, rank_address=26,
+                      country_code='pt')
+    apiobj.add_search_name(2000, names=[1,2],
+                           search_rank=26, address_rank=26,
+                           country_code='pt')
+
+    lookup = FieldLookup('name_vector', [1, 2], 'lookup_all')
+
+    results = run_search(apiobj, 0.1, [lookup], [], hnrs=['2467463524544'],
+                         details=SearchDetails())
+
+    assert results
+    assert [r.place_id for r in results] == [93, 2000]
+
+
 class TestInterpolations:
 
     @pytest.fixture(autouse=True)