diff --git a/spec/ParseQuery.spec.js b/spec/ParseQuery.spec.js index 730e7724..036b1064 100644 --- a/spec/ParseQuery.spec.js +++ b/spec/ParseQuery.spec.js @@ -1186,7 +1186,7 @@ describe('Parse.Query testing', () => { }); }); - fit("regexes with invalid options fail", function(done) { + it("regexes with invalid options fail", function(done) { var query = new Parse.Query(TestObject); query.matches("myString", "FootBall", "some invalid option"); query.find(expectError(Parse.Error.INVALID_QUERY, done)); diff --git a/src/Adapters/Storage/Mongo/MongoTransform.js b/src/Adapters/Storage/Mongo/MongoTransform.js index 47a270b3..1fff6378 100644 --- a/src/Adapters/Storage/Mongo/MongoTransform.js +++ b/src/Adapters/Storage/Mongo/MongoTransform.js @@ -517,13 +517,7 @@ function transformConstraint(constraint, inArray) { break; case '$options': - var options = constraint[key]; - if (!answer['$regex'] || (typeof options !== 'string') - || !options.match(/^[imxs]+$/)) { - throw new Parse.Error(Parse.Error.INVALID_QUERY, - 'got a bad $options'); - } - answer[key] = options; + answer[key] = constraint[key]; break; case '$nearSphere': diff --git a/src/Controllers/DatabaseController.js b/src/Controllers/DatabaseController.js index 5c26889c..bd28b990 100644 --- a/src/Controllers/DatabaseController.js +++ b/src/Controllers/DatabaseController.js @@ -67,6 +67,13 @@ const validateQuery = query => { } Object.keys(query).forEach(key => { + if (query[key].$regex) { + if (typeof query[key].$options === 'string') {g + if (!query[key].$options.match(/^[imxs]+$/)) { + throw new Parse.Error(Parse.Error.INVALID_QUERY, `Bad $options value for query: ${query[key].$options}`); + } + } + } if (!specialQuerykeys.includes(key) && !key.match(/^[a-zA-Z][a-zA-Z0-9_\.]*$/)) { throw new Parse.Error(Parse.Error.INVALID_KEY_NAME, `Invalid key name: ${key}`); }