[compiler-rt] r178458 - [ASan] More careful reports for globals that are ASCII strings
Alexey Samsonov
samsonov at google.com
Mon Apr 1 01:57:38 PDT 2013
Author: samsonov
Date: Mon Apr 1 03:57:38 2013
New Revision: 178458
URL: http://llvm.org/viewvc/llvm-project?rev=178458&view=rev
Log:
[ASan] More careful reports for globals that are ASCII strings
Modified:
compiler-rt/trunk/lib/asan/asan_report.cc
compiler-rt/trunk/lib/asan/lit_tests/global-demangle.cc
Modified: compiler-rt/trunk/lib/asan/asan_report.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_report.cc?rev=178458&r1=178457&r2=178458&view=diff
==============================================================================
--- compiler-rt/trunk/lib/asan/asan_report.cc (original)
+++ compiler-rt/trunk/lib/asan/asan_report.cc Mon Apr 1 03:57:38 2013
@@ -180,21 +180,23 @@ static bool IsASCII(unsigned char c) {
return /*0x00 <= c &&*/ c <= 0x7F;
}
-// Check if the global is a zero-terminated ASCII string. If so, print it.
-static void PrintGlobalNameIfASCII(const __asan_global &g) {
- for (uptr p = g.beg; p < g.beg + g.size - 1; p++) {
- if (!IsASCII(*(unsigned char*)p)) return;
- }
- if (*(char*)(g.beg + g.size - 1) != 0) return;
- Printf(" '%s' is ascii string '%s'\n", g.name, (char*)g.beg);
-}
-
static const char *MaybeDemangleGlobalName(const char *name) {
// We can spoil names of globals with C linkage, so use an heuristic
// approach to check if the name should be demangled.
return (name[0] == '_' && name[1] == 'Z') ? Demangle(name) : name;
}
+// Check if the global is a zero-terminated ASCII string. If so, print it.
+static void PrintGlobalNameIfASCII(const __asan_global &g) {
+ for (uptr p = g.beg; p < g.beg + g.size - 1; p++) {
+ unsigned char c = *(unsigned char*)p;
+ if (c == '\0' || !IsASCII(c)) return;
+ }
+ if (*(char*)(g.beg + g.size - 1) != '\0') return;
+ Printf(" '%s' is ascii string '%s'\n",
+ MaybeDemangleGlobalName(g.name), (char*)g.beg);
+}
+
bool DescribeAddressRelativeToGlobal(uptr addr, uptr size,
const __asan_global &g) {
static const uptr kMinimalDistanceFromAnotherGlobal = 64;
Modified: compiler-rt/trunk/lib/asan/lit_tests/global-demangle.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/lit_tests/global-demangle.cc?rev=178458&r1=178457&r2=178458&view=diff
==============================================================================
--- compiler-rt/trunk/lib/asan/lit_tests/global-demangle.cc (original)
+++ compiler-rt/trunk/lib/asan/lit_tests/global-demangle.cc Mon Apr 1 03:57:38 2013
@@ -4,14 +4,15 @@
namespace XXX {
class YYY {
public:
- static int ZZZ[];
+ static char ZZZ[];
};
-int YYY::ZZZ[] = {0, 1, 2, 3};
+char YYY::ZZZ[] = "abc";
}
int main(int argc, char **argv) {
- return XXX::YYY::ZZZ[argc + 5]; // BOOM
- // CHECK: {{READ of size 4 at 0x.*}}
- // CHECK: {{0x.* is located 8 bytes to the right of global variable}}
- // CHECK: 'XXX::YYY::ZZZ' {{.*}} of size 16
+ return (int)XXX::YYY::ZZZ[argc + 5]; // BOOM
+ // CHECK: {{READ of size 1 at 0x.*}}
+ // CHECK: {{0x.* is located 2 bytes to the right of global variable}}
+ // CHECK: 'XXX::YYY::ZZZ' {{.*}} of size 4
+ // CHECK: 'XXX::YYY::ZZZ' is ascii string 'abc'
}
More information about the llvm-commits
mailing list