]> granicus.if.org Git - php/commitdiff
ext/sodium: Avoid shifts wider than 32 bits on size_t values
authorFrank Denis <github@pureftpd.org>
Sun, 14 Oct 2018 08:21:29 +0000 (10:21 +0200)
committerFrank Denis <github@pureftpd.org>
Sun, 14 Oct 2018 08:21:29 +0000 (10:21 +0200)
Backport from PECL libsodium-php 2.0.10

ext/sodium/libsodium.c

index e168aad105de9dae0655be3240313f7c19b5e900..08ac0f9ab2181ac15fd8ca56ced718c011c184bf 100644 (file)
@@ -3405,7 +3405,8 @@ PHP_FUNCTION(sodium_pad)
        for (j = 0U; j <= xpadded_len; j++) {
                ZSTR_VAL(padded)[j] = unpadded[i];
                k -= st;
-               st = (~(((((k >> 48) | (k >> 32) | (k >> 16) | k) & 0xffff) - 1U) >> 16)) & 1U;
+               st = (size_t) (~(((( (((uint64_t) k) >> 48) | (((uint64_t) k) >> 32) |
+                                                        (k >> 16) | k) & 0xffff) - 1U) >> 16)) & 1U;
                i += st;
        }
 #if SODIUM_LIBRARY_VERSION_MAJOR > 9 || (SODIUM_LIBRARY_VERSION_MAJOR == 9 && SODIUM_LIBRARY_VERSION_MINOR >= 6)