Files
gerrit/java/com
Edwin Kempin e9f5e658ae AccountResolver: Fix StringIndexOutOfBoundsException
If a change query is done for an account with the 'Full Name <email>'
format, Gerrit first finds accounts that match the email. If there are
multiple accounts that match the email, Gerrit only returns the matches
where also the full name matches. This logic to match on the full name
run into a StringIndexOutOfBoundsException when the input string was an
email surrounded by '<' and '>', e.g. "<foo.bar@example.com>". Such an
input string is deteced as 'Full Name <email>' format but then parsing
the full name in front of '<' failed because it is not present in the
input string.

Stacktrace:
java.lang.StringIndexOutOfBoundsException: String index out of range: -1
  at java.lang.String.substring(String.java:1969)
  at com.google.gerrit.server.account.AccountResolver$ByNameAndEmail.search(AccountResolver.java:349)
  at com.google.gerrit.server.account.AccountResolver$ByNameAndEmail.search(AccountResolver.java:328)
  at com.google.gerrit.server.account.AccountResolver$Searcher.trySearch(AccountResolver.java:227)
  at com.google.gerrit.server.account.AccountResolver.searchImpl(AccountResolver.java:595)
  at com.google.gerrit.server.account.AccountResolver.resolve(AccountResolver.java:519)
  at com.google.gerrit.server.query.change.ChangeQueryBuilder.parseAccount(ChangeQueryBuilder.java:1394)
  at com.google.gerrit.server.query.change.ChangeQueryBuilder.ownerDefaultField(ChangeQueryBuilder.java:1034)
  at com.google.gerrit.server.query.change.ChangeQueryBuilder.defaultField(ChangeQueryBuilder.java:1320)
  at com.google.gerrit.index.query.QueryBuilder.toPredicate(QueryBuilder.java:258)
  at com.google.gerrit.index.query.QueryBuilder.children(QueryBuilder.java:331)
  at com.google.gerrit.index.query.QueryBuilder.toPredicate(QueryBuilder.java:251)
  at com.google.gerrit.index.query.QueryBuilder.parse(QueryBuilder.java:224)
  at com.google.gerrit.index.query.QueryBuilder.parse(QueryBuilder.java:243)
  at com.google.gerrit.server.restapi.change.QueryChanges.query(QueryChanges.java:166)
  at com.google.gerrit.server.restapi.change.QueryChanges.apply(QueryChanges.java:130)
  at com.google.gerrit.server.restapi.change.QueryChanges.apply(QueryChanges.java:45)
  ...

Signed-off-by: Edwin Kempin <ekempin@google.com>
Change-Id: Id03b16fedd6b31ac2666d165a0627a46c163f3c7
2020-02-19 10:38:55 +01:00
..