From a908621a934643f51a58042abcf1d1e42e281943 Mon Sep 17 00:00:00 2001 From: Sven Linker Date: Tue, 20 Feb 2024 14:26:46 +0100 Subject: Replace null subtraction with cast Clang warns about null-pointer subtractions, which are undefined behavior per the C standards. Replace the subtractions with explicit casts to `uintptr_t`. --- libcrypt/sha256-crypt.c | 12 ++++++------ libcrypt/sha512-crypt.c | 10 +++++----- 2 files changed, 11 insertions(+), 11 deletions(-) (limited to 'libcrypt') diff --git a/libcrypt/sha256-crypt.c b/libcrypt/sha256-crypt.c index 81bbe6ae6..b2ab62e48 100644 --- a/libcrypt/sha256-crypt.c +++ b/libcrypt/sha256-crypt.c @@ -104,24 +104,24 @@ __sha256_crypt_r (const char *key, salt_len = MIN (strcspn (salt, "$"), SALT_LEN_MAX); key_len = strlen (key); - if ((key - (char *) 0) % __alignof__ (uint32_t) != 0) + if ((uintptr_t)key % __alignof__ (uint32_t) != 0) { char *tmp = (char *) alloca (key_len + __alignof__ (uint32_t)); key = copied_key = memcpy (tmp + __alignof__ (uint32_t) - - (tmp - (char *) 0) % __alignof__ (uint32_t), + - (uintptr_t)tmp % __alignof__ (uint32_t), key, key_len); - assert ((key - (char *) 0) % __alignof__ (uint32_t) == 0); + assert ((uintptr_t)key % __alignof__ (uint32_t) == 0); } - if ((salt - (char *) 0) % __alignof__ (uint32_t) != 0) + if ((uintptr_t)salt % __alignof__ (uint32_t) != 0) { char *tmp = (char *) alloca (salt_len + __alignof__ (uint32_t)); salt = copied_salt = memcpy (tmp + __alignof__ (uint32_t) - - (tmp - (char *) 0) % __alignof__ (uint32_t), + - (uintptr_t)tmp % __alignof__ (uint32_t), salt, salt_len); - assert ((salt - (char *) 0) % __alignof__ (uint32_t) == 0); + assert ((uintptr_t)salt % __alignof__ (uint32_t) == 0); } struct sha256_ctx ctx; diff --git a/libcrypt/sha512-crypt.c b/libcrypt/sha512-crypt.c index 9d17255aa..b8984d4ab 100644 --- a/libcrypt/sha512-crypt.c +++ b/libcrypt/sha512-crypt.c @@ -104,24 +104,24 @@ __sha512_crypt_r (const char *key, salt_len = MIN (strcspn (salt, "$"), SALT_LEN_MAX); key_len = strlen (key); - if ((key - (char *) 0) % __alignof__ (uint64_t) != 0) + if ((uintptr_t)key % __alignof__ (uint64_t) != 0) { char *tmp = (char *) alloca (key_len + __alignof__ (uint64_t)); key = copied_key = memcpy (tmp + __alignof__ (uint64_t) - - (tmp - (char *) 0) % __alignof__ (uint64_t), + - (uintptr_t)tmp % __alignof__ (uint64_t), key, key_len); assert ((key - (char *) 0) % __alignof__ (uint64_t) == 0); } - if ((salt - (char *) 0) % __alignof__ (uint64_t) != 0) + if ((uintptr_t)salt % __alignof__ (uint64_t) != 0) { char *tmp = (char *) alloca (salt_len + __alignof__ (uint64_t)); salt = copied_salt = memcpy (tmp + __alignof__ (uint64_t) - - (tmp - (char *) 0) % __alignof__ (uint64_t), + - (uintptr_t)tmp % __alignof__ (uint64_t), salt, salt_len); - assert ((salt - (char *) 0) % __alignof__ (uint64_t) == 0); + assert ((uintptr_t)salt % __alignof__ (uint64_t) == 0); } struct sha512_ctx ctx; -- cgit v1.2.3