Convert RevisionSyntaxExceptions to 404s Catch these and return null from RevisionParser.parse(), causing ViewFilter to treat them as missing (404) rather than errors (500). Change-Id: I1a3fe5511b0db941c80d1ad6060e766a439d7a07
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/RevisionParser.java b/gitiles-servlet/src/main/java/com/google/gitiles/RevisionParser.java index 3e0acfa..cabde7c 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/RevisionParser.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/RevisionParser.java
@@ -22,6 +22,7 @@ import com.google.common.base.Splitter; import org.eclipse.jgit.errors.IncorrectObjectTypeException; +import org.eclipse.jgit.errors.RevisionSyntaxException; import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.revwalk.RevCommit; @@ -126,7 +127,7 @@ if (!isValidRevision(oldName)) { return null; } else { - ObjectId old = repo.resolve(oldName); + ObjectId old = resolve(oldName); if (old == null) { return null; } @@ -143,7 +144,7 @@ if (!isValidRevision(name)) { return null; } - ObjectId id = repo.resolve(name); + ObjectId id = resolve(name); if (id == null) { return null; } @@ -168,7 +169,7 @@ if (!isValidRevision(name)) { return null; } - ObjectId id = repo.resolve(name); + ObjectId id = resolve(name); if (id != null) { int pathStart; if (oldRevision == null) { @@ -188,6 +189,14 @@ } } + private ObjectId resolve(String name) throws IOException { + try { + return repo.resolve(name); + } catch (RevisionSyntaxException e) { + return null; + } + } + private static boolean isValidRevision(String revision) { // Disallow some uncommon but valid revision expressions that either we // don't support or we represent differently in our URLs.
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/RevisionParserTest.java b/gitiles-servlet/src/test/java/com/google/gitiles/RevisionParserTest.java index b0be155..d2480f9 100644 --- a/gitiles-servlet/src/test/java/com/google/gitiles/RevisionParserTest.java +++ b/gitiles-servlet/src/test/java/com/google/gitiles/RevisionParserTest.java
@@ -53,6 +53,7 @@ assertEquals(new Result(Revision.peeled("refs/heads/master", master)), parser.parse("refs/heads/master")); assertNull(parser.parse("refs//heads//master")); + assertNull(parser.parse("refs heads master")); } public void testParseRefParentExpression() throws Exception { @@ -67,6 +68,7 @@ assertEquals(new Result(Revision.peeled("master^", parent1)), parser.parse("master^")); assertEquals(new Result(Revision.peeled("master~1", parent1)), parser.parse("master~1")); assertEquals(new Result(Revision.peeled("master^2", parent2)), parser.parse("master^2")); + assertNull(parser.parse("master^3")); assertEquals(new Result(Revision.peeled("master~2", root)), parser.parse("master~2")); }