Skip to content

Commit 856d60d

Browse files
committed
Use JDK8 Base64 instead of own implementation
1 parent 894d0bb commit 856d60d

File tree

23 files changed

+73
-215
lines changed

23 files changed

+73
-215
lines changed

Diff for: lucene/core/src/java/org/apache/lucene/util/BytesRef.java

+5
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
*/
1717
package org.apache.lucene.util;
1818

19+
import java.nio.ByteBuffer;
1920
import java.util.Arrays;
2021

2122
/**
@@ -211,4 +212,8 @@ public boolean isValid() {
211212
}
212213
return true;
213214
}
215+
216+
public ByteBuffer wrapToByteBuffer() {
217+
return ByteBuffer.wrap(bytes, offset, length);
218+
}
214219
}

Diff for: solr/core/src/java/org/apache/solr/handler/admin/LukeRequestHandler.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,11 @@
1818

1919
import java.io.IOException;
2020
import java.lang.invoke.MethodHandles;
21+
import java.nio.charset.StandardCharsets;
2122
import java.nio.file.NoSuchFileException;
2223
import java.util.ArrayList;
2324
import java.util.Arrays;
25+
import java.util.Base64;
2426
import java.util.Date;
2527
import java.util.HashMap;
2628
import java.util.LinkedList;
@@ -66,7 +68,6 @@
6668
import org.apache.solr.common.luke.FieldFlag;
6769
import org.apache.solr.common.params.CommonParams;
6870
import org.apache.solr.common.params.SolrParams;
69-
import org.apache.solr.common.util.Base64;
7071
import org.apache.solr.common.util.NamedList;
7172
import org.apache.solr.common.util.SimpleOrderedMap;
7273
import org.apache.solr.handler.RequestHandlerBase;
@@ -298,7 +299,7 @@ private static SimpleOrderedMap<Object> getDocumentFieldsInfo( Document doc, int
298299

299300
BytesRef bytes = field.binaryValue();
300301
if (bytes != null) {
301-
f.add( "binary", Base64.byteArrayToBase64(bytes.bytes, bytes.offset, bytes.length));
302+
f.add( "binary", new String(Base64.getEncoder().encode(bytes.wrapToByteBuffer()).array(), StandardCharsets.ISO_8859_1));
302303
}
303304
if (!ftype.isPointField()) {
304305
Term t = new Term(field.name(), ftype!=null ? ftype.storedToIndexed(field) : field.stringValue());

Diff for: solr/core/src/java/org/apache/solr/handler/admin/MetricsHistoryHandler.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import java.net.URL;
3030
import java.util.ArrayList;
3131
import java.util.Arrays;
32+
import java.util.Base64;
3233
import java.util.Collection;
3334
import java.util.Collections;
3435
import java.util.HashMap;
@@ -75,7 +76,6 @@
7576
import org.apache.solr.common.params.CommonParams;
7677
import org.apache.solr.common.params.ModifiableSolrParams;
7778
import org.apache.solr.common.params.SolrParams;
78-
import org.apache.solr.common.util.Base64;
7979
import org.apache.solr.common.util.ExecutorUtil;
8080
import org.apache.solr.common.util.JavaBinCodec;
8181
import org.apache.solr.common.util.NamedList;
@@ -948,7 +948,7 @@ private NamedList<Object> getDbData(RrdDb db, String[] dsNames, Format format, S
948948
graph.render(bi.getGraphics());
949949
ByteArrayOutputStream baos = new ByteArrayOutputStream();
950950
ImageIO.write(bi, "png", baos);
951-
values.add(name, Base64.byteArrayToBase64(baos.toByteArray()));
951+
values.add(name, Base64.getEncoder().encodeToString(baos.toByteArray()));
952952
break;
953953
case STRING:
954954
str.setLength(0);

Diff for: solr/core/src/java/org/apache/solr/handler/component/TermVectorComponent.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,10 @@
1717
package org.apache.solr.handler.component;
1818

1919
import java.io.IOException;
20+
import java.nio.charset.StandardCharsets;
2021
import java.util.ArrayList;
2122
import java.util.Arrays;
23+
import java.util.Base64;
2224
import java.util.Collections;
2325
import java.util.HashMap;
2426
import java.util.Iterator;
@@ -39,7 +41,6 @@
3941
import org.apache.solr.common.params.CommonParams;
4042
import org.apache.solr.common.params.SolrParams;
4143
import org.apache.solr.common.params.TermVectorParams;
42-
import org.apache.solr.common.util.Base64;
4344
import org.apache.solr.common.util.NamedList;
4445
import org.apache.solr.core.SolrCore;
4546
import org.apache.solr.schema.IndexSchema;
@@ -366,7 +367,7 @@ private void mapOneVector(NamedList<Object> docNL, FieldOptions fieldOptions, In
366367
thePayloads = new NamedList<>();
367368
termInfo.add("payloads", thePayloads);
368369
}
369-
thePayloads.add("payload", Base64.byteArrayToBase64(payload.bytes, payload.offset, payload.length));
370+
thePayloads.add("payload", new String(Base64.getEncoder().encode(payload.wrapToByteBuffer()).array(), StandardCharsets.ISO_8859_1));
370371
}
371372
}
372373
}

Diff for: solr/core/src/java/org/apache/solr/schema/BinaryField.java

+5-4
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,13 @@
1919
import java.io.IOException;
2020
import java.lang.invoke.MethodHandles;
2121
import java.nio.ByteBuffer;
22+
import java.nio.charset.StandardCharsets;
23+
import java.util.Base64;
2224

2325
import org.apache.lucene.index.IndexableField;
2426
import org.apache.lucene.search.SortField;
2527
import org.apache.lucene.util.BytesRef;
2628
import org.apache.solr.common.SolrException;
27-
import org.apache.solr.common.util.Base64;
2829
import org.apache.solr.response.TextResponseWriter;
2930
import org.apache.solr.uninverting.UninvertingReader.Type;
3031
import org.slf4j.Logger;
@@ -44,7 +45,7 @@ public void checkSchemaField(SchemaField field) {
4445
}
4546

4647
private String toBase64String(ByteBuffer buf) {
47-
return Base64.byteArrayToBase64(buf.array(), buf.position(), buf.limit()-buf.position());
48+
return new String(Base64.getEncoder().encode(buf).array(), StandardCharsets.ISO_8859_1);
4849
}
4950

5051
@Override
@@ -98,7 +99,7 @@ public IndexableField createField(SchemaField field, Object val) {
9899
} else {
99100
String strVal = val.toString();
100101
//the string has to be a base64 encoded string
101-
buf = Base64.base64ToByteArray(strVal);
102+
buf = Base64.getDecoder().decode(strVal);
102103
offset = 0;
103104
len = buf.length;
104105
}
@@ -112,7 +113,7 @@ public Object toNativeType(Object val) {
112113
return ByteBuffer.wrap((byte[]) val);
113114
} else if (val instanceof CharSequence) {
114115
final CharSequence valAsCharSequence = (CharSequence) val;
115-
return ByteBuffer.wrap(Base64.base64ToByteArray(valAsCharSequence.toString()));
116+
return ByteBuffer.wrap(Base64.getDecoder().decode(valAsCharSequence.toString()));
116117
}
117118
return super.toNativeType(val);
118119
}

Diff for: solr/core/src/java/org/apache/solr/schema/FieldType.java

+4-3
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@
1818

1919
import java.io.IOException;
2020
import java.lang.invoke.MethodHandles;
21+
import java.nio.charset.StandardCharsets;
2122
import java.util.ArrayList;
23+
import java.util.Base64;
2224
import java.util.Collection;
2325
import java.util.Collections;
2426
import java.util.HashMap;
@@ -67,7 +69,6 @@
6769
import org.apache.solr.common.IteratorWriter;
6870
import org.apache.solr.common.SolrException;
6971
import org.apache.solr.common.SolrException.ErrorCode;
70-
import org.apache.solr.common.util.Base64;
7172
import org.apache.solr.common.util.SimpleOrderedMap;
7273
import org.apache.solr.common.util.StrUtils;
7374
import org.apache.solr.query.SolrRangeQuery;
@@ -1327,7 +1328,7 @@ protected static Object marshalBase64SortValue(Object value) {
13271328
return null;
13281329
}
13291330
final BytesRef val = (BytesRef)value;
1330-
return Base64.byteArrayToBase64(val.bytes, val.offset, val.length);
1331+
return new String(Base64.getEncoder().encode(val.wrapToByteBuffer()).array(), StandardCharsets.ISO_8859_1);
13311332
}
13321333

13331334
/**
@@ -1338,7 +1339,7 @@ protected static Object unmarshalBase64SortValue(Object value) {
13381339
return null;
13391340
}
13401341
final String val = (String)value;
1341-
final byte[] bytes = Base64.base64ToByteArray(val);
1342+
final byte[] bytes = Base64.getDecoder().decode(val);
13421343
return new BytesRef(bytes);
13431344
}
13441345

Diff for: solr/core/src/java/org/apache/solr/schema/JsonPreAnalyzedParser.java

+6-5
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
import java.io.IOException;
2020
import java.io.Reader;
2121
import java.lang.invoke.MethodHandles;
22+
import java.nio.charset.StandardCharsets;
23+
import java.util.Base64;
2224
import java.util.Iterator;
2325
import java.util.LinkedHashMap;
2426
import java.util.LinkedList;
@@ -40,7 +42,6 @@
4042
import org.apache.lucene.util.AttributeSource;
4143
import org.apache.lucene.util.AttributeSource.State;
4244
import org.apache.lucene.util.BytesRef;
43-
import org.apache.solr.common.util.Base64;
4445
import org.apache.solr.schema.PreAnalyzedField.ParseResult;
4546
import org.apache.solr.schema.PreAnalyzedField.PreAnalyzedParser;
4647
import org.noggit.JSONUtil;
@@ -100,7 +101,7 @@ public ParseResult parse(Reader reader, AttributeSource parent)
100101
res.str = (String)map.get(STRING_KEY);
101102
String bin = (String)map.get(BINARY_KEY);
102103
if (bin != null) {
103-
byte[] data = Base64.base64ToByteArray(bin);
104+
byte[] data = Base64.getDecoder().decode(bin);
104105
res.bin = data;
105106
}
106107
List<Object> tokens = (List<Object>)map.get(TOKENS_KEY);
@@ -166,7 +167,7 @@ public ParseResult parse(Reader reader, AttributeSource parent)
166167
} else if (key.equals(PAYLOAD_KEY)) {
167168
String str = String.valueOf(e.getValue());
168169
if (str.length() > 0) {
169-
byte[] data = Base64.base64ToByteArray(str);
170+
byte[] data = Base64.getDecoder().decode(str);
170171
PayloadAttribute p = parent.addAttribute(PayloadAttribute.class);
171172
if (data != null && data.length > 0) {
172173
p.setPayload(new BytesRef(data));
@@ -216,7 +217,7 @@ public String toFormattedString(Field f) throws IOException {
216217
}
217218
BytesRef binaryValue = f.binaryValue();
218219
if (binaryValue != null) {
219-
map.put(BINARY_KEY, Base64.byteArrayToBase64(binaryValue.bytes, binaryValue.offset, binaryValue.length));
220+
map.put(BINARY_KEY, new String(Base64.getEncoder().encode(binaryValue.wrapToByteBuffer()).array(), StandardCharsets.ISO_8859_1));
220221
}
221222
}
222223
TokenStream ts = f.tokenStreamValue();
@@ -248,7 +249,7 @@ public String toFormattedString(Field f) throws IOException {
248249
} else if (cl.isAssignableFrom(PayloadAttribute.class)) {
249250
BytesRef p = ((PayloadAttribute)att).getPayload();
250251
if (p != null && p.length > 0) {
251-
tok.put(PAYLOAD_KEY, Base64.byteArrayToBase64(p.bytes, p.offset, p.length));
252+
tok.put(PAYLOAD_KEY, new String(Base64.getEncoder().encode(p.wrapToByteBuffer()).array(), StandardCharsets.ISO_8859_1));
252253
}
253254
} else if (cl.isAssignableFrom(PositionIncrementAttribute.class)) {
254255
tok.put(POSINCR_KEY, ((PositionIncrementAttribute)att).getPositionIncrement());

Diff for: solr/core/src/java/org/apache/solr/search/CursorMark.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,12 @@
2626

2727
import static org.apache.solr.common.params.CursorMarkParams.*;
2828

29-
import org.apache.solr.common.util.Base64;
3029
import org.apache.solr.common.util.JavaBinCodec;
3130
import org.apache.solr.schema.IndexSchema;
3231
import org.apache.solr.schema.FieldType;
3332
import org.apache.solr.schema.SchemaField;
3433

34+
import java.util.Base64;
3535
import java.util.List;
3636
import java.util.ArrayList;
3737
import java.io.ByteArrayOutputStream;
@@ -183,7 +183,7 @@ public void parseSerializedTotem(final String serialized) {
183183

184184
List<Object> pieces = null;
185185
try {
186-
final byte[] rawData = Base64.base64ToByteArray(serialized);
186+
final byte[] rawData = Base64.getDecoder().decode(serialized);
187187
try (JavaBinCodec jbc = new JavaBinCodec(); ByteArrayInputStream in = new ByteArrayInputStream(rawData)){
188188
pieces = (List<Object>) jbc.unmarshal(in);
189189
boolean b = false;
@@ -260,7 +260,7 @@ public String getSerializedTotem() {
260260
try (JavaBinCodec jbc = new JavaBinCodec(); ByteArrayOutputStream out = new ByteArrayOutputStream(256)) {
261261
jbc.marshal(marshalledValues, out);
262262
byte[] rawData = out.toByteArray();
263-
return Base64.byteArrayToBase64(rawData, 0, rawData.length);
263+
return Base64.getEncoder().encodeToString(rawData);
264264
} catch (Exception ex) {
265265
throw new SolrException(ErrorCode.SERVER_ERROR,
266266
"Unable to format search after totem", ex);

Diff for: solr/core/src/java/org/apache/solr/security/JWTAuthPlugin.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import java.time.Instant;
2727
import java.util.ArrayList;
2828
import java.util.Arrays;
29+
import java.util.Base64;
2930
import java.util.Collections;
3031
import java.util.HashMap;
3132
import java.util.HashSet;
@@ -47,7 +48,6 @@
4748
import org.apache.solr.common.SolrException;
4849
import org.apache.solr.common.SpecProvider;
4950
import org.apache.solr.common.StringUtils;
50-
import org.apache.solr.common.util.Base64;
5151
import org.apache.solr.common.util.CommandOperation;
5252
import org.apache.solr.common.util.Utils;
5353
import org.apache.solr.common.util.ValidatingJsonMap;
@@ -577,7 +577,7 @@ protected String generateAuthDataHeader() {
577577
data.put("scope", adminUiScope);
578578
data.put("redirect_uris", redirectUris);
579579
String headerJson = Utils.toJSONString(data);
580-
return Base64.byteArrayToBase64(headerJson.getBytes(StandardCharsets.UTF_8));
580+
return Base64.getEncoder().encodeToString(headerJson.getBytes(StandardCharsets.UTF_8));
581581
}
582582

583583
/**

Diff for: solr/core/src/java/org/apache/solr/security/PKIAuthenticationPlugin.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import java.nio.ByteBuffer;
2525
import java.security.Principal;
2626
import java.security.PublicKey;
27+
import java.util.Base64;
2728
import java.util.List;
2829
import java.util.Map;
2930
import java.util.Optional;
@@ -42,7 +43,6 @@
4243
import org.apache.solr.client.solrj.impl.HttpClientUtil;
4344
import org.apache.solr.client.solrj.impl.HttpListenerFactory;
4445
import org.apache.solr.client.solrj.impl.SolrHttpClientBuilder;
45-
import org.apache.solr.common.util.Base64;
4646
import org.apache.solr.common.util.ExecutorUtil;
4747
import org.apache.solr.common.util.StrUtils;
4848
import org.apache.solr.common.util.SuppressForbidden;
@@ -161,7 +161,7 @@ private PKIHeaderData decipherHeader(String nodeName, String cipherBase64) {
161161
private static PKIHeaderData parseCipher(String cipher, PublicKey key) {
162162
byte[] bytes;
163163
try {
164-
bytes = CryptoKeys.decryptRSA(Base64.base64ToByteArray(cipher), key);
164+
bytes = CryptoKeys.decryptRSA(Base64.getDecoder().decode(cipher), key);
165165
} catch (Exception e) {
166166
log.error("Decryption failed , key must be wrong", e);
167167
return null;
@@ -304,7 +304,7 @@ private Optional<String> generateToken() {
304304

305305
byte[] payload = s.getBytes(UTF_8);
306306
byte[] payloadCipher = publicKeyHandler.keyPair.encrypt(ByteBuffer.wrap(payload));
307-
String base64Cipher = Base64.byteArrayToBase64(payloadCipher);
307+
String base64Cipher = Base64.getEncoder().encodeToString(payloadCipher);
308308
log.trace("generateToken: usr={} token={}", usr, base64Cipher);
309309
return Optional.of(base64Cipher);
310310
}

Diff for: solr/core/src/java/org/apache/solr/util/CryptoKeys.java

+8-8
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,12 @@
4242
import java.security.spec.PKCS8EncodedKeySpec;
4343
import java.security.spec.X509EncodedKeySpec;
4444
import java.util.Arrays;
45+
import java.util.Base64;
4546
import java.util.HashMap;
4647
import java.util.Map;
4748

4849
import com.google.common.collect.ImmutableMap;
4950
import org.apache.solr.common.SolrException;
50-
import org.apache.solr.common.util.Base64;
5151
import org.slf4j.Logger;
5252
import org.slf4j.LoggerFactory;
5353

@@ -76,7 +76,7 @@ public String verify(String sig, ByteBuffer data) {
7676
for (Map.Entry<String, PublicKey> entry : keys.entrySet()) {
7777
boolean verified;
7878
try {
79-
verified = CryptoKeys.verify(entry.getValue(), Base64.base64ToByteArray(sig), data);
79+
verified = CryptoKeys.verify(entry.getValue(), Base64.getDecoder().decode(sig), data);
8080
log.debug("verified {} ", verified);
8181
if (verified) return entry.getKey();
8282
} catch (Exception e) {
@@ -94,7 +94,7 @@ public String verify(String sig, InputStream is) {
9494
for (Map.Entry<String, PublicKey> entry : keys.entrySet()) {
9595
boolean verified;
9696
try {
97-
verified = CryptoKeys.verify(entry.getValue(), Base64.base64ToByteArray(sig), is);
97+
verified = CryptoKeys.verify(entry.getValue(), Base64.getDecoder().decode(sig), is);
9898
log.debug("verified {} ", verified);
9999
if (verified) return entry.getKey();
100100
} catch (Exception e) {
@@ -258,7 +258,7 @@ public static String decodeAES(String base64CipherTxt, String pwd, final int key
258258
final int CIPHERTEXT_OFFSET = SALT_OFFSET + SALT_SIZE;
259259

260260
try {
261-
byte[] headerSaltAndCipherText = Base64.base64ToByteArray(base64CipherTxt);
261+
byte[] headerSaltAndCipherText = Base64.getDecoder().decode(base64CipherTxt);
262262

263263
// --- extract salt & encrypted ---
264264
// header is "Salted__", ASCII encoded, if salt is being used (the default)
@@ -307,7 +307,7 @@ public static String decodeAES(String base64CipherTxt, String pwd, final int key
307307
public static PublicKey deserializeX509PublicKey(String pubKey) {
308308
try {
309309
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
310-
X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(Base64.base64ToByteArray(pubKey));
310+
X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(Base64.getDecoder().decode(pubKey));
311311
return keyFactory.generatePublic(publicKeySpec);
312312
} catch (Exception e) {
313313
throw new SolrException(SolrException.ErrorCode.SERVER_ERROR,e);
@@ -349,7 +349,7 @@ public RSAKeyPair() {
349349
java.security.KeyPair keyPair = keyGen.genKeyPair();
350350
privateKey = keyPair.getPrivate();
351351
publicKey = keyPair.getPublic();
352-
pubKeyStr = Base64.byteArrayToBase64(publicKey.getEncoded());
352+
pubKeyStr = Base64.getEncoder().encodeToString(publicKey.getEncoded());
353353
}
354354

355355
/**
@@ -365,7 +365,7 @@ public RSAKeyPair(URL privateKeyResourceName, URL publicKeyResourceName) throws
365365
String privateString = new String(inPrivate.readAllBytes(), StandardCharsets.UTF_8)
366366
.replaceAll("-----(BEGIN|END) PRIVATE KEY-----", "");
367367

368-
PKCS8EncodedKeySpec privateSpec = new PKCS8EncodedKeySpec(java.util.Base64.getMimeDecoder().decode(privateString));
368+
PKCS8EncodedKeySpec privateSpec = new PKCS8EncodedKeySpec(Base64.getMimeDecoder().decode(privateString));
369369
KeyFactory rsaFactory = KeyFactory.getInstance("RSA");
370370
privateKey = rsaFactory.generatePrivate(privateSpec);
371371
} catch (NoSuchAlgorithmException e) {
@@ -374,7 +374,7 @@ public RSAKeyPair(URL privateKeyResourceName, URL publicKeyResourceName) throws
374374

375375
try (InputStream inPublic = publicKeyResourceName.openStream()) {
376376
publicKey = getX509PublicKey(inPublic.readAllBytes());
377-
pubKeyStr = Base64.byteArrayToBase64(publicKey.getEncoded());
377+
pubKeyStr = Base64.getEncoder().encodeToString(publicKey.getEncoded());
378378
}
379379
}
380380

0 commit comments

Comments
 (0)