чување 7c142b66ae813aad538e7e1503c6a05d7b7dcb5a
родитељ ec1bad7227f1befb577ef97b1d3ea3be1a34e039
Аутор: Страхиња Радић <sr@strahinja.org>
Датум: Thu, 8 Aug 2024 09:38:02 +0200
sled.c(main): Avoid potential SEGV when the result of memccpy is NULL
Diffstat:
измењених датотека: 1, додавања: 8(+), брисања: 4(-)
diff --git a/sled.c b/sled.c
@@ -3054,6 +3054,8 @@ main(int argc, char** argv)
}
else /* rfn is relative */
{
+ size_t rfn_dir_len;
+
state.orig_real_filename
= strndup(rfn, state.rfn_len);
if (!state.orig_real_filename)
@@ -3069,11 +3071,13 @@ main(int argc, char** argv)
print_error(1, "Pathname too long");
goto main_cleanup;
}
- *(temp - 1) = '/';
+ *(temp - 1) = '/'; /* overwrite NUL */
+ rfn_dir_len = temp - state.real_filename - 1;
MEMCCPY_EXT(temp, state.real_filename, rfn,
- limits[L_PATH_MAX] - state.rfn_len - 1,
- temp);
- state.rfn_len = temp - state.real_filename - 1;
+ limits[L_PATH_MAX] - rfn_dir_len, temp);
+ if (temp)
+ state.rfn_len = temp
+ - state.real_filename - 1;
}
free(rfn);
rfn = NULL;