diff --git a/odoo/addons/base/i18n/base.pot b/odoo/addons/base/i18n/base.pot index a0f2ebdd168..26c5969097b 100644 --- a/odoo/addons/base/i18n/base.pot +++ b/odoo/addons/base/i18n/base.pot @@ -18284,6 +18284,15 @@ msgstr "" msgid "Invalid value for %s.%s: %s" msgstr "" +#. module: base +#. odoo-python +#: code:addons/base/models/ir_default.py:0 +#, python-format +msgid "" +"Invalid value for %s.%s: %s is out of bounds (integers should be between " +"-2,147,483,648 and 2,147,483,647)" +msgstr "" + #. module: base #. odoo-python #: code:addons/base/models/ir_ui_view.py:0 diff --git a/odoo/addons/base/models/ir_default.py b/odoo/addons/base/models/ir_default.py index 561e0dde56c..c65693f18e9 100644 --- a/odoo/addons/base/models/ir_default.py +++ b/odoo/addons/base/models/ir_default.py @@ -72,12 +72,14 @@ class IrDefault(models.Model): try: model = self.env[model_name] field = model._fields[field_name] - field.convert_to_cache(value, model) + parsed = field.convert_to_cache(value, model) json_value = json.dumps(value, ensure_ascii=False) except KeyError: raise ValidationError(_("Invalid field %s.%s", model_name, field_name)) except Exception: raise ValidationError(_("Invalid value for %s.%s: %s", model_name, field_name, value)) + if field.type == 'integer' and not (-2**31 < parsed < 2**31-1): + raise ValidationError(_("Invalid value for %s.%s: %s is out of bounds (integers should be between -2,147,483,648 and 2,147,483,647)", model_name, field_name, value)) # update existing default for the same scope, or create one field = self.env['ir.model.fields']._get(model_name, field_name) diff --git a/odoo/addons/base/tests/test_ir_default.py b/odoo/addons/base/tests/test_ir_default.py index 1d05722db52..3672f95a3fd 100644 --- a/odoo/addons/base/tests/test_ir_default.py +++ b/odoo/addons/base/tests/test_ir_default.py @@ -92,6 +92,8 @@ class TestIrDefault(TransactionCase): IrDefault.set('res.partner', 'lang', 'some_LANG') with self.assertRaises(ValidationError): IrDefault.set('res.partner', 'partner_latitude', 'foo') + with self.assertRaises(ValidationError): + IrDefault.set('res.partner', 'color', 2147483648) def test_removal(self): """ check defaults for many2one with their value being removed """