diff options
author | Evgeniy Stepanov <eugeni.stepanov@gmail.com> | 2016-12-27 22:14:03 +0000 |
---|---|---|
committer | Evgeniy Stepanov <eugeni.stepanov@gmail.com> | 2016-12-27 22:14:03 +0000 |
commit | a889b3d577e7ae8df44e2f76376f08e4d54f936d (patch) | |
tree | bc4da92a66b4754d7fe25042416f4a2efa98bd36 /lib/sanitizer_common/sanitizer_common_interceptors_format.inc | |
parent | e03831887512c6391c1e0fbb26cebec2c8d1d07f (diff) |
[asan] Fix handling of %m in printf interceptor.
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@290632 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/sanitizer_common/sanitizer_common_interceptors_format.inc')
-rw-r--r-- | lib/sanitizer_common/sanitizer_common_interceptors_format.inc | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/lib/sanitizer_common/sanitizer_common_interceptors_format.inc b/lib/sanitizer_common/sanitizer_common_interceptors_format.inc index 92318cda3..12563499c 100644 --- a/lib/sanitizer_common/sanitizer_common_interceptors_format.inc +++ b/lib/sanitizer_common/sanitizer_common_interceptors_format.inc @@ -435,10 +435,6 @@ static const char *printf_parse_next(const char *p, PrintfDirective *dir) { } static int printf_get_value_size(PrintfDirective *dir) { - if (dir->convSpecifier == 'm') { - return sizeof(char *); - } - if (char_is_one_of(dir->convSpecifier, "cCsS")) { unsigned charSize = format_get_char_size(dir->convSpecifier, dir->lengthModifier); @@ -519,6 +515,9 @@ static void printf_common(void *ctx, const char *format, va_list aq) { // Dynamic precision SKIP_SCALAR_ARG(&aq, 'd', sizeof(int)); } + // %m does not require an argument: strlen(errno). + if (dir.convSpecifier == 'm') + continue; int size = printf_get_value_size(&dir); if (size == FSS_INVALID) { Report("WARNING: unexpected format specifier in printf " |