[Freeipa-devel] [PATCH 79] Ticket #3008: DN objects hash differently depending on case

Alexander Bokovoy abokovoy at redhat.com
Wed Aug 22 14:23:59 UTC 2012


On Mon, 20 Aug 2012, Alexander Bokovoy wrote:
>On Fri, 17 Aug 2012, John Dennis wrote:
>>Because the attrs & values in DN's, RDN's and AVA's are comparison case-
>>insensitive the hash value between two objects which compare as equal but
>>differ in case must also yield the same hash value. This is critical when
>>these objects are used as a dict key or in a set because dicts and sets
>>use the object's __hash__ value in conjunction with the objects __eq__
>>method to lookup the object.
>>
>>The defect is the DN, RDN & AVA objects computed their hash from the case-
>>preserving string representation thus two otherwise equal objects
>>incorrectly yielded different hash values.
>>
>>The problem manifests itself when one of these objects is used as a key in
>>a dict, for example a dn.
>>
>>dn1 = DN(('cn', 'Bob'))
>>dn2 = DN(('cn', 'bob'))
>>
>>dn1 == dn2 --> True
>>
>>hash(dn1) == hash(dn2) --> False
>>
>>d = {}
>>
>>d[dn1] = x
>>d[dn2] = y
>>
>>len(d) --> 2
>>
>>The patch fixes the above by lower casing the string representation of
>>the object prior to computing it's hash.
>>
>>The patch also corrects a spelling mistake and a bogus return value in
>>ldapupdate.py which happened to be discovered while researching this
>>bug.
>ACK.
>
>With this patch I am no longer getting constraint violation errors.
Pushed to master and 3.0



-- 
/ Alexander Bokovoy




More information about the Freeipa-devel mailing list