Skip to content

Commit

Permalink
don't validate the js text in a $where
Browse files Browse the repository at this point in the history
fixes #2329
  • Loading branch information
evanchooly committed Apr 18, 2023
1 parent affca3d commit 07d3563
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 1 deletion.
2 changes: 1 addition & 1 deletion core/src/main/java/dev/morphia/query/filters/Filters.java
Original file line number Diff line number Diff line change
Expand Up @@ -619,7 +619,7 @@ public static Filter where(String val) {
@Override
public void encode(Datastore datastore, BsonWriter writer, EncoderContext context) {
writer.writeName(getName());
Object where = getValue(datastore);
Object where = getValue();
if (where != null) {
String value = where.toString().trim();
if (!value.startsWith("function()")) {
Expand Down
27 changes: 27 additions & 0 deletions core/src/test/java/dev/morphia/test/query/FiltersTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@

import dev.morphia.aggregation.expressions.ComparisonExpressions;
import dev.morphia.aggregation.expressions.Miscellaneous;
import dev.morphia.annotations.Entity;
import dev.morphia.annotations.Id;
import dev.morphia.query.FindOptions;
import dev.morphia.query.Meta;
import dev.morphia.query.Query;
Expand Down Expand Up @@ -45,7 +47,9 @@
import static dev.morphia.query.filters.Filters.size;
import static dev.morphia.query.filters.Filters.text;
import static dev.morphia.query.filters.Filters.type;
import static dev.morphia.query.filters.Filters.where;
import static java.util.Arrays.asList;
import static java.util.List.of;
import static org.bson.Document.parse;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNull;
Expand Down Expand Up @@ -334,4 +338,27 @@ public void testSize() {

assertNull(likes);
}

@Test
public void testWhere() {
getMapper().map(Player.class);
insert("players", of(
parse("{ _id: 12378, name: 'Steve', username: 'steveisawesome', first_login: '2017-01-01' }"),
parse("{ _id: 2, name: 'Anya', username: 'anya', first_login: '2001-02-02' }")));

Player player = getDs().find(Player.class)
.filter(where("return (hex_md5(this.name) == '9b53e667f30cd329dca1ec9e6a83e994')"))
.first();

assertEquals(player.name, "Anya");
}

@Entity(value = "players", useDiscriminator = false)
private static class Player {
@Id
private int id;
String name;
String username;
String first_login;
}
}

0 comments on commit 07d3563

Please sign in to comment.