aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog3
-rw-r--r--src/alloc.c13
2 files changed, 9 insertions, 7 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index e2b1b294968..c747a325139 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -2,6 +2,9 @@
2 2
3 * alloc.c (Fmake_bool_vector): Don't assume vector size fits in int. 3 * alloc.c (Fmake_bool_vector): Don't assume vector size fits in int.
4 (allocate_vectorlike): Check for ptrdiff_t overflow. 4 (allocate_vectorlike): Check for ptrdiff_t overflow.
5 (mark_vectorlike, mark_char_table, mark_object): Avoid EMACS_UINT
6 when a (possibly-narrower) signed value would do just as well.
7 We prefer using signed arithmetic, to avoid comparison confusion.
5 8
6 * alloc.c: Catch some string size overflows that we were missing. 9 * alloc.c: Catch some string size overflows that we were missing.
7 (XMALLOC_OVERRUN_CHECK_SIZE) [!XMALLOC_OVERRUN_CHECK]: Define to 0, 10 (XMALLOC_OVERRUN_CHECK_SIZE) [!XMALLOC_OVERRUN_CHECK]: Define to 0,
diff --git a/src/alloc.c b/src/alloc.c
index 2dbaef9b00b..1307ad60234 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -5265,8 +5265,8 @@ static size_t mark_object_loop_halt;
5265static void 5265static void
5266mark_vectorlike (struct Lisp_Vector *ptr) 5266mark_vectorlike (struct Lisp_Vector *ptr)
5267{ 5267{
5268 register EMACS_UINT size = ptr->header.size; 5268 EMACS_INT size = ptr->header.size;
5269 register EMACS_UINT i; 5269 EMACS_INT i;
5270 5270
5271 eassert (!VECTOR_MARKED_P (ptr)); 5271 eassert (!VECTOR_MARKED_P (ptr));
5272 VECTOR_MARK (ptr); /* Else mark it */ 5272 VECTOR_MARK (ptr); /* Else mark it */
@@ -5288,8 +5288,8 @@ mark_vectorlike (struct Lisp_Vector *ptr)
5288static void 5288static void
5289mark_char_table (struct Lisp_Vector *ptr) 5289mark_char_table (struct Lisp_Vector *ptr)
5290{ 5290{
5291 register EMACS_UINT size = ptr->header.size & PSEUDOVECTOR_SIZE_MASK; 5291 int size = ptr->header.size & PSEUDOVECTOR_SIZE_MASK;
5292 register EMACS_UINT i; 5292 int i;
5293 5293
5294 eassert (!VECTOR_MARKED_P (ptr)); 5294 eassert (!VECTOR_MARKED_P (ptr));
5295 VECTOR_MARK (ptr); 5295 VECTOR_MARK (ptr);
@@ -5417,12 +5417,11 @@ mark_object (Lisp_Object arg)
5417 recursion there. */ 5417 recursion there. */
5418 { 5418 {
5419 register struct Lisp_Vector *ptr = XVECTOR (obj); 5419 register struct Lisp_Vector *ptr = XVECTOR (obj);
5420 register EMACS_UINT size = ptr->header.size; 5420 int size = ptr->header.size & PSEUDOVECTOR_SIZE_MASK;
5421 register EMACS_UINT i; 5421 int i;
5422 5422
5423 CHECK_LIVE (live_vector_p); 5423 CHECK_LIVE (live_vector_p);
5424 VECTOR_MARK (ptr); /* Else mark it */ 5424 VECTOR_MARK (ptr); /* Else mark it */
5425 size &= PSEUDOVECTOR_SIZE_MASK;
5426 for (i = 0; i < size; i++) /* and then mark its elements */ 5425 for (i = 0; i < size; i++) /* and then mark its elements */
5427 { 5426 {
5428 if (i != COMPILED_CONSTANTS) 5427 if (i != COMPILED_CONSTANTS)