aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPaul Eggert2019-08-14 18:24:02 -0700
committerPaul Eggert2019-08-14 18:24:33 -0700
commit2098e8afaf1c5235ba38c0156f680b8e435d9fdd (patch)
tree2cde909326273f76ae2bb58b7d7cdfa350951058 /src
parentb898528fdc69c9ac58895f8be81163dc304bd59b (diff)
downloademacs-2098e8afaf1c5235ba38c0156f680b8e435d9fdd.tar.gz
emacs-2098e8afaf1c5235ba38c0156f680b8e435d9fdd.zip
Remove INT_ADD_WRAPV bug workarounds
* src/alloc.c (free_cons): * src/casefiddle.c (do_casify_multibyte_string): * src/editfns.c (styled_format): * src/image.c (png_load_body): Remove recent workarounds for INT_ADD_WRAPV bugs since the bugs have been fixed (Bug#37006).
Diffstat (limited to 'src')
-rw-r--r--src/alloc.c5
-rw-r--r--src/casefiddle.c5
-rw-r--r--src/editfns.c8
-rw-r--r--src/image.c8
4 files changed, 8 insertions, 18 deletions
diff --git a/src/alloc.c b/src/alloc.c
index 0548a09cb8b..bb8e97f8737 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -2543,10 +2543,7 @@ free_cons (struct Lisp_Cons *ptr)
2543 ptr->u.s.u.chain = cons_free_list; 2543 ptr->u.s.u.chain = cons_free_list;
2544 ptr->u.s.car = dead_object (); 2544 ptr->u.s.car = dead_object ();
2545 cons_free_list = ptr; 2545 cons_free_list = ptr;
2546 /* Use a temporary signed variable, since otherwise INT_ADD_WRAPV 2546 if (INT_ADD_WRAPV (consing_until_gc, sizeof *ptr, &consing_until_gc))
2547 might incorrectly return non-zero. */
2548 int incr = sizeof *ptr;
2549 if (INT_ADD_WRAPV (consing_until_gc, incr, &consing_until_gc))
2550 consing_until_gc = INTMAX_MAX; 2547 consing_until_gc = INTMAX_MAX;
2551 gcstat.total_free_conses++; 2548 gcstat.total_free_conses++;
2552} 2549}
diff --git a/src/casefiddle.c b/src/casefiddle.c
index 741973e40af..ee292dda9b3 100644
--- a/src/casefiddle.c
+++ b/src/casefiddle.c
@@ -265,11 +265,8 @@ do_casify_multibyte_string (struct casing_context *ctx, Lisp_Object obj)
265 265
266 ptrdiff_t size = SCHARS (obj), n; 266 ptrdiff_t size = SCHARS (obj), n;
267 USE_SAFE_ALLOCA; 267 USE_SAFE_ALLOCA;
268 /* Use a temporary signed variable, since otherwise INT_ADD_WRAPV
269 might incorrectly return non-zero. */
270 ptrdiff_t casing_str_buf_size = sizeof (struct casing_str_buf);
271 if (INT_MULTIPLY_WRAPV (size, MAX_MULTIBYTE_LENGTH, &n) 268 if (INT_MULTIPLY_WRAPV (size, MAX_MULTIBYTE_LENGTH, &n)
272 || INT_ADD_WRAPV (n, casing_str_buf_size, &n)) 269 || INT_ADD_WRAPV (n, sizeof (struct casing_str_buf), &n))
273 n = PTRDIFF_MAX; 270 n = PTRDIFF_MAX;
274 unsigned char *dst = SAFE_ALLOCA (n); 271 unsigned char *dst = SAFE_ALLOCA (n);
275 unsigned char *dst_end = dst + n; 272 unsigned char *dst_end = dst + n;
diff --git a/src/editfns.c b/src/editfns.c
index 19bbfdcd478..1b33f397110 100644
--- a/src/editfns.c
+++ b/src/editfns.c
@@ -3158,14 +3158,12 @@ styled_format (ptrdiff_t nargs, Lisp_Object *args, bool message)
3158 /* Upper bound on number of format specs. Each uses at least 2 chars. */ 3158 /* Upper bound on number of format specs. Each uses at least 2 chars. */
3159 ptrdiff_t nspec_bound = SCHARS (args[0]) >> 1; 3159 ptrdiff_t nspec_bound = SCHARS (args[0]) >> 1;
3160 3160
3161 /* Use a temporary signed variable, since otherwise INT_ADD_WRAPV 3161 /* Allocate the info and discarded tables. */
3162 might incorrectly return non-zero. */ 3162 ptrdiff_t info_size, alloca_size;
3163 ptrdiff_t info_size = sizeof *info, alloca_size; 3163 if (INT_MULTIPLY_WRAPV (nspec_bound, sizeof *info, &info_size)
3164 if (INT_MULTIPLY_WRAPV (nspec_bound, info_size, &info_size)
3165 || INT_ADD_WRAPV (formatlen, info_size, &alloca_size) 3164 || INT_ADD_WRAPV (formatlen, info_size, &alloca_size)
3166 || SIZE_MAX < alloca_size) 3165 || SIZE_MAX < alloca_size)
3167 memory_full (SIZE_MAX); 3166 memory_full (SIZE_MAX);
3168 /* Allocate the info and discarded tables. */
3169 info = SAFE_ALLOCA (alloca_size); 3167 info = SAFE_ALLOCA (alloca_size);
3170 /* discarded[I] is 1 if byte I of the format 3168 /* discarded[I] is 1 if byte I of the format
3171 string was not copied into the output. 3169 string was not copied into the output.
diff --git a/src/image.c b/src/image.c
index b37851f0963..81d8cb4e2b2 100644
--- a/src/image.c
+++ b/src/image.c
@@ -6463,6 +6463,7 @@ png_load_body (struct frame *f, struct image *img, struct png_load_context *c)
6463 png_uint_32 row_bytes; 6463 png_uint_32 row_bytes;
6464 bool transparent_p; 6464 bool transparent_p;
6465 struct png_memory_storage tbr; /* Data to be read */ 6465 struct png_memory_storage tbr; /* Data to be read */
6466 ptrdiff_t nbytes;
6466 Emacs_Pix_Container ximg, mask_img = NULL; 6467 Emacs_Pix_Container ximg, mask_img = NULL;
6467 6468
6468 /* Find out what file to load. */ 6469 /* Find out what file to load. */
@@ -6658,13 +6659,10 @@ png_load_body (struct frame *f, struct image *img, struct png_load_context *c)
6658 /* Number of bytes needed for one row of the image. */ 6659 /* Number of bytes needed for one row of the image. */
6659 row_bytes = png_get_rowbytes (png_ptr, info_ptr); 6660 row_bytes = png_get_rowbytes (png_ptr, info_ptr);
6660 6661
6661 /* Use a temporary signed variable, since otherwise 6662 /* Allocate memory for the image. */
6662 INT_MULTIPLY_WRAPV might incorrectly return non-zero. */ 6663 if (INT_MULTIPLY_WRAPV (row_bytes, sizeof *pixels, &nbytes)
6663 ptrdiff_t nbytes = sizeof *pixels;
6664 if (INT_MULTIPLY_WRAPV (row_bytes, nbytes, &nbytes)
6665 || INT_MULTIPLY_WRAPV (nbytes, height, &nbytes)) 6664 || INT_MULTIPLY_WRAPV (nbytes, height, &nbytes))
6666 memory_full (SIZE_MAX); 6665 memory_full (SIZE_MAX);
6667 /* Allocate memory for the image. */
6668 c->pixels = pixels = xmalloc (nbytes); 6666 c->pixels = pixels = xmalloc (nbytes);
6669 c->rows = rows = xmalloc (height * sizeof *rows); 6667 c->rows = rows = xmalloc (height * sizeof *rows);
6670 for (i = 0; i < height; ++i) 6668 for (i = 0; i < height; ++i)