Skip to content

Commit 2efada2

Browse files
Merge pull request #126 from saquibsaifee/fix/validate-trailing-operators
Fix validate() to report errors for invalid SPDX expressions with tra…
2 parents 3a77924 + 7808d71 commit 2efada2

2 files changed

Lines changed: 47 additions & 0 deletions

File tree

CHANGELOG.rst

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,14 @@
11
Changelog
22
=========
33

4+
v30.4.5 - 2026-03-03
5+
--------------------
6+
7+
This is a minor bugfix release:
8+
9+
- Fix validate() to properly report errors for invalid expressions with
10+
trailing operators (e.g. "GPL-3.0-or-later AND").
11+
412
v30.4.4 - 2025-01-10
513
--------------------
614

tests/test_license_expression.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2537,6 +2537,45 @@ def test_validation_invalid_license_exception_strict_false(self):
25372537
assert result.errors == []
25382538
assert result.invalid_symbols == []
25392539

2540+
def test_validate_trailing_and_operator(self):
2541+
result = self.licensing.validate("GPL-2.0-or-later AND")
2542+
assert result.original_expression == "GPL-2.0-or-later AND"
2543+
assert not result.normalized_expression
2544+
assert len(result.errors) == 1
2545+
assert "AND" in result.errors[0]
2546+
2547+
def test_validate_trailing_or_operator(self):
2548+
result = self.licensing.validate("GPL-2.0-or-later OR")
2549+
assert result.original_expression == "GPL-2.0-or-later OR"
2550+
assert not result.normalized_expression
2551+
assert len(result.errors) == 1
2552+
assert "OR" in result.errors[0]
2553+
2554+
def test_validate_trailing_with_operator(self):
2555+
result = self.licensing.validate("GPL-2.0-or-later WITH")
2556+
assert result.original_expression == "GPL-2.0-or-later WITH"
2557+
assert not result.normalized_expression
2558+
assert len(result.errors) == 1
2559+
2560+
def test_validate_multiple_trailing_operators(self):
2561+
result = self.licensing.validate("GPL-2.0-or-later AND MIT OR")
2562+
assert result.original_expression == "GPL-2.0-or-later AND MIT OR"
2563+
assert not result.normalized_expression
2564+
assert len(result.errors) == 1
2565+
assert "OR" in result.errors[0]
2566+
2567+
def test_validate_leading_operator(self):
2568+
result = self.licensing.validate("AND MIT")
2569+
assert result.original_expression == "AND MIT"
2570+
assert not result.normalized_expression
2571+
assert len(result.errors) == 1
2572+
2573+
def test_validate_only_operators(self):
2574+
result = self.licensing.validate("AND OR")
2575+
assert result.original_expression == "AND OR"
2576+
assert not result.normalized_expression
2577+
assert len(result.errors) == 1
2578+
25402579

25412580
class UtilTest(TestCase):
25422581
test_data_dir = join(dirname(__file__), "data")

0 commit comments

Comments
 (0)