diff options
| author | Xavier Morel <xmo@odoo.com> | 2020-02-05 10:34:51 +0000 |
|---|---|---|
| committer | Xavier Morel <xmo@odoo.com> | 2020-02-12 09:32:17 +0000 |
| commit | e95ccf0908c263f6cf23c91c477a8e252e936ff1 (patch) | |
| tree | f5e7b10ebf7726a9f17598f0407d0a8cb14298c3 /addons/web/static/src/js/core/domain.js | |
| parent | 968638aa1a158d24789ba6f0374436c74f807f2e (diff) | |
[FIX] *: domains should not have as many binary operator as there are terms
* modify client-side domain normalisation to error if the domain is
invalid (not enough terms / segments for the number of operators)
* add better error reporting to attrs / modifiers parsing
* add a few layered error augmentation to provide clearer context
e.g. "error: invalid domain <thing>" is helpful but "error while
parsing modifiers for field foo: modifier invisible: invalid domain
<thing>" is much more helpful
* rework _evalModifiers to deduplicate it in order to more easily
implement this contextual augmentation
* test that improper domains are properly found improper
* fix a bunch of incorrect attrs domains
* also removed an apparently undefined (& unused) "options" argument
to a _applyModifiers call
closes odoo/odoo#44642
Related: odoo/enterprise#8175
Signed-off-by: Xavier Morel (xmo) <xmo@odoo.com>
Diffstat (limited to 'addons/web/static/src/js/core/domain.js')
| -rw-r--r-- | addons/web/static/src/js/core/domain.js | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/addons/web/static/src/js/core/domain.js b/addons/web/static/src/js/core/domain.js index b54dd54d0b6..0db9847645d 100644 --- a/addons/web/static/src/js/core/domain.js +++ b/addons/web/static/src/js/core/domain.js @@ -383,8 +383,10 @@ var Domain = collections.Tree.extend({ * to normalize (! will be normalized in-place) * @returns {Array} the normalized JS prefix-array representation of the * given domain + * @throws {Error} if the domain is invalid and can't be normalised */ normalizeArray: function (domain) { + if (domain.length === 0) { return domain; } var expected = 1; _.each(domain, function (item) { if (item === "&" || item === "|") { @@ -395,6 +397,11 @@ var Domain = collections.Tree.extend({ }); if (expected < 0) { domain.unshift.apply(domain, _.times(Math.abs(expected), _.constant("&"))); + } else if (expected > 0) { + throw new Error(_.str.sprintf( + "invalid domain %s (missing %d segment(s))", + JSON.stringify(domain), expected + )); } return domain; }, |
