in src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocServlet.java [218:248]
private Resource getImageResource(
Repository repo, DiffMode diffMode, ObjectId revId, ObjectId revIdB, String file) {
ObjectId id =
diffMode == DiffMode.NO_DIFF || diffMode == DiffMode.SIDEBYSIDE_A ? revId : revIdB;
try (RevWalk rw = new RevWalk(repo)) {
RevCommit commit = rw.parseCommit(id);
RevTree tree = commit.getTree();
try (TreeWalk tw = new TreeWalk(repo)) {
tw.addTree(tree);
tw.setRecursive(true);
tw.setFilter(PathFilter.create(file));
if (!tw.next()) {
return Resource.NOT_FOUND;
}
ObjectId objectId = tw.getObjectId(0);
ObjectLoader loader = repo.open(objectId);
byte[] content = loader.getBytes(Integer.MAX_VALUE);
MimeType mimeType = fileTypeRegistry.getMimeType(file, content);
if (!isSafeImage(mimeType)) {
return Resource.NOT_FOUND;
}
return new SmallResource(content)
.setContentType(mimeType.toString())
.setCharacterEncoding(UTF_8.name())
.setLastModified(commit.getCommitTime());
}
} catch (IOException e) {
return Resource.NOT_FOUND;
}
}