diff options
| author | Paul Eggert | 2020-02-16 11:36:19 -0800 |
|---|---|---|
| committer | Paul Eggert | 2020-02-16 11:37:07 -0800 |
| commit | 556cc727e5076d590f8286406e4f46cff3cee41e (patch) | |
| tree | d23565cc5fc31bd98d2d782dcbc6cc10d5a29d9c | |
| parent | df9da9445ed665080fbcfdd25f7a544f1403cf8e (diff) | |
| download | emacs-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.c | 11 |
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 | ||