@@ -487,18 +487,14 @@ public byte[] getBinaryValue(Base64Variant b64variant) throws IOException
487
487
(_currToken != JsonToken .VALUE_EMBEDDED_OBJECT || _binaryValue == null )) {
488
488
_reportError ("Current token (" +_currToken +") not VALUE_STRING or VALUE_EMBEDDED_OBJECT, can not access as binary" );
489
489
}
490
- /* To ensure that we won't see inconsistent data, better clear up
491
- * state...
492
- */
490
+ // To ensure that we won't see inconsistent data, better clear up state...
493
491
if (_tokenIncomplete ) {
494
492
try {
495
493
_binaryValue = _decodeBase64 (b64variant );
496
494
} catch (IllegalArgumentException iae ) {
497
495
throw _constructError ("Failed to decode VALUE_STRING as base64 (" +b64variant +"): " +iae .getMessage ());
498
496
}
499
- /* let's clear incomplete only now; allows for accessing other
500
- * textual content in error cases
501
- */
497
+ // let's clear incomplete only now; allows for accessing other textual content in error cases
502
498
_tokenIncomplete = false ;
503
499
} else { // may actually require conversion...
504
500
if (_binaryValue == null ) {
@@ -602,7 +598,9 @@ protected int _readBinary(Base64Variant b64variant, OutputStream out,
602
598
}
603
599
ch = _inputBuffer [_inputPtr ++] & 0xFF ;
604
600
if (!b64variant .usesPaddingChar (ch )) {
605
- throw reportInvalidBase64Char (b64variant , ch , 3 , "expected padding character '" +b64variant .getPaddingChar ()+"'" );
601
+ if (_decodeBase64Escape (b64variant , ch , 3 ) != Base64Variant .BASE64_VALUE_PADDING ) {
602
+ throw reportInvalidBase64Char (b64variant , ch , 3 , "expected padding character '" +b64variant .getPaddingChar ()+"'" );
603
+ }
606
604
}
607
605
// Got 12 bits, only need 8, need to shift
608
606
decodedData >>= 4 ;
@@ -3608,7 +3606,7 @@ protected final byte[] _decodeBase64(Base64Variant b64variant) throws IOExceptio
3608
3606
// First branch: can get padding (-> 1 byte)
3609
3607
if (bits < 0 ) {
3610
3608
if (bits != Base64Variant .BASE64_VALUE_PADDING ) {
3611
- // as per [JACKSON-631], could also just be 'missing' padding
3609
+ // could also just be 'missing' padding
3612
3610
if (ch == '"' && !b64variant .usesPadding ()) {
3613
3611
decodedData >>= 4 ;
3614
3612
builder .append (decodedData );
@@ -3623,7 +3621,9 @@ protected final byte[] _decodeBase64(Base64Variant b64variant) throws IOExceptio
3623
3621
}
3624
3622
ch = _inputBuffer [_inputPtr ++] & 0xFF ;
3625
3623
if (!b64variant .usesPaddingChar (ch )) {
3626
- throw reportInvalidBase64Char (b64variant , ch , 3 , "expected padding character '" +b64variant .getPaddingChar ()+"'" );
3624
+ if (_decodeBase64Escape (b64variant , ch , 3 ) != Base64Variant .BASE64_VALUE_PADDING ) {
3625
+ throw reportInvalidBase64Char (b64variant , ch , 3 , "expected padding character '" +b64variant .getPaddingChar ()+"'" );
3626
+ }
3627
3627
}
3628
3628
// Got 12 bits, only need 8, need to shift
3629
3629
decodedData >>= 4 ;
@@ -3641,7 +3641,7 @@ protected final byte[] _decodeBase64(Base64Variant b64variant) throws IOExceptio
3641
3641
bits = b64variant .decodeBase64Char (ch );
3642
3642
if (bits < 0 ) {
3643
3643
if (bits != Base64Variant .BASE64_VALUE_PADDING ) {
3644
- // as per [JACKSON-631], could also just be 'missing' padding
3644
+ // could also just be 'missing' padding
3645
3645
if (ch == '"' && !b64variant .usesPadding ()) {
3646
3646
decodedData >>= 2 ;
3647
3647
builder .appendTwoBytes (decodedData );
0 commit comments