From bcd4c90a71b5e3e1e23b0cc301fd7a1f830841af Mon Sep 17 00:00:00 2001 From: Nicolas Martinelli Date: Thu, 26 Apr 2018 12:40:38 +0200 Subject: [PATCH] [FIX] web: `get_file` and CPU time exceeded - Create a binary field which takes some time for computation. For example: ``` ding_dong = fields.Binary(compute='_compute_ding_dong') def _compute_ding_dong(self): if not self.env.context.get('bin_size'): while True: 3*3 for x in self: x.ding_dong = x.product_id.image_medium ``` - Run the server with a limited CPU time, for example: `--workers=2 --limit-time-cpu=10` - Download the file A JS traceback occurs, without any information about the real crash. The error management is simply not working: `JSON.parse` is called on a string which is not JSON-parseable. opw-1838832 --- addons/web/static/src/js/framework/ajax.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/addons/web/static/src/js/framework/ajax.js b/addons/web/static/src/js/framework/ajax.js index 09bcc40d918..8f4138a6208 100644 --- a/addons/web/static/src/js/framework/ajax.js +++ b/addons/web/static/src/js/framework/ajax.js @@ -232,8 +232,12 @@ function get_file(options) { if (options.error) { var body = this.contentDocument.body; var nodes = body.children.length === 0 ? body.childNodes : body.children; - var node = nodes[1] || nodes[0]; - options.error(JSON.parse(node.textContent)); + options.error({ + message: nodes.length > 1 ? nodes[1].textContent : '', + data: { + title: nodes.length > 0 ? nodes[0].textContent : '', + }, + }); } } finally { complete();