From: Robert Pluim <rpluim@gmail.com>
To: Daniel Mendler <mail@daniel-mendler.de>
Cc: Philip Kaludercic <philipk@posteo.net>,
michael_heerdegen@web.de, Gregory Heytings <gregory@heytings.org>,
monnier@iro.umontreal.ca, 62009@debbugs.gnu.org,
Eli Zaretskii <eliz@gnu.org>,
Augusto Stoffel <arstoffel@gmail.com>
Subject: bug#62009: 29.0.60; Emacs crashes on setf symbol-name
Date: Fri, 10 Mar 2023 12:30:48 +0100 [thread overview]
Message-ID: <87fsacx2qf.fsf@gmail.com> (raw)
In-Reply-To: <43460d2c-ba80-0f2f-656c-ef0aca5667b5@daniel-mendler.de> (Daniel Mendler's message of "Fri, 10 Mar 2023 12:09:59 +0100")
>>>>> On Fri, 10 Mar 2023 12:09:59 +0100, Daniel Mendler <mail@daniel-mendler.de> said:
Daniel> One could check if the string is located in read-only memory. Or one
Daniel> could add a flag bit to the string data structure (and possibly to other
Daniel> data structures too). Freezing data structures such that they become
Daniel> read-only is a generally useful feature. There won't be any performance
Daniel> overhead of the check since a branch not taken is fast thanks to the
Daniel> branch predictor.
We already have such a flag:
/* Number of characters in string; MSB is used as the mark bit. */
ptrdiff_t size;
/* If nonnegative, number of bytes in the string (which is multibyte).
If negative, the string is unibyte:
-1 for data normally allocated
-2 for data in rodata (C string constants)
-3 for data that must be immovable (used for bytecode) */
ptrdiff_t size_byte;
Try this:
diff --git a/src/lisp.h b/src/lisp.h
index 1276285e2f2..80bbb047824 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -1685,6 +1685,8 @@ SREF (Lisp_Object string, ptrdiff_t index)
INLINE void
SSET (Lisp_Object string, ptrdiff_t index, unsigned char new)
{
+ if (XSTRING (string)->u.s.size_byte == -2)
+ Fsignal (Qsetting_constant, string);
SDATA (string)[index] = new;
}
INLINE ptrdiff_t
Robert
--
next prev parent reply other threads:[~2023-03-10 11:30 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-06 19:26 bug#62009: 29.0.60; Emacs crashes on setf symbol-name Daniel Mendler
2023-03-07 4:40 ` Ruijie Yu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-03-07 15:45 ` Michael Heerdegen
2023-03-07 17:08 ` Daniel Mendler
2023-03-07 17:39 ` Eli Zaretskii
2023-03-09 21:11 ` Philip Kaludercic
2023-03-10 7:11 ` Eli Zaretskii
2023-03-10 8:45 ` Augusto Stoffel
2023-03-10 8:47 ` Augusto Stoffel
2023-03-10 11:50 ` Eli Zaretskii
2023-03-10 12:00 ` Daniel Mendler
2023-03-10 12:35 ` Eli Zaretskii
2023-03-10 12:45 ` Daniel Mendler
2023-03-10 12:57 ` Eli Zaretskii
2023-03-10 13:08 ` Daniel Mendler
2023-03-10 15:02 ` Eli Zaretskii
2023-03-11 15:16 ` Gregory Heytings
2023-03-11 15:37 ` Eli Zaretskii
2023-03-18 22:46 ` Gregory Heytings
2023-03-19 6:03 ` Eli Zaretskii
2023-03-19 21:20 ` Gregory Heytings
2023-03-10 11:49 ` Eli Zaretskii
2023-03-10 9:40 ` Gregory Heytings
2023-03-10 10:31 ` Daniel Mendler
2023-03-10 10:59 ` Gregory Heytings
2023-03-10 11:09 ` Daniel Mendler
2023-03-10 11:23 ` Augusto Stoffel
2023-03-10 12:09 ` Eli Zaretskii
2023-03-10 11:30 ` Robert Pluim [this message]
2023-03-10 11:36 ` Daniel Mendler
2023-03-10 12:13 ` Eli Zaretskii
2023-03-10 12:24 ` Daniel Mendler
2023-03-10 22:01 ` Dmitry Gutov
2023-03-10 11:57 ` Gregory Heytings
2023-03-10 12:12 ` Eli Zaretskii
2023-03-10 13:19 ` Robert Pluim
2023-03-11 7:07 ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-03-13 8:07 ` Robert Pluim
2023-03-13 8:28 ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-03-13 11:47 ` Eli Zaretskii
2023-03-13 11:50 ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-03-13 11:46 ` Eli Zaretskii
2023-03-10 11:59 ` Eli Zaretskii
2023-03-10 11:53 ` Eli Zaretskii
2023-03-10 11:59 ` Gregory Heytings
2023-03-11 7:07 ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-03-11 7:47 ` Eli Zaretskii
2023-03-10 18:56 ` Philip Kaludercic
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87fsacx2qf.fsf@gmail.com \
--to=rpluim@gmail.com \
--cc=62009@debbugs.gnu.org \
--cc=arstoffel@gmail.com \
--cc=eliz@gnu.org \
--cc=gregory@heytings.org \
--cc=mail@daniel-mendler.de \
--cc=michael_heerdegen@web.de \
--cc=monnier@iro.umontreal.ca \
--cc=philipk@posteo.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).