aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Schindelin <johannes.schindelin@gmx.de>2021-02-24 13:41:42 +0100
committerRon Yorston <rmy@pobox.com>2021-03-01 09:24:34 +0000
commit35e32c2a7176c6add799440b642cef3fa6a70045 (patch)
tree2902b06c08222a6b99a2205fa86706bbf50c1969
parent7d0e7ba3c7029a5d744e04c8318d234de5ebedcf (diff)
downloadbusybox-w32-35e32c2a7176c6add799440b642cef3fa6a70045.tar.gz
busybox-w32-35e32c2a7176c6add799440b642cef3fa6a70045.tar.bz2
busybox-w32-35e32c2a7176c6add799440b642cef3fa6a70045.zip
readlink(): do `NUL`-terminate the result
Otherwise we're provoking buffer overruns. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
-rw-r--r--win32/mingw.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/win32/mingw.c b/win32/mingw.c
index 2e9a53393..e8152c87e 100644
--- a/win32/mingw.c
+++ b/win32/mingw.c
@@ -1238,9 +1238,10 @@ ssize_t readlink(const char *pathname, char *buf, size_t bufsiz)
1238 name[len] = 0; 1238 name[len] = 0;
1239 name = normalize_ntpath(name); 1239 name = normalize_ntpath(name);
1240 len = wcslen(name); 1240 len = wcslen(name);
1241 if (len > bufsiz) 1241 if (len >= bufsiz)
1242 len = bufsiz; 1242 len = bufsiz - 1;
1243 if (WideCharToMultiByte(CP_ACP, 0, name, len, buf, bufsiz, 0, 0)) { 1243 if (WideCharToMultiByte(CP_ACP, 0, name, len, buf, bufsiz, 0, 0)) {
1244 buf[len] = '\0';
1244 return len; 1245 return len;
1245 } 1246 }
1246 } 1247 }