Skip to content

Commit dfd1bb2

Browse files
committed
Wrap JWKSet parsing errors in InvalidJWKValue
Moved the dictionary iteration and key creation logic inside the try-except block. This ensures that any exceptions raised during the instantiation of individual JWK objects or validation checks are properly caught and safely re- raised as an InvalidJWKValue exception, rather than leaking unhandled errors. Assisted-by: Gemini <gemini@google.com> Signed-off-by: Simo Sorce <simo@redhat.com>
1 parent db03d4c commit dfd1bb2

2 files changed

Lines changed: 24 additions & 10 deletions

File tree

jwcrypto/jwk.py

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1356,19 +1356,18 @@ def import_keyset(self, keyset):
13561356
"""
13571357
try:
13581358
jwkset = json_decode(keyset)
1359+
if 'keys' not in jwkset:
1360+
raise ValueError("'keys' not in set")
1361+
1362+
for k, v in jwkset.items():
1363+
if k == 'keys':
1364+
for jwk in v:
1365+
self['keys'].add(JWK(**jwk))
1366+
else:
1367+
self[k] = v
13591368
except Exception as e: # pylint: disable=broad-except
13601369
raise InvalidJWKValue from e
13611370

1362-
if 'keys' not in jwkset:
1363-
raise InvalidJWKValue
1364-
1365-
for k, v in jwkset.items():
1366-
if k == 'keys':
1367-
for jwk in v:
1368-
self['keys'].add(JWK(**jwk))
1369-
else:
1370-
self[k] = v
1371-
13721371
@classmethod
13731372
def from_json(cls, keyset):
13741373
"""Creates a RFC 7517 key set from the standard JSON format.

jwcrypto/tests.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -562,6 +562,21 @@ def test_jwkset_issue_208(self):
562562
self.assertEqual(len(ks['keys']), 2)
563563
self.assertEqual(len(ks['keys']), len(ks2['keys']))
564564

565+
def test_import_keyset_invalid(self):
566+
ks = jwk.JWKSet()
567+
invalid_inputs = [
568+
'',
569+
'null',
570+
'[]',
571+
'{}',
572+
'{"keys": 1}',
573+
'{"keys": [1]}',
574+
'{"keys": [{"kty": "invalid"}]}'
575+
]
576+
for inp in invalid_inputs:
577+
with self.assertRaises(jwk.InvalidJWKValue):
578+
ks.import_keyset(inp)
579+
565580
def test_thumbprint(self):
566581
for i in range(0, len(PublicKeys['keys'])):
567582
k = jwk.JWK(**PublicKeys['keys'][i])

0 commit comments

Comments
 (0)