Improve the regerror(3) interceptor
authorKamil Rytarowski <n54@gmx.com>
Tue, 4 Dec 2018 02:18:18 +0000 (02:18 +0000)
committerKamil Rytarowski <n54@gmx.com>
Tue, 4 Dec 2018 02:18:18 +0000 (02:18 +0000)
The res returned value might differ with REAL(strlen)(errbuf) + 1,
as the buffer's value is limited with errbuf_size.

Hot fix for D54584.

llvm-svn: 348231

compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc

index a4c5834..c4f3296 100644 (file)
@@ -7398,8 +7398,8 @@ INTERCEPTOR(SIZE_T, regerror, int errcode, const void *preg, char *errbuf,
   if (preg)
     COMMON_INTERCEPTOR_READ_RANGE(ctx, preg, struct_regex_sz);
   SIZE_T res = REAL(regerror)(errcode, preg, errbuf, errbuf_size);
-  if (errbuf && res > 0)
-    COMMON_INTERCEPTOR_WRITE_RANGE(ctx, errbuf, res);
+  if (errbuf)
+    COMMON_INTERCEPTOR_WRITE_RANGE(ctx, errbuf, REAL(strlen)(errbuf) + 1);
   return res;
 }
 INTERCEPTOR(void, regfree, const void *preg) {