File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -409,6 +409,28 @@ def deserializer(data):
409409 self .assertRaises (shelve .ShelveError , shelve .Shelf , {}, ** kwargs )
410410 self .assertRaises (shelve .ShelveError , shelve .BsdDbShelf , {}, ** kwargs )
411411
412+ def test_custom_serializer_returns_wrong_type_for_key (self ):
413+ os .mkdir (self .dirname )
414+ self .addCleanup (os_helper .rmtree , self .dirname )
415+
416+ def serializer (obj , protocol ):
417+ # Return None instead of bytes, which is wrong for dbm keys
418+ return None
419+
420+ def deserializer (data ):
421+ return data .decode ("utf-8" ) if data else ""
422+
423+ for proto in range (pickle .HIGHEST_PROTOCOL + 1 ):
424+ with self .subTest (proto = proto ), shelve .open (
425+ self .fn ,
426+ protocol = proto ,
427+ serializer = serializer ,
428+ deserializer = deserializer
429+ ) as s :
430+ # Serializer returns None for the value, but dbm expects bytes
431+ with self .assertRaises ((TypeError , dbm .error )):
432+ s ["foo" ] = "bar"
433+
412434
413435class TestShelveBase :
414436 type2test = shelve .Shelf
You can’t perform that action at this time.
0 commit comments