summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/filelock.c8
-rw-r--r--src/lread.c13
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);