aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Eggert2020-02-16 11:36:19 -0800
committerPaul Eggert2020-02-16 11:37:07 -0800
commit556cc727e5076d590f8286406e4f46cff3cee41e (patch)
treed23565cc5fc31bd98d2d782dcbc6cc10d5a29d9c
parentdf9da9445ed665080fbcfdd25f7a544f1403cf8e (diff)
downloademacs-556cc727e5076d590f8286406e4f46cff3cee41e.tar.gz
emacs-556cc727e5076d590f8286406e4f46cff3cee41e.zip
Improve C-h C-h bug fix
* src/lread.c (read1): Guard against two 'struct Lisp_Vector *' pointers differing only in their most significant bit. Problem reported by Pip Cet (Bug#39529#22).
-rw-r--r--src/lread.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/lread.c b/src/lread.c
index 1613719eb1d..70984d37e18 100644
--- a/src/lread.c
+++ b/src/lread.c
@@ -2982,10 +2982,13 @@ read1 (Lisp_Object readcharfun, int *pch, bool first_in_list)
2982 as 0. This placeholder 0 would lead to accidental sharing in 2982 as 0. This placeholder 0 would lead to accidental sharing in
2983 purecopy's hash-consing, so replace it with a (hopefully) 2983 purecopy's hash-consing, so replace it with a (hopefully)
2984 unique integer placeholder, which is negative so that it is 2984 unique integer placeholder, which is negative so that it is
2985 not confused with a DOC file offset. Eventually 2985 not confused with a DOC file offset (the USE_LSB_TAG shift
2986 Snarf-documentation should replace the placeholder with the 2986 relies on the fact that VALMASK is one bit narrower than
2987 actual docstring. */ 2987 INTMASK). Eventually Snarf-documentation should replace the
2988 EMACS_UINT hash = XHASH (tmp) | (INTMASK - INTMASK / 2); 2988 placeholder with the actual docstring. */
2989 verify (INTMASK & ~VALMASK);
2990 EMACS_UINT hash = ((XHASH (tmp) >> USE_LSB_TAG)
2991 | (INTMASK - INTMASK / 2));
2989 ASET (tmp, COMPILED_DOC_STRING, make_ufixnum (hash)); 2992 ASET (tmp, COMPILED_DOC_STRING, make_ufixnum (hash));
2990 } 2993 }
2991 2994