]> granicus.if.org Git - php/commitdiff
ext/sodium: sodium_pad(): do not copy any bytes if the string is empty
authorFrank Denis <github@pureftpd.org>
Sun, 14 Oct 2018 08:43:21 +0000 (10:43 +0200)
committerFrank Denis <github@pureftpd.org>
Sun, 14 Oct 2018 08:43:21 +0000 (10:43 +0200)
Spotted by San Zhang, thanks!

Backport from PECL libsodium-php 2.0.13

ext/sodium/libsodium.c

index 5462700f6c4daba178696169b51e61731c39b8ae..b6a49254980d59d31c0928358ea8fba6ae75690f 100644 (file)
@@ -3402,12 +3402,17 @@ PHP_FUNCTION(sodium_pad)
        st = 1U;
        i = 0U;
        k = unpadded_len;
-       for (j = 0U; j <= xpadded_len; j++) {
-               ZSTR_VAL(padded)[j] = unpadded[i];
-               k -= st;
-               st = (size_t) (~(((( (((uint64_t) k) >> 48) | (((uint64_t) k) >> 32) |
-                                                        (k >> 16) | k) & 0xffff) - 1U) >> 16)) & 1U;
-               i += st;
+       if (unpadded_len > 0) {
+               st = 1U;
+               i = 0U;
+               k = unpadded_len;
+               for (j = 0U; j <= xpadded_len; j++) {
+                       ZSTR_VAL(padded)[j] = unpadded[i];
+                       k -= st;
+                       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)
        if (sodium_pad(NULL, (unsigned char *) ZSTR_VAL(padded), unpadded_len,