Bug 568416 - fix hash computation to ensure non-negative hash
One out of 2^32 strings have a hashCode of Integer.MIN_VALUE, including
"polygenelubricants" "GydZG_" and ""DESIGNING WORKHOUSES".
This and the fact that Math.abs(Integer.MIN_VALUE) == Integer.MIN_VALUE
made it possible for the hash computation to return negative values
which will cause elements to not be added or looked up correctly.
Change-Id: Ic6f6cf4191d051bd7eada478a6e1ddd4d0291481
Signed-off-by: Thomas Watson <tjwatson@us.ibm.com>
diff --git a/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/utils/KeyedHashSet.java b/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/utils/KeyedHashSet.java
index 8520242..afc1e84 100644
--- a/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/utils/KeyedHashSet.java
+++ b/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/utils/KeyedHashSet.java
@@ -149,11 +149,11 @@
}
private int hash(KeyedElement key) {
- return Math.abs(key.getKeyHashCode()) % elements.length;
+ return (key.getKeyHashCode() & 0x7FFF_FFFF) % elements.length;
}
private int keyHash(Object key) {
- return Math.abs(key.hashCode()) % elements.length;
+ return (key.hashCode() & 0x7FFF_FFFF) % elements.length;
}
/**