Fix check for redefined field.
We would fail even if the deobfuscated name is the same as before. This
happens in real world Proguard maps.
Change-Id: Id2410dc189d110e00cc3b078375e0593d96063ac
diff --git a/src/profiling/deobfuscator.h b/src/profiling/deobfuscator.h
index 061b5da..8348a45 100644
--- a/src/profiling/deobfuscator.h
+++ b/src/profiling/deobfuscator.h
@@ -59,7 +59,7 @@
bool AddField(std::string obfuscated_name, std::string deobfuscated_name) {
auto p = deobfuscated_fields_.emplace(std::move(obfuscated_name),
deobfuscated_name);
- return p.second && p.first->second == deobfuscated_name;
+ return p.second || p.first->second == deobfuscated_name;
}
void AddMethod(std::string obfuscated_name, std::string deobfuscated_name) {
diff --git a/src/profiling/deobfuscator_unittest.cc b/src/profiling/deobfuscator_unittest.cc
index 66001dd..6893aca 100644
--- a/src/profiling/deobfuscator_unittest.cc
+++ b/src/profiling/deobfuscator_unittest.cc
@@ -177,6 +177,16 @@
ASSERT_TRUE(p.AddLine(" 15:15:boolean doSomething(boolean):116:116 -> b"));
}
+TEST(ProguardParserTest, DuplicateFieldSame) {
+ ProguardParser p;
+ ASSERT_TRUE(p.AddLine(
+ "android.arch.core.executor.ArchTaskExecutor -> android.arch.a.a.a:"));
+ ASSERT_TRUE(
+ p.AddLine(" android.arch.core.executor.TaskExecutor mDelegate -> b"));
+ ASSERT_TRUE(p.AddLine(
+ " 1:1:android.arch.core.executor.TaskExecutor mDelegate -> b"));
+}
+
} // namespace
} // namespace profiling
} // namespace perfetto