Merge "Never replace macros in binary files"
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);