From 238a9c4db8c071a428de874c8b3db6dd16c5c0eb Mon Sep 17 00:00:00 2001 From: mpeltriaux Date: Thu, 17 Sep 2026 16:28:39 +0200 Subject: [PATCH] # OGR failure * catches error in case of malicious input geometry * updates translations --- konova/utils/geometry/geometry_validator.py | 22 ++++++++++++++++++++ locale/de/LC_MESSAGES/django.mo | Bin 46556 -> 46706 bytes locale/de/LC_MESSAGES/django.po | 10 ++++++--- 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/konova/utils/geometry/geometry_validator.py b/konova/utils/geometry/geometry_validator.py index a5af9f24..8cb4e084 100644 --- a/konova/utils/geometry/geometry_validator.py +++ b/konova/utils/geometry/geometry_validator.py @@ -180,6 +180,24 @@ class GeometryProcessor: is_area_valid = geom.area > 1 # > 1m² (SRID:25832) return is_area_valid + @staticmethod + def is_valid_geometry(geom: gdal.OGRGeometry) -> bool: + """ Checks whether the geometry is technically valid + + Args: + geom (OGRGeometry): The geom + + Returns: + + """ + try: + # Check geometry validity by triggering some low cost processing like centroid calculation + geom.centroid + geom.boundary + return True + except gdal.GDALException as e: + return False + class GeoJsonValidator: """ GeoJson Validator validates geojson (e.g. from API or form input) @@ -305,6 +323,10 @@ class GeoJsonValidator: g = gdal.OGRGeometry(feature_geom, srs=self._srs) if g.empty: continue + + if not GeometryProcessor.is_valid_geometry(g): + raise AssertionError(_("This feature holds malicious parts and can not be processed!")) + g = GeometryProcessor.cast_to_rlp_srid(g) if not GeometryProcessor.is_valid_25832(g): raise AssertionError(_("This feature does not hold valid EPSG:25832 coordinates:\n {}".format(g.geojson))) diff --git a/locale/de/LC_MESSAGES/django.mo b/locale/de/LC_MESSAGES/django.mo index 5dfbc3058f50cb7ad6960942c952f0ae2b21d21c..390b7e266c6d5e4d59fb1504aa574504366c3092 100644 GIT binary patch delta 9683 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\n" "Language-Team: LANGUAGE \n" @@ -2012,7 +2012,11 @@ msgstr "In Zwischenablage kopiert" msgid "Search" msgstr "Suchen" -#: konova/utils/geometry/geometry_validator.py:311 +#: konova/utils/geometry/geometry_validator.py:328 +msgid "This feature holds malicious parts and can not be processed!" +msgstr "Teile der Geometrie sind ungültig und können nicht verarbeitet werden!" + +#: konova/utils/geometry/geometry_validator.py:332 msgid "" "This feature does not hold valid EPSG:25832 coordinates:\n" " {}" @@ -2020,7 +2024,7 @@ msgstr "" "Dieses Feature enthält keine validen EPSG:25832 Koordinaten:\n" " {}" -#: konova/utils/geometry/geometry_validator.py:319 +#: konova/utils/geometry/geometry_validator.py:340 msgid "Only surfaces allowed. Points or lines must be buffered." msgstr "" "Nur Flächen erlaubt. Punkte oder Linien müssen zu Flächen gepuffert werden." -- 2.52.0