From fd06a7fe14378b1a7d50ac815b08033ebe2e7d3b Mon Sep 17 00:00:00 2001 From: fw-bot Date: Thu, 24 Oct 2019 15:54:00 +0000 Subject: [PATCH] [FIX] profiler: be more pesimistic The profiler was too optimistic. If the local variable self was not a cursor, it assumed it was automatically an Odoo model. Instead, only do the custom tracer methods when self is an instance of BaseModel. Full scenario to reproduce explained at odoo/odoo#39237 In case a method like the default_get of utm.mixing was profiled, the tracer crashed when evaluating `__bool__(request)`. The tracer considered self as an Odoo model while it was a werkzeug instance with its custom __getattr__ that crashed while trying to retrieve the content of `_name`. Fixes odoo/odoo#39237 closes odoo/odoo#39524 X-original-commit: c8fa8fb067dcfb15330acde35d66ac41a255f669 Signed-off-by: Martin Trigaux (mat) --- odoo/tools/profiler.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/odoo/tools/profiler.py b/odoo/tools/profiler.py index e44dfadac1f..85d4f00b633 100644 --- a/odoo/tools/profiler.py +++ b/odoo/tools/profiler.py @@ -35,7 +35,7 @@ class _LogTracer(object): in_self = frame.f_locals['self'] - if isinstance(in_self, (odoo.sql_db.Cursor, odoo.sql_db.TestCursor)): + if not isinstance(in_self, odoo.models.BaseModel): return self.tracer model = getattr(in_self, '_name', None)