Skip to content

Commit 58543bc

Browse files
committed
[FIX] product: always compute zoomable with bin_size=False
Changing a product template's image with the `can_image_1024_be_zoomed` field present in the view produces a crash on save. **STEPS TO REPRODUCE** 1. Open a product form view 2. Using studio, add the `can_image_1024_be_zoomed` field 3. Change the image and save The product will be updated, but this error will be thrown: ``` binascii.Error: Incorrect padding ``` **CAUSE** https://github.com/odoo/odoo/blob/a74684777c27e26639b75b0668bb15afadb78c4f/addons/product/models/product_template.py#L186-L188 In the `RecordSet`'s context, `bin_size=True`, so accessing `image_<size>` returns a size instead of a binary. `_compute_can_image_1024_be_zoomed` calls `tools.is_image_size_above` with this binary size, while the method expects the full base64 encoded image. Ultimately, this causes `base64.b64decode` to crash with the above error. **FIX** Update the `RecordSet`'s context to `bin_size=False`. Accessing `image_<size>` from the `RecordSet` will then return the full binary instead of the size. **NOTES** In versions <17.0, read and write were done in separate network calls causing the recompute to happen during the flush of the write, which doesn't have `bin_size=True` in the context. Because the field is stored, the read will not cause a recompute and thus avoids any error. In >=17.0, because the read occurs before the flush, and the write has invalidated the field, the recompute will occur with the context of the read (`bin_size=True`), causing the issue. opw-4413647 closes odoo#192409 X-original-commit: 998f02c Signed-off-by: Samiul Hoque (saho) <saho@odoo.com>
1 parent bad3144 commit 58543bc

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

addons/product/models/product_template.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ def _compute_product_document_count(self):
197197

198198
@api.depends('image_1920', 'image_1024')
199199
def _compute_can_image_1024_be_zoomed(self):
200-
for template in self:
200+
for template in self.with_context(bin_size=False):
201201
template.can_image_1024_be_zoomed = template.image_1920 and is_image_size_above(template.image_1920, template.image_1024)
202202

203203
@api.depends(

0 commit comments

Comments
 (0)