mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[vcs-log] properly escape filtered user names IDEA-141382 IDEA-141158 IDEA-121827
This commit is contained in:
@@ -15,16 +15,23 @@
|
||||
*/
|
||||
package com.intellij.vcs.log;
|
||||
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.util.Function;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class UserNameRegex implements Function<String, String> {
|
||||
public static final UserNameRegex INSTANCE = new UserNameRegex();
|
||||
@NotNull public static final UserNameRegex BASIC_INSTANCE = new UserNameRegex(false);
|
||||
@NotNull public static final UserNameRegex EXTENDED_INSTANCE = new UserNameRegex(true);
|
||||
@NotNull private static final char[] BASIC_REGEX_CHARS = new char[]{'.', '^', '$', '*', '[', ']'};
|
||||
@NotNull public static final char[] EXTENDED_REGEX_CHARS = new char[]{'.', '^', '$', '*', '+', '-', '?', '(', ')', '[', ']', '{', '}', '|'};
|
||||
private final boolean myExtended;
|
||||
|
||||
private UserNameRegex() {
|
||||
private UserNameRegex(boolean extended) {
|
||||
myExtended = extended;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String fun(String s) {
|
||||
return "^" + s + "$";
|
||||
return "^" + StringUtil.escapeChars(StringUtil.escapeBackSlashes(s), myExtended ? EXTENDED_REGEX_CHARS : BASIC_REGEX_CHARS) + "$";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -463,12 +463,7 @@ public class GitLogProvider implements VcsLogProvider {
|
||||
|
||||
if (filterCollection.getUserFilter() != null) {
|
||||
String authorFilter =
|
||||
StringUtil.join(ContainerUtil.map(filterCollection.getUserFilter().getUserNames(root), new Function<String, String>() {
|
||||
@Override
|
||||
public String fun(String s) {
|
||||
return UserNameRegex.INSTANCE.fun(StringUtil.escapeBackSlashes(s));
|
||||
}
|
||||
}), "\\|");
|
||||
StringUtil.join(ContainerUtil.map(filterCollection.getUserFilter().getUserNames(root), UserNameRegex.BASIC_INSTANCE), "\\|");
|
||||
filterParameters.add(prepareParameter("author", authorFilter));
|
||||
}
|
||||
|
||||
|
||||
@@ -21,10 +21,7 @@ import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.Function;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.containers.MultiMap;
|
||||
import com.intellij.vcs.log.TimedVcsCommit;
|
||||
import com.intellij.vcs.log.VcsLogObjectsFactory;
|
||||
import com.intellij.vcs.log.VcsLogUserFilter;
|
||||
import com.intellij.vcs.log.VcsUser;
|
||||
import com.intellij.vcs.log.*;
|
||||
import com.intellij.vcs.log.impl.VcsLogFilterCollectionImpl;
|
||||
import com.intellij.vcs.log.ui.filter.VcsLogUserFilterImpl;
|
||||
import git4idea.test.GitSingleRepoTest;
|
||||
@@ -73,7 +70,7 @@ public class GitUserFilterTest extends GitSingleRepoTest {
|
||||
public void testWeirdCharacters() throws Exception {
|
||||
List<String> names = ContainerUtil.newArrayList();
|
||||
|
||||
for (Character c : new char[]{'.', '^', '$', '*', '+', '-', '?', '(', ')', '[', ']', '{', '}', '|'}) {
|
||||
for (Character c : UserNameRegex.EXTENDED_REGEX_CHARS) {
|
||||
String name = "user" + Character.toString(c) + "userovich";
|
||||
names.add(name);
|
||||
names.add(name + "@company.com");
|
||||
|
||||
@@ -222,7 +222,7 @@ public class HgLogProvider implements VcsLogProvider {
|
||||
if (filterCollection.getUserFilter() != null) {
|
||||
filterParameters.add("-r");
|
||||
String authorFilter =
|
||||
StringUtil.join(ContainerUtil.map(filterCollection.getUserFilter().getUserNames(root), UserNameRegex.INSTANCE), "|");
|
||||
StringUtil.join(ContainerUtil.map(filterCollection.getUserFilter().getUserNames(root), UserNameRegex.EXTENDED_INSTANCE), "|");
|
||||
filterParameters.add("user('re:" + authorFilter + "')");
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user