2010-05-09 27 views
3

这是在我使用的称为Mirth的应用程序中,但它似乎来自Apache Commons库中的一个方法,该方法检查是否确实是Base64编码的东西。所有的文档都说唯一的回报是真的或假的,那么我怎么会得到-61?这种方法如何给我一个-61错误?

-61 
org.apache.commons.codec.binary.Base64.isBase64(Base64.java:137) 
org.apache.commons.codec.binary.Base64.discardNonBase64(Base64.java:478) 
org.apache.commons.codec.binary.Base64.decodeBase64(Base64.java:374) 
org.apache.commons.codec.binary.Base64.decode(Base64.java:220) 
com.webreach.mirth.plugins.pdfviewer.PDFViewer.viewAttachments(PDFViewer.java:51) 
com.webreach.mirth.client.ui.browsers.message.MessageBrowser$16.doInBackground(MessageBrowser.java:1429) 
com.webreach.mirth.client.ui.browsers.message.MessageBrowser$16.doInBackground(MessageBrowser.java:1426) 
org.jdesktop.swingworker.SwingWorker$1.call(SwingWorker.java:276) 
java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) 
java.util.concurrent.FutureTask.run(FutureTask.java:138) 
org.jdesktop.swingworker.SwingWorker.run(SwingWorker.java:315) 
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
java.lang.Thread.run(Thread.java:637) 

回答

4

这很可能是ArrayIndexOutOfBoundsException-61被认为是索引。

http://kickjava.com/src/org/apache/commons/codec/binary/Base64.java.htm

134  private static boolean isBase64(byte octect) { 
135   if (octect == PAD) { 
136    return true; 
137   } else if (base64Alphabet[octect] == -1) { // <--- 
138    return false; 
139   } else { 
140    return true; 
141   } 
142  } 

显然,输入不Base64编码。

+0

的确,不知道为什么,但项目的维护者决定不修复这个bug:https://issues.apache.org/jira/browse/CODEC-32 – alfasin 2016-05-12 23:46:17