@@ -26,9 +26,10 @@ static const char kInterceptorName[] = "interceptor_name";
2626static const char kInterceptorViaFunction [] = " interceptor_via_fun" ;
2727static const char kInterceptorViaLibrary [] = " interceptor_via_lib" ;
2828static const char kODRViolation [] = " odr_violation" ;
29+ static const char kAllocDeallocMismatch [] = " alloc_dealloc_mismatch" ;
2930static const char *kSuppressionTypes [] = {
3031 kInterceptorName , kInterceptorViaFunction , kInterceptorViaLibrary ,
31- kODRViolation };
32+ kODRViolation , kAllocDeallocMismatch };
3233
3334SANITIZER_INTERFACE_WEAK_DEF (const char *, __asan_default_suppressions, void ) {
3435 return " " ;
@@ -52,7 +53,8 @@ bool IsInterceptorSuppressed(const char *interceptor_name) {
5253bool HaveStackTraceBasedSuppressions () {
5354 CHECK (suppression_ctx);
5455 return suppression_ctx->HasSuppressionType (kInterceptorViaFunction ) ||
55- suppression_ctx->HasSuppressionType (kInterceptorViaLibrary );
56+ suppression_ctx->HasSuppressionType (kInterceptorViaLibrary ) ||
57+ suppression_ctx->HasSuppressionType (kAllocDeallocMismatch );
5658}
5759
5860bool IsODRViolationSuppressed (const char *global_var_name) {
@@ -79,19 +81,22 @@ bool IsStackTraceSuppressed(const StackTrace *stack) {
7981 return true ;
8082 }
8183
82- if (suppression_ctx->HasSuppressionType (kInterceptorViaFunction )) {
83- SymbolizedStackHolder symbolized_stack (symbolizer->SymbolizePC (addr));
84- const SymbolizedStack *frames = symbolized_stack.get ();
85- CHECK (frames);
86- for (const SymbolizedStack *cur = frames; cur; cur = cur->next ) {
87- const char *function_name = cur->info .function ;
88- if (!function_name) {
89- continue ;
90- }
91- // Match "interceptor_via_fun" suppressions.
92- if (suppression_ctx->Match (function_name, kInterceptorViaFunction ,
93- &s)) {
94- return true ;
84+ const char *suppressions[] = {kInterceptorViaFunction ,
85+ kAllocDeallocMismatch };
86+ for (const char *suppression : suppressions) {
87+ if (suppression_ctx->HasSuppressionType (suppression)) {
88+ SymbolizedStackHolder symbolized_stack (symbolizer->SymbolizePC (addr));
89+ const SymbolizedStack *frames = symbolized_stack.get ();
90+ CHECK (frames);
91+ for (const SymbolizedStack *cur = frames; cur; cur = cur->next ) {
92+ const char *function_name = cur->info .function ;
93+ if (!function_name) {
94+ continue ;
95+ }
96+ // Match suppressions.
97+ if (suppression_ctx->Match (function_name, suppression, &s)) {
98+ return true ;
99+ }
95100 }
96101 }
97102 }
0 commit comments