From 446767075057043738dde926e46ed84b046093bc Mon Sep 17 00:00:00 2001 From: gottostartsomewhere Date: Wed, 8 Jul 2026 17:54:24 +0530 Subject: [PATCH] Fix KeyError in verify_payment_link_signature on incomplete payload verify_payment_link_signature guarded only razorpay_payment_id, payment_link_reference_id and payment_link_status, but also reads payment_link_id and razorpay_signature. A payload missing either of the latter raised KeyError instead of the documented graceful False return. Guard all required keys so incomplete payloads return False. Add a regression test. --- razorpay/utility/utility.py | 5 ++++- tests/test_client_utility.py | 15 +++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/razorpay/utility/utility.py b/razorpay/utility/utility.py index 1272372d..fab9e643 100644 --- a/razorpay/utility/utility.py +++ b/razorpay/utility/utility.py @@ -23,7 +23,10 @@ def verify_payment_signature(self, parameters): def verify_payment_link_signature(self, parameters): - if 'razorpay_payment_id' in parameters.keys() and 'payment_link_reference_id' in parameters.keys() and 'payment_link_status' in parameters.keys(): + required_keys = ('razorpay_payment_id', 'payment_link_id', + 'payment_link_reference_id', 'payment_link_status', + 'razorpay_signature') + if all(key in parameters for key in required_keys): payment_id = str(parameters['razorpay_payment_id']) payment_link_id = str(parameters['payment_link_id']) payment_link_reference_id = str(parameters['payment_link_reference_id']) diff --git a/tests/test_client_utility.py b/tests/test_client_utility.py index 2d424658..9d9e9e1a 100644 --- a/tests/test_client_utility.py +++ b/tests/test_client_utility.py @@ -50,6 +50,21 @@ def test_verify_payment_link_signature(self): self.client.utility.verify_payment_link_signature(parameters), True) + @responses.activate + def test_verify_payment_link_signature_missing_key(self): + # A payload missing a required key (here payment_link_id) must return + # False, not raise KeyError. + parameters = {} + parameters['razorpay_payment_id'] = 'pay_IH3d0ara9bSsjQ' + parameters['payment_link_reference_id'] = 'TSsd1989' + parameters['payment_link_status'] = 'paid' + parameters['razorpay_signature'] = 'deadbeef' + parameters['secret'] = 'EnLs21M47BllR3X8PSFtjtbd' + + self.assertEqual( + self.client.utility.verify_payment_link_signature(parameters), + False) + @responses.activate def test_verify_payment_signature_with_exception(self): parameters = {}