From 1814fe8f840b6ba8ee99bb0dc8216fef42c5f063 Mon Sep 17 00:00:00 2001 From: Kazuhiko SHIOZAKI <kazuhiko@nexedi.com> Date: Mon, 10 Oct 2022 09:59:38 +0200 Subject: [PATCH] py2/py3: use hexdigest instead of digest in inventory cache key to avoid non-valid UTF-8 bytes. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit One problem with hexdigest is that it's longer and the column was created as binary(16). We don't have a mechanism to run migrations on this table, so we use UNHEX in SQL to have the equivalent as digest() from hexdigest() Co-authored-by: Jérome Perrin <jerome@nexedi.com> --- .../erp5_stock_cache/Resource_zGetInventoryCacheResult.sql | 2 +- .../Resource_zInsertInventoryCacheResult.sql | 2 +- .../portal_components/tool.erp5.SimulationTool.py | 5 +++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/bt5/erp5_stock_cache/SkinTemplateItem/portal_skins/erp5_stock_cache/Resource_zGetInventoryCacheResult.sql b/bt5/erp5_stock_cache/SkinTemplateItem/portal_skins/erp5_stock_cache/Resource_zGetInventoryCacheResult.sql index 472952fdf5..12ac1eeb73 100644 --- a/bt5/erp5_stock_cache/SkinTemplateItem/portal_skins/erp5_stock_cache/Resource_zGetInventoryCacheResult.sql +++ b/bt5/erp5_stock_cache/SkinTemplateItem/portal_skins/erp5_stock_cache/Resource_zGetInventoryCacheResult.sql @@ -4,7 +4,7 @@ SELECT FROM inventory_cache WHERE - inventory_cache.query=<dtml-sqlvar query type="string"> + inventory_cache.query = UNHEX(<dtml-sqlvar query type="string">) <dtml-if date> AND inventory_cache.date <= <dtml-sqlvar date type="datetime"> diff --git a/bt5/erp5_stock_cache/SkinTemplateItem/portal_skins/erp5_stock_cache/Resource_zInsertInventoryCacheResult.sql b/bt5/erp5_stock_cache/SkinTemplateItem/portal_skins/erp5_stock_cache/Resource_zInsertInventoryCacheResult.sql index 896340a4a4..cc3c4db46f 100644 --- a/bt5/erp5_stock_cache/SkinTemplateItem/portal_skins/erp5_stock_cache/Resource_zInsertInventoryCacheResult.sql +++ b/bt5/erp5_stock_cache/SkinTemplateItem/portal_skins/erp5_stock_cache/Resource_zInsertInventoryCacheResult.sql @@ -1 +1 @@ -Insert into inventory_cache(`query`, `date`, `result`) values (<dtml-sqlvar query type="string">, <dtml-sqlvar date type="datetime">, <dtml-sqlvar result type="string">) \ No newline at end of file +Insert into inventory_cache(`query`, `date`, `result`) values (UNHEX(<dtml-sqlvar query type="string">), <dtml-sqlvar date type="datetime">, <dtml-sqlvar result type="string">) \ No newline at end of file diff --git a/product/ERP5/bootstrap/erp5_core/ToolComponentTemplateItem/portal_components/tool.erp5.SimulationTool.py b/product/ERP5/bootstrap/erp5_core/ToolComponentTemplateItem/portal_components/tool.erp5.SimulationTool.py index 9c5add27b0..ee689bca05 100644 --- a/product/ERP5/bootstrap/erp5_core/ToolComponentTemplateItem/portal_components/tool.erp5.SimulationTool.py +++ b/product/ERP5/bootstrap/erp5_core/ToolComponentTemplateItem/portal_components/tool.erp5.SimulationTool.py @@ -37,6 +37,7 @@ from Products.ERP5Type.Globals import InitializeClass from Products.ERP5Type import Permissions from Products.ERP5Type.Tool.BaseTool import BaseTool from Products.ERP5Type.UnrestrictedMethod import UnrestrictedMethod +from Products.ERP5Type.Utils import str2bytes from zLOG import LOG, PROBLEM, WARNING, INFO @@ -1411,10 +1412,10 @@ class SimulationTool(BaseTool): if src__: sql_source_list = [] # Generate the cache key (md5 of query source) - sql_text_hash = md5(Resource_zGetInventoryList( + sql_text_hash = md5(str2bytes(Resource_zGetInventoryList( stock_table_id=stock_table_id, src__=1, - **kw)).digest() + **kw))).hexdigest() # Try to get result from cache Resource_zGetInventoryCacheResult = self.Resource_zGetInventoryCacheResult inventory_cache_kw = {'query': sql_text_hash} -- 2.30.9