diff options
author | Johannes Schindelin <johannes.schindelin@gmx.de> | 2021-02-24 13:41:42 +0100 |
---|---|---|
committer | Ron Yorston <rmy@pobox.com> | 2021-03-01 09:24:34 +0000 |
commit | 35e32c2a7176c6add799440b642cef3fa6a70045 (patch) | |
tree | 2902b06c08222a6b99a2205fa86706bbf50c1969 | |
parent | 7d0e7ba3c7029a5d744e04c8318d234de5ebedcf (diff) | |
download | busybox-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.c | 5 |
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 | } |