From fa3a3414f22c7c552b04a8e5dbf11f153b4a94d2 Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Tue, 19 Mar 2013 15:27:01 +0100 Subject: [PATCH 1/4] [FIX] ir.actions.action: fix the execute wich install/uninstall modules and thus invalidate its own pool. bzr revid: vmt@openerp.com-20130319142701-1cvo6dh2yvg4z81f --- openerp/addons/base/ir/ir_actions.py | 4 ++-- openerp/addons/base/res/res_config.py | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/openerp/addons/base/ir/ir_actions.py b/openerp/addons/base/ir/ir_actions.py index beb4e27200a..3e29a0a9b97 100644 --- a/openerp/addons/base/ir/ir_actions.py +++ b/openerp/addons/base/ir/ir_actions.py @@ -207,7 +207,7 @@ class act_window(osv.osv): def _search_view(self, cr, uid, ids, name, arg, context=None): res = {} for act in self.browse(cr, uid, ids, context=context): - field_get = self.pool.get(act.res_model).fields_view_get(cr, uid, + field_get = self.pool[act.res_model].fields_view_get(cr, uid, act.search_view_id and act.search_view_id.id or False, 'search', context=context) res[act.id] = str(field_get) @@ -792,7 +792,7 @@ Launch Manually Once: after having been launched manually, it sets automatically act_type = self.pool.get('ir.actions.actions').read(cr, uid, wizard.action_id.id, ['type'], context=context) res = self.pool.get(act_type['type']).read(cr, uid, wizard.action_id.id, [], context=context) - if act_type<>'ir.actions.act_window': + if act_type['type'] != 'ir.actions.act_window': return res res.setdefault('context','{}') res['nodestroy'] = True diff --git a/openerp/addons/base/res/res_config.py b/openerp/addons/base/res/res_config.py index 3137cab24d9..bfa9abe5607 100644 --- a/openerp/addons/base/res/res_config.py +++ b/openerp/addons/base/res/res_config.py @@ -557,7 +557,10 @@ class res_config_settings(osv.osv_memory): 'params': {'modules': to_install_missing_names}, } - config = self.pool.get('res.config').next(cr, uid, [], context=context) or {} + # After the uninstall/install calls, the self.pool is no longer valid. + # So we reach into the RegistryManager directly. + res_config = openerp.modules.registry.RegistryManager.get(cr.dbname)['res.config'] + config = res_config.next(cr, uid, [], context=context) or {} if config.get('type') not in ('ir.actions.act_window_close',): return config From a5ee9e58194219abe33f24464e18ac26a3515823 Mon Sep 17 00:00:00 2001 From: Christophe Matthieu Date: Wed, 20 Mar 2013 13:22:10 +0100 Subject: [PATCH 2/4] [FIX] chrome.js: error without message bzr revid: chm@openerp.com-20130320122210-0p31k511eg8fplap --- addons/web/static/src/xml/base.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index 5ac7e5c3ef6..bcd5763a37e 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -40,11 +40,11 @@

- var message = d.message ? d.message : d.error.data.fault_code; - d.html_error = context.engine.tools.html_escape(message) + var message = d.error.data.message || d.error.data.fault_code; + d.error.html_error = context.engine.tools.html_escape(message) .replace(/\n/g, '
');
- +

From a51b6912bd28489a784edbd8bd1f7e11437ab7e1 Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Wed, 20 Mar 2013 14:22:38 +0100 Subject: [PATCH 3/4] [FIX] safe_eval: better exception handling: - the re-raising of exceptions ignored the "legal" exceptions (the one used to early abort RPC calls and generate pop-ups) - re-raising the exception was attempting to re-use the original exception type but it does not always take only one argument so it was breaking. lp bug: https://launchpad.net/bugs/1146256 fixed bzr revid: vmt@openerp.com-20130320132238-qzo3jptww59ndlch --- openerp/addons/base/test/base_test.yml | 2 +- .../tests/addons/test_exceptions/models.py | 30 +++++++++++++ openerp/tests/addons/test_exceptions/view.xml | 42 ++++++++++++++++++- openerp/tools/safe_eval.py | 14 ++++++- 4 files changed, 84 insertions(+), 4 deletions(-) diff --git a/openerp/addons/base/test/base_test.yml b/openerp/addons/base/test/base_test.yml index b7f7e0058b1..baf8aa88815 100644 --- a/openerp/addons/base/test/base_test.yml +++ b/openerp/addons/base/test/base_test.yml @@ -47,7 +47,7 @@ with mute_logger('openerp.tools.safe_eval'): safe_eval('open("/etc/passwd","r")') assert False, "safe_eval should not allow calling open() builtin" - except NameError: + except ValueError: pass - diff --git a/openerp/tests/addons/test_exceptions/models.py b/openerp/tests/addons/test_exceptions/models.py index 7a91d147256..a22c6ea7d77 100644 --- a/openerp/tests/addons/test_exceptions/models.py +++ b/openerp/tests/addons/test_exceptions/models.py @@ -35,4 +35,34 @@ class m(openerp.osv.osv.Model): def generate_undefined(self, cr, uid, ids, context=None): self.surely_undefined_symbol + + def generate_except_osv_safe_eval(self, cr, uid, ids, context=None): + self.generate_safe_eval(cr, uid, ids, self.generate_except_osv, context) + + def generate_except_orm_safe_eval(self, cr, uid, ids, context=None): + self.generate_safe_eval(cr, uid, ids, self.generate_except_orm, context) + + def generate_warning_safe_eval(self, cr, uid, ids, context=None): + self.generate_safe_eval(cr, uid, ids, self.generate_warning, context) + + def generate_redirect_warning_safe_eval(self, cr, uid, ids, context=None): + self.generate_safe_eval(cr, uid, ids, self.generate_redirect_warning, context) + + def generate_access_denied_safe_eval(self, cr, uid, ids, context=None): + self.generate_safe_eval(cr, uid, ids, self.generate_access_denied, context) + + def generate_access_error_safe_eval(self, cr, uid, ids, context=None): + self.generate_safe_eval(cr, uid, ids, self.generate_access_error, context) + + def generate_exc_access_denied_safe_eval(self, cr, uid, ids, context=None): + self.generate_safe_eval(cr, uid, ids, self.generate_exc_access_denied, context) + + def generate_undefined_safe_eval(self, cr, uid, ids, context=None): + self.generate_safe_eval(cr, uid, ids, self.generate_undefined, context) + + + def generate_safe_eval(self, cr, uid, ids, f, context): + globals_dict = { 'generate': lambda *args: f(cr, uid, ids, context) } + openerp.tools.safe_eval.safe_eval("generate()", mode='exec', globals_dict=globals_dict) + # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/openerp/tests/addons/test_exceptions/view.xml b/openerp/tests/addons/test_exceptions/view.xml index 0c8e373a278..4d8e820d456 100644 --- a/openerp/tests/addons/test_exceptions/view.xml +++ b/openerp/tests/addons/test_exceptions/view.xml @@ -7,9 +7,11 @@ test.exceptions.model
-