Fix T95724: boundary error in BLI_str_unescape_ex

Fix boundary error in `BLI_str_unescape_ex`. The `dst_maxncpy` parameter
indicates the maximum buffer size, not the maximum number of characters.

As these are strings, the loop has to stop one byte early to allow space
for the trailing zero byte.

Thanks @mano-wii for the patch!
This commit is contained in:
Sybren A. Stüvel 2022-02-18 16:32:33 +01:00
parent e4b7d52fe4
commit 1b47d07d76

@ -323,8 +323,9 @@ size_t BLI_str_unescape_ex(char *__restrict dst,
{
size_t len = 0;
bool is_complete = true;
const size_t max_strlen = dst_maxncpy - 1; /* Account for trailing zero byte. */
for (const char *src_end = src + src_maxncpy; (src < src_end) && *src; src++) {
if (UNLIKELY(len == dst_maxncpy)) {
if (UNLIKELY(len == max_strlen)) {
is_complete = false;
break;
}