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;
     }