Skip to content

Commit e66d2fe

Browse files
committed
Fix #912: use requiresPaddingOnRead() instead of usesPadding() (#922)
1 parent bfee8e2 commit e66d2fe

File tree

4 files changed

+52
-12
lines changed

4 files changed

+52
-12
lines changed

src/main/java/com/fasterxml/jackson/core/json/ReaderBasedJsonParser.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -594,7 +594,7 @@ protected int _readBinary(Base64Variant b64variant, OutputStream out, byte[] buf
594594
if (ch == '"') {
595595
decodedData >>= 4;
596596
buffer[outputPtr++] = (byte) decodedData;
597-
if (b64variant.usesPadding()) {
597+
if (b64variant.requiresPaddingOnRead()) {
598598
--_inputPtr; // to keep parser state bit more consistent
599599
_handleBase64MissingPadding(b64variant);
600600
}
@@ -634,7 +634,7 @@ protected int _readBinary(Base64Variant b64variant, OutputStream out, byte[] buf
634634
decodedData >>= 2;
635635
buffer[outputPtr++] = (byte) (decodedData >> 8);
636636
buffer[outputPtr++] = (byte) decodedData;
637-
if (b64variant.usesPadding()) {
637+
if (b64variant.requiresPaddingOnRead()) {
638638
--_inputPtr; // to keep parser state bit more consistent
639639
_handleBase64MissingPadding(b64variant);
640640
}
@@ -2896,7 +2896,7 @@ protected byte[] _decodeBase64(Base64Variant b64variant) throws IOException
28962896
if (ch == '"') {
28972897
decodedData >>= 4;
28982898
builder.append(decodedData);
2899-
if (b64variant.usesPadding()) {
2899+
if (b64variant.requiresPaddingOnRead()) {
29002900
--_inputPtr; // to keep parser state bit more consistent
29012901
_handleBase64MissingPadding(b64variant);
29022902
}
@@ -2936,7 +2936,7 @@ protected byte[] _decodeBase64(Base64Variant b64variant) throws IOException
29362936
if (ch == '"') {
29372937
decodedData >>= 2;
29382938
builder.appendTwoBytes(decodedData);
2939-
if (b64variant.usesPadding()) {
2939+
if (b64variant.requiresPaddingOnRead()) {
29402940
--_inputPtr; // to keep parser state bit more consistent
29412941
_handleBase64MissingPadding(b64variant);
29422942
}

src/main/java/com/fasterxml/jackson/core/json/UTF8DataInputJsonParser.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -505,7 +505,7 @@ protected int _readBinary(Base64Variant b64variant, OutputStream out,
505505
if (ch == INT_QUOTE) {
506506
decodedData >>= 4;
507507
buffer[outputPtr++] = (byte) decodedData;
508-
if (b64variant.usesPadding()) {
508+
if (b64variant.requiresPaddingOnRead()) {
509509
_handleBase64MissingPadding(b64variant);
510510
}
511511
break;
@@ -539,7 +539,7 @@ protected int _readBinary(Base64Variant b64variant, OutputStream out,
539539
decodedData >>= 2;
540540
buffer[outputPtr++] = (byte) (decodedData >> 8);
541541
buffer[outputPtr++] = (byte) decodedData;
542-
if (b64variant.usesPadding()) {
542+
if (b64variant.requiresPaddingOnRead()) {
543543
_handleBase64MissingPadding(b64variant);
544544
}
545545
break;
@@ -2906,7 +2906,7 @@ protected final byte[] _decodeBase64(Base64Variant b64variant) throws IOExceptio
29062906
if (ch == INT_QUOTE) {
29072907
decodedData >>= 4;
29082908
builder.append(decodedData);
2909-
if (b64variant.usesPadding()) {
2909+
if (b64variant.requiresPaddingOnRead()) {
29102910
_handleBase64MissingPadding(b64variant);
29112911
}
29122912
return builder.toByteArray();
@@ -2938,7 +2938,7 @@ protected final byte[] _decodeBase64(Base64Variant b64variant) throws IOExceptio
29382938
if (ch == INT_QUOTE) {
29392939
decodedData >>= 2;
29402940
builder.appendTwoBytes(decodedData);
2941-
if (b64variant.usesPadding()) {
2941+
if (b64variant.requiresPaddingOnRead()) {
29422942
_handleBase64MissingPadding(b64variant);
29432943
}
29442944
return builder.toByteArray();

src/main/java/com/fasterxml/jackson/core/json/UTF8StreamJsonParser.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -652,7 +652,7 @@ protected int _readBinary(Base64Variant b64variant, OutputStream out,
652652
if (ch == INT_QUOTE) {
653653
decodedData >>= 4;
654654
buffer[outputPtr++] = (byte) decodedData;
655-
if (b64variant.usesPadding()) {
655+
if (b64variant.requiresPaddingOnRead()) {
656656
--_inputPtr; // to keep parser state bit more consistent
657657
_handleBase64MissingPadding(b64variant);
658658
}
@@ -692,7 +692,7 @@ protected int _readBinary(Base64Variant b64variant, OutputStream out,
692692
decodedData >>= 2;
693693
buffer[outputPtr++] = (byte) (decodedData >> 8);
694694
buffer[outputPtr++] = (byte) decodedData;
695-
if (b64variant.usesPadding()) {
695+
if (b64variant.requiresPaddingOnRead()) {
696696
--_inputPtr; // to keep parser state bit more consistent
697697
_handleBase64MissingPadding(b64variant);
698698
}
@@ -3786,7 +3786,7 @@ protected final byte[] _decodeBase64(Base64Variant b64variant) throws IOExceptio
37863786
if (ch == INT_QUOTE) {
37873787
decodedData >>= 4;
37883788
builder.append(decodedData);
3789-
if (b64variant.usesPadding()) {
3789+
if (b64variant.requiresPaddingOnRead()) {
37903790
--_inputPtr; // to keep parser state bit more consistent
37913791
_handleBase64MissingPadding(b64variant);
37923792
}
@@ -3825,7 +3825,7 @@ protected final byte[] _decodeBase64(Base64Variant b64variant) throws IOExceptio
38253825
if (ch == INT_QUOTE) {
38263826
decodedData >>= 2;
38273827
builder.appendTwoBytes(decodedData);
3828-
if (b64variant.usesPadding()) {
3828+
if (b64variant.requiresPaddingOnRead()) {
38293829
--_inputPtr; // to keep parser state bit more consistent
38303830
_handleBase64MissingPadding(b64variant);
38313831
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package com.fasterxml.jackson.core.base64;
2+
3+
import com.fasterxml.jackson.core.*;
4+
5+
public class Base64Padding912Test
6+
extends com.fasterxml.jackson.core.BaseTest
7+
{
8+
private final JsonFactory JSON_F = newStreamFactory();
9+
10+
public void testPaddingUsingInputStream() throws Exception
11+
{
12+
_testPadding(MODE_INPUT_STREAM);
13+
_testPadding(MODE_INPUT_STREAM_THROTTLED);
14+
}
15+
16+
public void testPaddingUsingReader() throws Exception
17+
{
18+
_testPadding(MODE_READER);
19+
}
20+
21+
public void testPaddingUsingDataInput() throws Exception
22+
{
23+
_testPadding(MODE_DATA_INPUT);
24+
}
25+
26+
private void _testPadding(int mode) throws Exception
27+
{
28+
Base64Variant b64v = Base64Variants.MIME_NO_LINEFEEDS
29+
.withReadPadding(Base64Variant.PaddingReadBehaviour.PADDING_ALLOWED);
30+
String json = "{\"diff\" : \"1sPEAASBOGM6XGFwYWNoZV9yb290X2Rldlx0bXBcX3N0YXBsZXJcNHEydHJhY3ZcYXZhc3RfZnJlZV9hbnRpdmlydXNfc2V0dXBfb25saW5lLmV4ZS8vYzpcYXBhY2hlX3Jvb3RfZGV2XHN0b3JhZ2VcY1w3XDFcYzcxZmViMTA2NDA5MTE4NzIwOGI4MGNkM2Q0NWE0YThcYXZhc3RfZnJlZV9hbnRpdmlydXNfc2V0dXBfb25saW5lLmV4ZS8FkK0pAKA2kLFgAJsXgyyBZfkKWXg6OZiYBgBYCQCASAAAgAMAAAC4AACABgEAgAoAAABYCACADgAAAJgIAIAQAAAA2AgAgBgAAAAYCWgAAIDJAAAAkHgJAwAqDwCoAAAAqBgDAIwOAAUAAQAAAPAAAIACAUABAIAEAQCABQEIAQAAOCcDAEAhADABAAB4SAMAKFgBAACgigMAqCUAAQAASLADAKgBAADwwAMAaAQAFQA\"}";
31+
try (JsonParser p = createParser(JSON_F, mode, json)) {
32+
assertToken(JsonToken.START_OBJECT, p.nextToken());
33+
assertEquals("diff", p.nextFieldName());
34+
assertToken(JsonToken.VALUE_STRING, p.nextToken());
35+
byte[] b = p.getBinaryValue(b64v);
36+
assertNotNull(b);
37+
assertToken(JsonToken.END_OBJECT, p.nextToken());
38+
}
39+
}
40+
}

0 commit comments

Comments
 (0)