GNU bug report logs -
#56255
28.1.50; sxhash-equal does not change when object is modified
Previous Next
Reported by: Ihor Radchenko <yantar92 <at> gmail.com>
Date: Mon, 27 Jun 2022 12:27:02 UTC
Severity: normal
Found in version 28.1.50
Fixed in version 29.1
Done: Lars Ingebrigtsen <larsi <at> gnus.org>
Bug is archived. No further changes may be made.
Full log
Message #37 received at 56255 <at> debbugs.gnu.org (full text, mbox):
Lars Ingebrigtsen <larsi <at> gnus.org> writes:
> Ihor Radchenko <yantar92 <at> gmail.com> writes:
>
>> The original idea was to detect changed objects in most generic way, as
>> a part of persistent storage library. Oh well.
>
> We could make SXHASH_MAX_DEPTH into a defvar -- or pass the depth in to
> `sxhash-equal'. However, the hash it's computing is geared towards hash
> tables, so collisions are OK -- it's not a cryptographic hash, so I'm
> not sure it would fit your use case anyway. I.e., our sxhash_combine is
> very simple.
Well. In my scenario, the object structure creates so bad case that
_all_ the hashes for _all possible_ avl-tree structures collide
(actually, I use plists containing avl-tree structures).
As for the hash tables and collisions. Are you sure that collisions are
OK? Consider the following example:
(setq a (avl-tree--create #'org-element--cache-compare))
(avl-tree-enter a '(headline (:begin 2)))
(setq tbl (make-hash-table :test #'equal))
(puthash a 'value tbl)
(gethash a tbl)
(plist-put (nth 1 (avl-tree-first a)) :begin 10)
(gethash a tbl) ;; the value does not change!
Best,
Ihor
This bug report was last modified 3 years and 58 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.