]> git.eshelyaron.com Git - emacs.git/commit
Don't use pointer arithmetic for untagging Lisp values (bug#65491)
authorMattias Engdegård <mattiase@acm.org>
Mon, 28 Aug 2023 09:13:10 +0000 (11:13 +0200)
committerMattias Engdegård <mattiase@acm.org>
Mon, 18 Sep 2023 18:06:01 +0000 (20:06 +0200)
commit861f9cb78370e2b78f852e5ccde9b63c94486ca8
tree212ba6f4cf9d1df5ba6887a322e79cbb0d0f10cb
parent146bd41ddef21a19634e2b90db4bfb619a2091b2
Don't use pointer arithmetic for untagging Lisp values (bug#65491)

* src/lisp.h (XUNTAG):
Instead of casting a Lisp value to char * and subtracting the tag,
cast it to a suitable integral type and work on that.

This should result in identical or at least equivalent code, except
that it avoids potential problems arising from the restrictions on
pointer arithmetic in C.  In particular, a null pointer can be neither
an operand in nor the result of pointer arithmetic.

C compilers know this and would, prior to this change, optimise

  XUNTAG(obj, Lisp_Int0, mytype) != NULL

to 1.  This means, for example, that make_pointer_integer and
XFIXNUMPTR could not be entrusted with null pointers, and
next_vector in alloc.c was unsafe to use.
src/lisp.h