You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by jw...@apache.org on 2016/07/11 20:12:24 UTC
groovy git commit: Fix check for potential hash function collisions
Repository: groovy
Updated Branches:
refs/heads/master cb65377d3 -> c612fe94d
Fix check for potential hash function collisions
Java 7 introduced the 'jdk.map.althashing.threshold' property that
would apply an alternative hash function that would improve
performance by avoiding large number of collisions. The property
was removed in Java 8 and improvements in handling collisions
were made.
https://docs.oracle.com/javase/8/docs/technotes/guides/collections/changes8.html
Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/c612fe94
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/c612fe94
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/c612fe94
Branch: refs/heads/master
Commit: c612fe94df7ba871e0618cc0806f1cb23834e394
Parents: cb65377
Author: John Wagenleitner <jw...@apache.org>
Authored: Mon Jul 11 11:04:04 2016 -0700
Committer: John Wagenleitner <jw...@apache.org>
Committed: Mon Jul 11 13:08:24 2016 -0700
----------------------------------------------------------------------
.../src/main/java/groovy/json/internal/LazyMap.java | 4 ++--
.../src/main/java/groovy/json/internal/LazyValueMap.java | 2 +-
.../groovy-json/src/main/java/groovy/json/internal/Sys.java | 6 ++++++
3 files changed, 9 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/groovy/blob/c612fe94/subprojects/groovy-json/src/main/java/groovy/json/internal/LazyMap.java
----------------------------------------------------------------------
diff --git a/subprojects/groovy-json/src/main/java/groovy/json/internal/LazyMap.java b/subprojects/groovy-json/src/main/java/groovy/json/internal/LazyMap.java
index 7ac0dd7..e24c476 100644
--- a/subprojects/groovy-json/src/main/java/groovy/json/internal/LazyMap.java
+++ b/subprojects/groovy-json/src/main/java/groovy/json/internal/LazyMap.java
@@ -29,7 +29,7 @@ import java.util.*;
*/
public class LazyMap extends AbstractMap<String, Object> {
- private static final String JDK_MAP_ALTHASHING_SYSPROP = System.getProperty("jdk.map.althashing.threshold");
+ static final String JDK_MAP_ALTHASHING_SYSPROP = System.getProperty("jdk.map.althashing.threshold");
/* Holds the actual map that will be lazily created. */
private Map<String, Object> map;
@@ -114,7 +114,7 @@ public class LazyMap extends AbstractMap<String, Object> {
private void buildIfNeeded() {
if (map == null) {
/** added to avoid hash collision attack. */
- if (Sys.is1_7OrLater() && JDK_MAP_ALTHASHING_SYSPROP != null) {
+ if (Sys.is1_8OrLater() || (Sys.is1_7() && JDK_MAP_ALTHASHING_SYSPROP != null)) {
map = new LinkedHashMap<String, Object>(size, 0.01f);
} else {
map = new TreeMap<String, Object>();
http://git-wip-us.apache.org/repos/asf/groovy/blob/c612fe94/subprojects/groovy-json/src/main/java/groovy/json/internal/LazyValueMap.java
----------------------------------------------------------------------
diff --git a/subprojects/groovy-json/src/main/java/groovy/json/internal/LazyValueMap.java b/subprojects/groovy-json/src/main/java/groovy/json/internal/LazyValueMap.java
index a860c96..b4f4597 100644
--- a/subprojects/groovy-json/src/main/java/groovy/json/internal/LazyValueMap.java
+++ b/subprojects/groovy-json/src/main/java/groovy/json/internal/LazyValueMap.java
@@ -196,7 +196,7 @@ public class LazyValueMap extends AbstractMap<String, Object> implements ValueMa
private void buildMap() {
/** added to avoid hash collision attack. */
- if (Sys.is1_7OrLater() && System.getProperty("jdk.map.althashing.threshold") != null) {
+ if (Sys.is1_8OrLater() || (Sys.is1_7() && LazyMap.JDK_MAP_ALTHASHING_SYSPROP != null)) {
map = new HashMap<String, Object>(items.length);
} else {
map = new TreeMap<String, Object>();
http://git-wip-us.apache.org/repos/asf/groovy/blob/c612fe94/subprojects/groovy-json/src/main/java/groovy/json/internal/Sys.java
----------------------------------------------------------------------
diff --git a/subprojects/groovy-json/src/main/java/groovy/json/internal/Sys.java b/subprojects/groovy-json/src/main/java/groovy/json/internal/Sys.java
index 28caa40..8c2953c 100644
--- a/subprojects/groovy-json/src/main/java/groovy/json/internal/Sys.java
+++ b/subprojects/groovy-json/src/main/java/groovy/json/internal/Sys.java
@@ -25,6 +25,7 @@ import java.util.regex.Pattern;
class Sys {
private static final boolean is1_7OrLater;
+ private static final boolean is1_8OrLater;
private static final boolean is1_7;
private static final boolean is1_8;
@@ -66,6 +67,7 @@ class Sys {
}
is1_7OrLater = v.compareTo(new BigDecimal("1.7")) >= 0;
+ is1_8OrLater = v.compareTo(new BigDecimal("1.8")) >= 0;
is1_7 = v.compareTo(new BigDecimal("1.7")) == 0;
is1_8 = v.compareTo(new BigDecimal("1.8")) == 0;
}
@@ -74,6 +76,10 @@ class Sys {
return is1_7OrLater;
}
+ public static boolean is1_8OrLater() {
+ return is1_8OrLater;
+ }
+
public static boolean is1_7() {
return is1_7;
}