odoo/odoo#192593
Created by fw-bot
Statuses:
- legal/cla: Contributor License Agreement check
- ci/runbot: Odoo Test Suite
- ci/upgrade_enterprise: Test upgrades for enterprise master
- ci/template: Contact runbot team on discord for help.
- ci/style: Optional style check. Ignore it only if strictly necessary.
- ci/security: Required security check. Can only be ignored by security team.
- label
- odoo-dev:saas-18.1-17.0-opw-4413647-saho-t66Z-fw
- head
- 81f4f8f153a5eafcd7749bf5fd96f39805c2a872
- merged
- 9 months ago by Samiul Hoque (saho)
odoo/odoo | |
---|---|
17.0 | #192047 |
saas-17.2 | #192402 |
saas-17.4 | #192409 |
18.0 | #192579 |
saas-18.1 | #192593 |
saas-18.2 | |
saas-18.3 | |
saas-18.4 | |
19.0 | |
master | #192604 |
[FW][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.