From fcc0ed19ce7e6790bbd471f450322cef84989474 Mon Sep 17 00:00:00 2001 From: Sasha Mitchell Date: Sat, 26 Sep 2026 03:40:08 +0700 Subject: [PATCH] Reject SEPA purpose codes that sit between Z and a. The purpose pattern used A-z, so a bracket was accepted and written into the QR payload. Letters and digits still pass. --- lib/girocode/code.rb | 2 +- test/girocode_test.rb | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/girocode/code.rb b/lib/girocode/code.rb index b2aae82..c42cdfb 100644 --- a/lib/girocode/code.rb +++ b/lib/girocode/code.rb @@ -59,7 +59,7 @@ def amount=(value) def purpose=(value) unless value.nil? - raise ArgumentError, "invalid purpose #{value.inspect}" unless value.match?(/\A[A-z0-9]{0,4}\z/) + raise ArgumentError, "invalid purpose #{value.inspect}" unless value.match?(/\A[A-Za-z0-9]{0,4}\z/) end @purpose = value end diff --git a/test/girocode_test.rb b/test/girocode_test.rb index 166c990..9967e8e 100644 --- a/test/girocode_test.rb +++ b/test/girocode_test.rb @@ -30,4 +30,10 @@ def test_only_one_reference end end + def test_purpose_rejects_gap_characters + assert_raises ArgumentError do + Girocode.new(bic: 'BHBLDEHHXXX', name: 'Franz Mustermann', iban: 'DE71110220330123456789', currency: :eur, amount: 12.3, purpose: '[') + end + end + end