aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRon Yorston <rmy@pobox.com>2024-01-24 11:56:07 +0000
committerRon Yorston <rmy@pobox.com>2024-01-24 11:56:07 +0000
commite90fe5ece9e76837fb438e90da77b29eff4e7456 (patch)
tree31a13aa003996fb1c6e77c2326c48ce9f1724e6a
parent25e7fad9b5d6c4101760f9162fe1664c7f6ec363 (diff)
downloadbusybox-w32-e90fe5ece9e76837fb438e90da77b29eff4e7456.tar.gz
busybox-w32-e90fe5ece9e76837fb438e90da77b29eff4e7456.tar.bz2
busybox-w32-e90fe5ece9e76837fb438e90da77b29eff4e7456.zip
win32: avoid invalid free
In external_exists() in appletlib.c it's necessary to take a copy of the pointer to the allocated variable path1 so it can be freed: find_executable() will change its value.
-rw-r--r--libbb/appletlib.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/libbb/appletlib.c b/libbb/appletlib.c
index ebf24066d..5b42a9091 100644
--- a/libbb/appletlib.c
+++ b/libbb/appletlib.c
@@ -280,10 +280,12 @@ int FAST_FUNC find_applet_by_name(const char *name)
280 280
281static int external_exists(const char *name, const char *path) 281static int external_exists(const char *name, const char *path)
282{ 282{
283 char *path1 = xstrdup(path ?: getenv("PATH")); 283 char *path0, *path1, *ret;
284 char *ret = find_executable(name, &path1); 284
285 path0 = path1 = xstrdup(path ?: getenv("PATH"));
286 ret = find_executable(name, &path1);
285 free(ret); 287 free(ret);
286 free(path1); 288 free(path0);
287 return ret != NULL; 289 return ret != NULL;
288} 290}
289 291