You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Larry West (Jira)" <ji...@apache.org> on 2020/02/01 03:57:00 UTC

[jira] [Comment Edited] (CODEC-263) Base64.decodeBase64 throw exception

    [ https://issues.apache.org/jira/browse/CODEC-263?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17027952#comment-17027952 ] 

Larry West edited comment on CODEC-263 at 2/1/20 3:56 AM:
----------------------------------------------------------

I'm seeing the same issue (likely on bogus test data).

FWIW, in response to [~aherbert]'s final question: 
{quote}The question is should {{Base64.isBase64(String)}} do the same validation on the final character of the string?
{quote}
Background: the javadoc for {{isBase64(String)}} says: "returns true if all characters in the String are valid characters in the Base64 alphabet...".

My answer is that {{isBase64()}} still fulfills that contract, and that because there _could be_ people using it for purposes other than testing for decodability – _i.e.,_ avoiding the IllegalArgumentException – (perhaps on a partial buffer), the best way forward is to add an "{{isCompleteBase64()}}" or "{{isDecodableBase64()}}" that matches "{{decodeBase64()}}" exactly.

h3. Postscript

This is actually mentioned in [the 1.13 release notes|https://github.com/apache/commons-codec/blob/master/RELEASE-NOTES.txt], but it somehow didn't register with me when I read

bq. CODEC-134: Reject any decode request for a value that is impossible to encode to for Base32/Base64 rather than blindly decoding.

h3. Addendum

Yes, I may be able to take a stab at such a method if it's deemed helpful and no one better equipped is available.


was (Author: larry_west):
I'm seeing the same issue (likely on bogus test data).

FWIW, in response to [~aherbert]'s final question: 
{quote}The question is should {{Base64.isBase64(String)}} do the same validation on the final character of the string?
{quote}
Background: the javadoc for {{isBase64(String)}} says: "returns true if all characters in the String are valid characters in the Base64 alphabet...".

My answer is that {{isBase64()}} still fulfills that contract, and that because there _could be_ people using it for purposes other than testing for decodability – _i.e.,_ avoiding the IllegalArgumentException – (perhaps on a partial buffer), the best way forward is to add an "{{isCompleteBase64()}}" or "{{isDecodableBase64()}}" that matches "{{decodeBase64()}}" exactly.

h3. Postscript

This is actually mentioned in [the 1.13 release notes|https://github.com/apache/commons-codec/blob/master/RELEASE-NOTES.txt], but it somehow didn't register with me when I read

bq. CODEC-134: Reject any decode request for a value that is impossible to encode to for Base32/Base64 rather than blindly decoding.

 h3. Addendum

Yes, I may be able to take a stab at such a method if it's deemed helpful and no one better equipped is available.

> Base64.decodeBase64 throw exception
> -----------------------------------
>
>                 Key: CODEC-263
>                 URL: https://issues.apache.org/jira/browse/CODEC-263
>             Project: Commons Codec
>          Issue Type: Bug
>    Affects Versions: 1.13
>         Environment: JDK 7/JDK 8 
> commons-codec 1.13
>            Reporter: xie tao
>            Priority: Critical
>         Attachments: image-jpg-01-big.base64.txt
>
>
> Codec upgrade to 1.13, code  throw exception as follows:
> {code:java}
>   @Test
>   public  void test(){
>     Base64.decodeBase64("publishMessage");
>   }
> {code}
> exception like:
> {code:java}
> java.lang.IllegalArgumentException: Last encoded character (before the paddings if any) is a valid base 64 alphabet but not a possible value
> 	at org.apache.commons.codec.binary.Base64.validateCharacter(Base64.java:798)
> 	at org.apache.commons.codec.binary.Base64.decode(Base64.java:472)
> 	at org.apache.commons.codec.binary.BaseNCodec.decode(BaseNCodec.java:412)
> 	at org.apache.commons.codec.binary.BaseNCodec.decode(BaseNCodec.java:395)
> 	at org.apache.commons.codec.binary.Base64.decodeBase64(Base64.java:694)
> {code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)