diff options
| author | Martin Trigaux <mat@odoo.com> | 2016-07-20 13:52:06 +0200 |
|---|---|---|
| committer | Martin Trigaux <mat@odoo.com> | 2016-08-19 15:28:27 +0200 |
| commit | 0122c05eff9525a8d79fec0460f5de8bf14c2eca (patch) | |
| tree | 7c2c4e225280cd85342354922ab3265502d75fe0 | |
| parent | f571ba373a88fbe0c176de922aca7363298d1c07 (diff) | |
[FIX] web: avoid report with invalid sheet name
This commit does not fix any bug in odoo/odoo but helps fixing #12788
Needed for odoo/enterprise#433
| -rw-r--r-- | addons/web/controllers/main.py | 7 | ||||
| -rw-r--r-- | addons/web/controllers/pivot.py | 7 | ||||
| -rw-r--r-- | openerp/tools/misc.py | 21 |
3 files changed, 24 insertions, 11 deletions
diff --git a/addons/web/controllers/main.py b/addons/web/controllers/main.py index e864ccb5d5d..c6b8015267b 100644 --- a/addons/web/controllers/main.py +++ b/addons/web/controllers/main.py @@ -25,11 +25,6 @@ import werkzeug.utils import werkzeug.wrappers from openerp.api import Environment -try: - import xlwt -except ImportError: - xlwt = None - import openerp import openerp.modules.registry from openerp.addons.base.ir.ir_qweb import AssetsBundle, QWebTemplateNotFound @@ -37,7 +32,7 @@ from openerp.modules import get_resource_path from openerp.tools import topological_sort from openerp.tools.translate import _ from openerp.tools import ustr -from openerp.tools.misc import str2bool +from openerp.tools.misc import str2bool, xlwt from openerp import http from openerp.http import request, serialize_exception as _serialize_exception from openerp.exceptions import AccessError diff --git a/addons/web/controllers/pivot.py b/addons/web/controllers/pivot.py index 571cff94229..41c113bbbdd 100644 --- a/addons/web/controllers/pivot.py +++ b/addons/web/controllers/pivot.py @@ -1,13 +1,10 @@ from openerp import http import json from openerp.http import request, serialize_exception as _serialize_exception +from openerp.tools.misc import xlwt from cStringIO import StringIO from collections import deque -try: - import xlwt -except ImportError: - xlwt = None class TableExporter(http.Controller): @@ -21,7 +18,7 @@ class TableExporter(http.Controller): jdata = json.loads(data) nbr_measures = jdata['nbr_measures'] workbook = xlwt.Workbook() - worksheet = workbook.add_sheet(jdata['title'][:30]) + worksheet = workbook.add_sheet(jdata['title']) header_bold = xlwt.easyxf("font: bold on; pattern: pattern solid, fore_colour gray25;") header_plain = xlwt.easyxf("pattern: pattern solid, fore_colour gray25;") bold = xlwt.easyxf("font: bold on;") diff --git a/openerp/tools/misc.py b/openerp/tools/misc.py index a9f1398ca72..d59c46eebeb 100644 --- a/openerp/tools/misc.py +++ b/openerp/tools/misc.py @@ -14,6 +14,7 @@ import subprocess import logging import os import passlib.utils +import re import socket import sys import threading @@ -323,6 +324,26 @@ def topological_sort(elems): return result +try: + import xlwt + + # add some sanitizations to respect the excel sheet name restrictions + # as the sheet name is often translatable, can not control the input + class PatchedWorkbook(xlwt.Workbook): + def add_sheet(self, name): + # invalid Excel character: []:*?/\ + name = re.sub(r'[\[\]:*?/\\]', '', name) + + # maximum size is 31 characters + name = name[:31] + return super(PatchedWorkbook, self).add_sheet(name) + + xlwt.Workbook = PatchedWorkbook + +except ImportError: + xlwt = None + + class UpdateableStr(local): """ Class that stores an updateable string (used in wizards) """ |
