diff --git a/addons/web/static/src/views/fields/parsers.js b/addons/web/static/src/views/fields/parsers.js index 8f4187fa8c1..4f8dd0a549a 100644 --- a/addons/web/static/src/views/fields/parsers.js +++ b/addons/web/static/src/views/fields/parsers.js @@ -139,6 +139,11 @@ export function parseInteger(value) { throw new InvalidNumberError(`"${value}" is not a correct number`); } } + if (parsed < -2147483648 || parsed > 2147483647) { + throw new InvalidNumberError( + `"${value}" is out of bounds (integers should be between -2,147,483,648 and 2,147,483,647)` + ); + } return parsed; } diff --git a/addons/web/static/tests/views/fields/parsers_tests.js b/addons/web/static/tests/views/fields/parsers_tests.js index 6964b062536..2955de44168 100644 --- a/addons/web/static/tests/views/fields/parsers_tests.js +++ b/addons/web/static/tests/views/fields/parsers_tests.js @@ -79,8 +79,12 @@ QUnit.module("Fields", (hooks) => { assert.strictEqual(parseInteger("-100"), -100); assert.strictEqual(parseInteger("1,000"), 1000); assert.strictEqual(parseInteger("1,000,000"), 1000000); + assert.strictEqual(parseInteger("-2,147,483,648"), -2147483648); + assert.strictEqual(parseInteger("2,147,483,647"), 2147483647); expectInvalidNumberError(assert, parseInteger, "1.000.000"); expectInvalidNumberError(assert, parseInteger, "1,234.567"); + expectInvalidNumberError(assert, parseInteger, "-2,147,483,649"); + expectInvalidNumberError(assert, parseInteger, "2,147,483,648"); patchWithCleanup(localization, { decimalPoint: ",", thousandsSep: "." });