diff options
| author | Paul Eggert | 2019-08-14 18:24:02 -0700 |
|---|---|---|
| committer | Paul Eggert | 2019-08-14 18:24:33 -0700 |
| commit | 2098e8afaf1c5235ba38c0156f680b8e435d9fdd (patch) | |
| tree | 2cde909326273f76ae2bb58b7d7cdfa350951058 /src | |
| parent | b898528fdc69c9ac58895f8be81163dc304bd59b (diff) | |
| download | emacs-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.c | 5 | ||||
| -rw-r--r-- | src/casefiddle.c | 5 | ||||
| -rw-r--r-- | src/editfns.c | 8 | ||||
| -rw-r--r-- | src/image.c | 8 |
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) |