Catch and log errors parsing README.md Don't display a README.md that crashes the CommonMark parser, log the failure and continue displaying the page. Users who click on README.md may still get a 500 error. Change-Id: Id1c1cc73a1732b0d9684f5261a4d103d59e17f03
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/ReadmeHelper.java b/gitiles-servlet/src/main/java/com/google/gitiles/ReadmeHelper.java index eee4d83..9a05f35 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/ReadmeHelper.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/ReadmeHelper.java
@@ -22,7 +22,6 @@ import org.commonmark.node.Node; import org.eclipse.jgit.errors.CorruptObjectException; import org.eclipse.jgit.errors.IncorrectObjectTypeException; -import org.eclipse.jgit.errors.LargeObjectException; import org.eclipse.jgit.errors.MissingObjectException; import org.eclipse.jgit.lib.Config; import org.eclipse.jgit.lib.Constants; @@ -104,8 +103,15 @@ } return new MarkdownToHtml(view, cfg, readmePath).setImageLoader(img).toSoyHtml(root); - } catch (LargeObjectException | IOException e) { - log.error(String.format("error rendering %s/%s", view.getRepositoryName(), readmePath), e); + } catch (RuntimeException | IOException err) { + log.error( + String.format( + "error rendering %s/%s %s:%s", + view.getHostName(), + view.getRepositoryName(), + view.getRevision(), + readmePath), + err); return null; } }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryIndexServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryIndexServlet.java index c45e0e6..f4d9327 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryIndexServlet.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryIndexServlet.java
@@ -24,6 +24,7 @@ import com.google.common.collect.Maps; import com.google.gitiles.DateFormatter.Format; import com.google.gson.reflect.TypeToken; +import com.google.template.soy.data.SanitizedContent; import org.eclipse.jgit.errors.IncorrectObjectTypeException; import org.eclipse.jgit.http.server.ServletUtils; @@ -171,7 +172,10 @@ rootTree); readme.scanTree(rootTree); if (readme.isPresent()) { - return ImmutableMap.<String, Object>of("readmeHtml", readme.render()); + SanitizedContent html = readme.render(); + if (html != null) { + return ImmutableMap.<String, Object>of("readmeHtml", html); + } } return null; }