From a8eb891c51113960c665b434290ebf64309c47b0 Mon Sep 17 00:00:00 2001 From: Jason Posthuma Date: Mon, 7 Jun 2021 11:17:08 +0200 Subject: [PATCH 1/5] Add check for property --- src/LiveQuery/QueryTools.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/LiveQuery/QueryTools.js b/src/LiveQuery/QueryTools.js index 735788218b..7d0dabdc64 100644 --- a/src/LiveQuery/QueryTools.js +++ b/src/LiveQuery/QueryTools.js @@ -254,7 +254,7 @@ function matchesKeyConstraints(object, key, constraints) { break; case '$all': for (i = 0; i < compareTo.length; i++) { - if (object[key].indexOf(compareTo[i]) < 0) { + if (object[key] && object[key].indexOf(compareTo[i]) < 0) { return false; } } From b597244cad3fb220f5f343b6ff601ab306020499 Mon Sep 17 00:00:00 2001 From: Jason Posthuma Date: Wed, 9 Jun 2021 10:19:41 +0200 Subject: [PATCH 2/5] updated changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0bd81b3fe8..027086a044 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -134,6 +134,7 @@ ___ - Add NPM package-lock version check to CI (Manuel Trezza) [#7333](https://github.com/parse-community/parse-server/pull/7333) - Fix incorrect LiveQuery events triggered for multiple subscriptions on the same class with different events [#7341](https://github.com/parse-community/parse-server/pull/7341) - Fix select and excludeKey queries to properly accept JSON string arrays. Also allow nested fields in exclude (Corey Baker) [#7242](https://github.com/parse-community/parse-server/pull/7242) +- Added safety check for attribute when filtering (Jason Posthuma) [#7421](https://github.com/parse-community/parse-server/pull/7421) ___ ## 4.5.0 From 25c8461641abe06ecf15b1d93234a4516bce8d0f Mon Sep 17 00:00:00 2001 From: Jason Posthuma Date: Fri, 11 Jun 2021 15:35:46 +0200 Subject: [PATCH 3/5] Fixed logic returning false positive --- src/LiveQuery/QueryTools.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/LiveQuery/QueryTools.js b/src/LiveQuery/QueryTools.js index 7d0dabdc64..905919ef61 100644 --- a/src/LiveQuery/QueryTools.js +++ b/src/LiveQuery/QueryTools.js @@ -253,8 +253,11 @@ function matchesKeyConstraints(object, key, constraints) { } break; case '$all': + if (!object[key]) { + return false; + } for (i = 0; i < compareTo.length; i++) { - if (object[key] && object[key].indexOf(compareTo[i]) < 0) { + if (object[key].indexOf(compareTo[i]) < 0) { return false; } } From 9db4b2592ad4e79678ec92cdc33b9889becca604 Mon Sep 17 00:00:00 2001 From: Jason Posthuma Date: Fri, 11 Jun 2021 15:35:58 +0200 Subject: [PATCH 4/5] Added test case --- spec/QueryTools.spec.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/spec/QueryTools.spec.js b/spec/QueryTools.spec.js index de4772a61c..7e09078dad 100644 --- a/spec/QueryTools.spec.js +++ b/spec/QueryTools.spec.js @@ -313,6 +313,16 @@ describe('matchesQuery', function () { expect(matchesQuery(player, orQuery)).toBe(true); }); + it('does not match $all query when value is missing', () => { + const player = { + id: new Id('Player', 'P1'), + name: 'Player 1', + score: 12, + }; + const q = { missing: { $all: [1, 2, 3] } }; + expect(matchesQuery(player, q)).toBe(false); + }); + it('matches an $and query', () => { const player = { id: new Id('Player', 'P1'), From 94d387f486fea89871fa8f1f4efd59275fd44a9b Mon Sep 17 00:00:00 2001 From: Jason Posthuma Date: Mon, 21 Jun 2021 10:27:45 +0200 Subject: [PATCH 5/5] update change log --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 027086a044..9ef7d9e2c2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -134,7 +134,7 @@ ___ - Add NPM package-lock version check to CI (Manuel Trezza) [#7333](https://github.com/parse-community/parse-server/pull/7333) - Fix incorrect LiveQuery events triggered for multiple subscriptions on the same class with different events [#7341](https://github.com/parse-community/parse-server/pull/7341) - Fix select and excludeKey queries to properly accept JSON string arrays. Also allow nested fields in exclude (Corey Baker) [#7242](https://github.com/parse-community/parse-server/pull/7242) -- Added safety check for attribute when filtering (Jason Posthuma) [#7421](https://github.com/parse-community/parse-server/pull/7421) +- Fix LiveQuery server crash when using $all query operator on a missing object key (Jason Posthuma) [#7421](https://github.com/parse-community/parse-server/pull/7421) ___ ## 4.5.0