diff options
author | Damien Miller <djm@mindrot.org> | 2014-12-18 11:44:06 +1100 |
---|---|---|
committer | Damien Miller <djm@mindrot.org> | 2014-12-18 11:44:06 +1100 |
commit | 7de5991aa3997e2981440f39c1ea01273a0a2c7b (patch) | |
tree | 5c5b0a352aba22afe9f7cc73b59c69d4784b1d6d | |
parent | 2048f85a5e6da8bc6e0532efe02ecfd4e63c978c (diff) |
upstream libc change
revision 1.2
date: 2014/12/08 03:45:00; author: bcook; state: Exp; lines: +2 -2; commitid: 7zWEBgJJOCZ2hvTV;
avoid left shift overflow in reallocarray.
Some 64-bit platforms (e.g. Windows 64) have a 32-bit long. So, shifting
1UL 32-bits to the left causes an overflow. This replaces the constant 1UL with
(size_t)1 so that we get the correct constant size for the platform.
discussed with tedu@ & deraadt@
-rw-r--r-- | openbsd-compat/reallocarray.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/openbsd-compat/reallocarray.c b/openbsd-compat/reallocarray.c index 68f406446..cffe9b5ef 100644 --- a/openbsd-compat/reallocarray.c +++ b/openbsd-compat/reallocarray.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: reallocarray.c,v 1.1 2014/05/08 21:43:49 deraadt Exp $ */ | 1 | /* $OpenBSD: reallocarray.c,v 1.2 2014/12/08 03:45:00 bcook Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2008 Otto Moerbeek <otto@drijf.net> | 3 | * Copyright (c) 2008 Otto Moerbeek <otto@drijf.net> |
4 | * | 4 | * |
@@ -29,7 +29,7 @@ | |||
29 | * This is sqrt(SIZE_MAX+1), as s1*s2 <= SIZE_MAX | 29 | * This is sqrt(SIZE_MAX+1), as s1*s2 <= SIZE_MAX |
30 | * if both s1 < MUL_NO_OVERFLOW and s2 < MUL_NO_OVERFLOW | 30 | * if both s1 < MUL_NO_OVERFLOW and s2 < MUL_NO_OVERFLOW |
31 | */ | 31 | */ |
32 | #define MUL_NO_OVERFLOW (1UL << (sizeof(size_t) * 4)) | 32 | #define MUL_NO_OVERFLOW ((size_t)1 << (sizeof(size_t) * 4)) |
33 | 33 | ||
34 | void * | 34 | void * |
35 | reallocarray(void *optr, size_t nmemb, size_t size) | 35 | reallocarray(void *optr, size_t nmemb, size_t size) |