diff options
author | Lukas Larsson <[email protected]> | 2014-08-14 09:43:04 +0200 |
---|---|---|
committer | Lukas Larsson <[email protected]> | 2014-08-14 09:43:04 +0200 |
commit | 8fe6c462ec8e20ab2ad14b0c1addf1030ada0e54 (patch) | |
tree | 84b846c45bb63029cbd725e19ee3ab0274b21056 | |
parent | 9170441003f193e8b3f3a83e5ac51305e09e0f8c (diff) | |
parent | a8cbf025f6e20a68b6575747200be149c6c09932 (diff) | |
download | otp-8fe6c462ec8e20ab2ad14b0c1addf1030ada0e54.tar.gz otp-8fe6c462ec8e20ab2ad14b0c1addf1030ada0e54.tar.bz2 otp-8fe6c462ec8e20ab2ad14b0c1addf1030ada0e54.zip |
Merge branch 'nox/clang-ubsan/OTP-12097' into maint
* nox/clang-ubsan/OTP-12097:
Properly handle SINT_MIN in small_to_big()
Use offsetof() in io.c
-rw-r--r-- | erts/emulator/beam/big.c | 6 | ||||
-rw-r--r-- | erts/emulator/beam/io.c | 2 |
2 files changed, 5 insertions, 3 deletions
diff --git a/erts/emulator/beam/big.c b/erts/emulator/beam/big.c index 41a041eba6..4d087bf967 100644 --- a/erts/emulator/beam/big.c +++ b/erts/emulator/beam/big.c @@ -1506,13 +1506,15 @@ Eterm uword_to_big(UWord x, Eterm *y) */ Eterm small_to_big(Sint x, Eterm *y) { + Uint xu; if (x >= 0) { + xu = x; *y = make_pos_bignum_header(1); } else { - x = -x; + xu = -(Uint)x; *y = make_neg_bignum_header(1); } - BIG_DIGIT(y, 0) = x; + BIG_DIGIT(y, 0) = xu; return make_big(y); } diff --git a/erts/emulator/beam/io.c b/erts/emulator/beam/io.c index d028737664..0f86d8e41d 100644 --- a/erts/emulator/beam/io.c +++ b/erts/emulator/beam/io.c @@ -7166,7 +7166,7 @@ char *driver_dl_error(void) #define ERL_DRV_SYS_INFO_SIZE(LAST_FIELD) \ - (((size_t) &((ErlDrvSysInfo *) 0)->LAST_FIELD) \ + (offsetof(ErlDrvSysInfo, LAST_FIELD) \ + sizeof(((ErlDrvSysInfo *) 0)->LAST_FIELD)) void |