[Git][java-team/openhft-chronicle-core][master] Update String access in StringUtils
Andrej Shadura
gitlab at salsa.debian.org
Thu Feb 28 12:56:39 GMT 2019
Andrej Shadura pushed to branch master at Debian Java Maintainers / openhft-chronicle-core
Commits:
f1971f0a by Andrej Shadura at 2019-02-28T12:56:01Z
Update String access in StringUtils
- - - - -
2 changed files:
- + debian/patches/remove-boolean-string-constructor.patch
- debian/patches/series
Changes:
=====================================
debian/patches/remove-boolean-string-constructor.patch
=====================================
@@ -0,0 +1,82 @@
+Subject: Update String access in StringUtils
+Date: Thu, 28 Feb 2019 13:55:04 +0100
+From: Andrej Shadura <andrewsh at debian.org>
+
+See https://stackoverflow.com/questions/52620885/string-to-object-conversion-not-working-in-java-11:
+
+> The message “class [B cannot be cast to class [C” indicates that
+> the method is trying to cast a byte[] array to a char[] array. Since
+> the code location also has a name like FastStringUtils.toCharArray,
+> I can guess what happens here.
+>
+> This class seems to hack into the java.lang.String class and read its
+> value field in a questionable attempt of performance improvement. Since
+> Java 9, this internal array is a byte[] array instead of a char[] array,
+> which makes this hack fail at runtime.
+
+Initially based on:
+
+commit a8af29f932d73d8d1c6e44e49b68f9bb44905685
+Author: Peter Lawrey <peter.lawrey at higherfrequencytrading.com>
+Date: Wed Mar 2 14:00:44 2016 +0000
+
+ Tuning FIX to minimise garbage.
+
+--- a/src/main/java/net/openhft/chronicle/core/util/StringUtils.java
++++ b/src/main/java/net/openhft/chronicle/core/util/StringUtils.java
+@@ -19,7 +19,6 @@
+ import net.openhft.chronicle.core.annotation.ForceInline;
+ import org.jetbrains.annotations.NotNull;
+
+-import java.lang.reflect.Constructor;
+ import java.lang.reflect.Field;
+
+ import static java.lang.Character.toLowerCase;
+@@ -30,14 +29,11 @@
+ public enum StringUtils {
+ ;
+
+- private static final Constructor<String> STRING_CONSTRUCTOR;
+ private static final Field S_VALUE, SB_VALUE, SB_COUNT;
+ private static final long MAX_VALUE_DIVIDE_10 = Long.MAX_VALUE / 10;
+
+ static {
+ try {
+- STRING_CONSTRUCTOR = String.class.getDeclaredConstructor(char[].class, boolean.class);
+- STRING_CONSTRUCTOR.setAccessible(true);
+ S_VALUE = String.class.getDeclaredField("value");
+ S_VALUE.setAccessible(true);
+ SB_VALUE = Class.forName("java.lang.AbstractStringBuilder").getDeclaredField("value");
+@@ -93,6 +89,10 @@
+ public static char[] extractChars(StringBuilder sb) {
+ try {
+ return (char[]) SB_VALUE.get(sb);
++ } catch (ClassCastException e) {
++ final char[] data = new char[sb.length()];
++ sb.getChars(0, sb.length(), data, 0);
++ return data;
+ } catch (IllegalAccessException | IllegalArgumentException e) {
+ throw new AssertionError(e);
+ }
+@@ -101,6 +101,8 @@
+ public static char[] extractChars(String s) {
+ try {
+ return (char[]) S_VALUE.get(s);
++ } catch (ClassCastException e) {
++ return s.toCharArray();
+ } catch (IllegalAccessException | IllegalArgumentException e) {
+ throw new AssertionError(e);
+ }
+@@ -115,11 +117,7 @@
+ }
+
+ public static String newString(char[] chars) {
+- try {
+- return STRING_CONSTRUCTOR.newInstance(chars, true);
+- } catch (Exception e) {
+- throw new AssertionError(e);
+- }
++ return new String(chars);
+ }
+
+ public static String firstLowerCase(String str) {
=====================================
debian/patches/series
=====================================
@@ -1 +1,2 @@
java11-compatiblitily.patch
+remove-boolean-string-constructor.patch
View it on GitLab: https://salsa.debian.org/java-team/openhft-chronicle-core/commit/f1971f0a062231ae2a77fa617d1c9dab320f3c16
--
View it on GitLab: https://salsa.debian.org/java-team/openhft-chronicle-core/commit/f1971f0a062231ae2a77fa617d1c9dab320f3c16
You're receiving this email because of your account on salsa.debian.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/pkg-java-commits/attachments/20190228/e7a4df20/attachment.html>
More information about the pkg-java-commits
mailing list