Skip to content

Commit 82a93c1

Browse files
committed
ext/sodium: sodium_pad(): do not copy any bytes if the string is empty
Spotted by San Zhang, thanks! Backport from PECL libsodium-php 2.0.13
1 parent bf48d0c commit 82a93c1

File tree

1 file changed

+11
-6
lines changed

1 file changed

+11
-6
lines changed

ext/sodium/libsodium.c

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3402,12 +3402,17 @@ PHP_FUNCTION(sodium_pad)
34023402
st = 1U;
34033403
i = 0U;
34043404
k = unpadded_len;
3405-
for (j = 0U; j <= xpadded_len; j++) {
3406-
ZSTR_VAL(padded)[j] = unpadded[i];
3407-
k -= st;
3408-
st = (size_t) (~(((( (((uint64_t) k) >> 48) | (((uint64_t) k) >> 32) |
3409-
(k >> 16) | k) & 0xffff) - 1U) >> 16)) & 1U;
3410-
i += st;
3405+
if (unpadded_len > 0) {
3406+
st = 1U;
3407+
i = 0U;
3408+
k = unpadded_len;
3409+
for (j = 0U; j <= xpadded_len; j++) {
3410+
ZSTR_VAL(padded)[j] = unpadded[i];
3411+
k -= st;
3412+
st = (size_t) (~(((( (((uint64_t) k) >> 48) | (((uint64_t) k) >> 32) |
3413+
(k >> 16) | k) & 0xffff) - 1U) >> 16)) & 1U;
3414+
i += st;
3415+
}
34113416
}
34123417
#if SODIUM_LIBRARY_VERSION_MAJOR > 9 || (SODIUM_LIBRARY_VERSION_MAJOR == 9 && SODIUM_LIBRARY_VERSION_MINOR >= 6)
34133418
if (sodium_pad(NULL, (unsigned char *) ZSTR_VAL(padded), unpadded_len,

0 commit comments

Comments
 (0)