From d7d694f1e4643fc781ef6e55e57f549ce5a4eb9a Mon Sep 17 00:00:00 2001 From: Mahaboobunnisa123 Date: Mon, 9 Mar 2026 20:16:48 +0530 Subject: [PATCH] Fix 500 error with malformed POM Signed-off-by: Mahaboobunnisa123 --- minecode/collectors/maven.py | 17 ++++++++--- minecode/tests/collectors/test_issue_197.py | 32 +++++++++++++++++++++ 2 files changed, 45 insertions(+), 4 deletions(-) create mode 100644 minecode/tests/collectors/test_issue_197.py diff --git a/minecode/collectors/maven.py b/minecode/collectors/maven.py index 19ba6069..b4db0ec4 100644 --- a/minecode/collectors/maven.py +++ b/minecode/collectors/maven.py @@ -163,7 +163,11 @@ def fetch_parent(pom_text, base_url=MAVEN_BASE_URL): """Return the parent pom text of `pom_text`, or None if `pom_text` has no parent.""" if not pom_text: return - pom = get_maven_pom(text=pom_text) + try: + pom = get_maven_pom(text=pom_text) + except Exception as e: + logger.error(f"Failed to parse POM text: {e}") + return if pom.parent and pom.parent.group_id and pom.parent.artifact_id and pom.parent.version.version: parent_namespace = pom.parent.group_id parent_name = pom.parent.artifact_id @@ -289,14 +293,19 @@ def map_maven_package(package_url, package_content, pipelines, priority=0, reind error += msg + "\n" logger.error(msg) return db_package, error - - package = _parse( + try: + package = _parse( "maven_pom", "maven", "Java", text=pom_text, base_url=base_url, - ) + ) + except Exception as e: + msg = f"Failed to parse POM for {package_url}: {e}" + error += msg + "\n" + logger.error(msg) + return db_package, error ancestor_pom_texts = get_ancestry(pom_text=pom_text, base_url=base_url) package = merge_ancestors(ancestor_pom_texts=ancestor_pom_texts, package=package) diff --git a/minecode/tests/collectors/test_issue_197.py b/minecode/tests/collectors/test_issue_197.py new file mode 100644 index 00000000..2a913c3f --- /dev/null +++ b/minecode/tests/collectors/test_issue_197.py @@ -0,0 +1,32 @@ +from unittest.mock import patch +from django.test import TestCase +from minecode.collectors.maven import fetch_parent, map_maven_package +from packageurl import PackageURL + +class TestIssue197MavenMalformedPom(TestCase): + def test_fetch_parent_with_malformed_pom_does_not_crash(self): + with patch( + "minecode.collectors.maven.get_maven_pom", + side_effect=Exception("VersionRangeParseError: Unbounded range: [9"), + ): + result = fetch_parent(pom_text="") + self.assertIsNone(result) + def test_map_maven_package_with_malformed_pom_does_not_crash(self): + with patch( + "minecode.collectors.maven.get_pom_text", + return_value="", + ): + with patch( + "minecode.collectors.maven._parse", + side_effect=Exception("VersionRangeParseError: Unbounded range: [9"), + ): + purl = PackageURL.from_string( + "pkg:maven/commons-codec/commons-codec@1.16.0" + ) + db_package, error = map_maven_package( + package_url=purl, + package_content="binary", + pipelines=[], + ) + self.assertIsNone(db_package) + self.assertIn("Failed to parse POM", error)