diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/filelock.c | 8 | ||||
-rw-r--r-- | src/lread.c | 13 |
2 files changed, 16 insertions, 5 deletions
diff --git a/src/filelock.c b/src/filelock.c index d4dfc1dd007..a4b742abb5d 100644 --- a/src/filelock.c +++ b/src/filelock.c @@ -565,10 +565,10 @@ current_lock_owner (lock_info_type *owner, char *lfname) break; case '\357': - /* Treat "\357\200\242" (U+F022 in UTF-8) as if it were ":". - This works around a bug in Samba, which can mistakenly - transliterate ':' to U+F022 in symlink contents (Bug#24656). - See <https://bugzilla.redhat.com/show_bug.cgi?id=1271407#c8>. */ + /* Treat "\357\200\242" (U+F022 in UTF-8) as if it were ":" (Bug#24656). + This works around a bug in the Linux CIFS kernel client, which can + mistakenly transliterate ':' to U+F022 in symlink contents. + See <https://bugzilla.redhat.com/show_bug.cgi?id=1384153>. */ if (! (boot[0] == '\200' && boot[1] == '\242')) return -1; boot += 2; diff --git a/src/lread.c b/src/lread.c index 10eec3b1be0..58d518ce40b 100644 --- a/src/lread.c +++ b/src/lread.c @@ -2917,7 +2917,18 @@ read1 (Lisp_Object readcharfun, int *pch, bool first_in_list) if (c == '=') { /* Make a placeholder for #n# to use temporarily. */ - AUTO_CONS (placeholder, Qnil, Qnil); + /* Note: We used to use AUTO_CONS to allocate + placeholder, but that is a bad idea, since it + will place a stack-allocated cons cell into + the list in read_objects, which is a + staticpro'd global variable, and thus each of + its elements is marked during each GC. A + stack-allocated object will become garbled + when its stack slot goes out of scope, and + some other function reuses it for entirely + different purposes, which will cause crashes + in GC. */ + Lisp_Object placeholder = Fcons (Qnil, Qnil); Lisp_Object cell = Fcons (make_number (n), placeholder); read_objects = Fcons (cell, read_objects); |