Never replace macros in binary files Change-Id: I44113eee9e8968606f3280a055db72e138157d0c Signed-off-by: Edwin Kempin <edwin.kempin@sap.com>
diff --git a/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocLoader.java b/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocLoader.java index e6dd9f7..cf0971c 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocLoader.java +++ b/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocLoader.java
@@ -108,18 +108,20 @@ ObjectId objectId = tw.getObjectId(0); ObjectLoader loader = repo.open(objectId); byte[] bytes = loader.getBytes(Integer.MAX_VALUE); - if (formatter.getName().equals(Formatters.RAW_FORMATTER) - && RawText.isBinary(bytes)) { + boolean isBinary = RawText.isBinary(bytes); + if (formatter.getName().equals(Formatters.RAW_FORMATTER) && isBinary) { return Resources.METHOD_NOT_ALLOWED; } ObjectReader reader = repo.newObjectReader(); try { String abbrRevId = reader.abbreviate(revId).name(); + String raw = new String(bytes, UTF_8); + if (!isBinary) { + raw = replaceMacros(repo, key.getProject(), revId, abbrRevId, raw); + } String html = formatter.get().format(key.getProject().get(), - abbrRevId, formatterCfg, - replaceMacros(repo, key.getProject(), revId, - abbrRevId, bytes)); + abbrRevId, formatterCfg, raw); return getAsHtmlResource(html, commit.getCommitTime()); } finally { reader.release(); @@ -136,7 +138,7 @@ } private String replaceMacros(Repository repo, Project.NameKey project, - ObjectId revId, String abbrRevId, byte[] raw) throws GitAPIException, + ObjectId revId, String abbrRevId, String raw) throws GitAPIException, IOException { Map<String, String> macros = Maps.newHashMap(); @@ -153,8 +155,7 @@ (new Git(repo)).describe().setTarget(revId).call(), abbrRevId)); - Matcher m = Pattern.compile("(\\\\)?@([A-Z_]+)@") - .matcher(new String(raw, UTF_8)); + Matcher m = Pattern.compile("(\\\\)?@([A-Z_]+)@").matcher(raw); StringBuffer sb = new StringBuffer(); while (m.find()) { String key = m.group(2);