From d3c675630f10804d6272ef37c49174a239c29fbd Mon Sep 17 00:00:00 2001 From: Jonas Hahnfeld Date: Wed, 13 Mar 2019 10:37:56 +0000 Subject: [PATCH] [Support] Treat truncation of fullpath as error If the concatenation of arguments dir and bin has at least PATH_MAX characters the call to snprintf will truncate. The result will usually not exist, but if it does it's actually incorrect to return that the path exists. (Motivated by GCC compiler warning about format truncation.) Differential Revision: https://reviews.llvm.org/D58835 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@356036 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Support/Unix/Path.inc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/Support/Unix/Path.inc b/lib/Support/Unix/Path.inc index 5eba86d2077..57385baaf34 100644 --- a/lib/Support/Unix/Path.inc +++ b/lib/Support/Unix/Path.inc @@ -107,7 +107,11 @@ test_dir(char ret[PATH_MAX], const char *dir, const char *bin) struct stat sb; char fullpath[PATH_MAX]; - snprintf(fullpath, PATH_MAX, "%s/%s", dir, bin); + int chars = snprintf(fullpath, PATH_MAX, "%s/%s", dir, bin); + // We cannot write PATH_MAX characters because the string will be terminated + // with a null character. Fail if truncation happened. + if (chars >= PATH_MAX) + return 1; if (!realpath(fullpath, ret)) return 1; if (stat(fullpath, &sb) != 0) -- 2.50.1