mirror of
https://github.com/zulip/zulip.git
synced 2025-11-03 21:43:21 +00:00
subs: Fix incorrect use of RegExp in stream filtering.
When filtering streams, we were incorrectly treating the regexp input provided by the user as a regular expression, meaning that terms like `c++` would trigger errors because they are invalid regular expression syntax. We fix this by replacing RegExp with a simple IndexOf check. Node test added by tabbott. Fixes #3559.
This commit is contained in:
@@ -41,10 +41,16 @@ i18n.init({
|
|||||||
name: 'Pomona',
|
name: 'Pomona',
|
||||||
stream_id: 3,
|
stream_id: 3,
|
||||||
};
|
};
|
||||||
|
var cpp = {
|
||||||
|
subscribed: true,
|
||||||
|
name: 'C++',
|
||||||
|
stream_id: 4,
|
||||||
|
};
|
||||||
|
|
||||||
var elem_1 = $(global.render_template("subscription", denmark));
|
var elem_1 = $(global.render_template("subscription", denmark));
|
||||||
var elem_2 = $(global.render_template("subscription", poland));
|
var elem_2 = $(global.render_template("subscription", poland));
|
||||||
var elem_3 = $(global.render_template("subscription", pomona));
|
var elem_3 = $(global.render_template("subscription", pomona));
|
||||||
|
var elem_4 = $(global.render_template("subscription", cpp));
|
||||||
|
|
||||||
$("body").empty();
|
$("body").empty();
|
||||||
$("body").append('<div id="subscriptions_table"></div>');
|
$("body").append('<div id="subscriptions_table"></div>');
|
||||||
@@ -54,6 +60,7 @@ i18n.init({
|
|||||||
stream_data.add_sub("Denmark", denmark);
|
stream_data.add_sub("Denmark", denmark);
|
||||||
stream_data.add_sub("Poland", poland);
|
stream_data.add_sub("Poland", poland);
|
||||||
stream_data.add_sub("Pomona", pomona);
|
stream_data.add_sub("Pomona", pomona);
|
||||||
|
stream_data.add_sub("C++", cpp);
|
||||||
|
|
||||||
streams_list.append(elem_1);
|
streams_list.append(elem_1);
|
||||||
streams_list.append(elem_2);
|
streams_list.append(elem_2);
|
||||||
@@ -82,6 +89,13 @@ i18n.init({
|
|||||||
assert(!elem_2.hasClass("notdisplayed"));
|
assert(!elem_2.hasClass("notdisplayed"));
|
||||||
assert(!elem_3.hasClass("notdisplayed"));
|
assert(!elem_3.hasClass("notdisplayed"));
|
||||||
|
|
||||||
|
// Search handles unusual characters like C++
|
||||||
|
subs.filter_table({input: "c++", subscribed_only: false});
|
||||||
|
assert(elem_1.hasClass("notdisplayed"));
|
||||||
|
assert(elem_2.hasClass("notdisplayed"));
|
||||||
|
assert(elem_3.hasClass("notdisplayed"));
|
||||||
|
assert(!elem_4.hasClass("notdisplayed"));
|
||||||
|
|
||||||
// Search subscribed streams only
|
// Search subscribed streams only
|
||||||
subs.filter_table({input: "d", subscribed_only: true});
|
subs.filter_table({input: "d", subscribed_only: true});
|
||||||
assert(elem_1.hasClass("notdisplayed"));
|
assert(elem_1.hasClass("notdisplayed"));
|
||||||
|
|||||||
@@ -510,7 +510,9 @@ function stream_matches_query(query, sub) {
|
|||||||
var sub_name = sub.name.toLowerCase();
|
var sub_name = sub.name.toLowerCase();
|
||||||
|
|
||||||
return _.any(search_terms, function (o) {
|
return _.any(search_terms, function (o) {
|
||||||
return new RegExp(o).test(sub_name);
|
if (sub_name.indexOf(o) !== -1) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}());
|
}());
|
||||||
flag = flag && ((sub.subscribed || !query.subscribed_only) ||
|
flag = flag && ((sub.subscribed || !query.subscribed_only) ||
|
||||||
|
|||||||
Reference in New Issue
Block a user