From: Dave B. <bla...@us...> - 2012-08-01 18:43:37
|
Update of /cvsroot/sblim/jsr48-client/src/org/sblim/cimclient/internal/cimxml/sax In directory vz-cvs-3.sog:/tmp/cvs-serv7672/src/org/sblim/cimclient/internal/cimxml/sax Modified Files: Tag: Experimental NodeFactory.java Log Message: 3535383 - HashDoS fix 3498482 Index: NodeFactory.java =================================================================== RCS file: /cvsroot/sblim/jsr48-client/src/org/sblim/cimclient/internal/cimxml/sax/NodeFactory.java,v retrieving revision 1.1.2.6 retrieving revision 1.1.2.7 diff -u -d -r1.1.2.6 -r1.1.2.7 --- NodeFactory.java 10 Mar 2012 22:55:30 -0000 1.1.2.6 +++ NodeFactory.java 1 Aug 2012 18:43:34 -0000 1.1.2.7 @@ -18,12 +18,12 @@ * 2531371 2009-02-10 raman_arora Upgrade client to JDK 1.5 (Phase 2) * 2845211 2009-08-27 raman_arora Pull Enumeration Feature (SAX Parser) * 3498482 2012-03-09 blaschke-oss Red Hat: Possible XML Hash DoS in sblim + * 3535383 2012-08-01 blaschke-oss HashDoS fix 3498482 */ package org.sblim.cimclient.internal.cimxml.sax; import java.util.HashMap; -import java.util.Random; import org.sblim.cimclient.internal.cimxml.sax.node.*; @@ -56,7 +56,7 @@ * equals comparisons (==). */ public static String getEnum(String pNodeName) { - return NODENAME_HASH.get(pNodeName + iRandomString); + return NODENAME_HASH.get(pNodeName); } private static HashMap<String, FactoryEntry> cParserMap; @@ -442,25 +442,9 @@ private static final HashMap<String, String> NODENAME_HASH = new HashMap<String, String>(); - private static String iRandomString; - private static void initNodeNameHash(String[] pEnumA) { - // Append 8-byte randomly-generated string to keys in HashMap to avert - // hash DoS - Random generator = new Random(System.currentTimeMillis()); - byte randomByte[] = new byte[1]; - StringBuilder randomString = new StringBuilder(); - while (randomString.length() < 8) { - generator.nextBytes(randomByte); - if (randomByte[0] > 0) { - char ch = (char) randomByte[0]; - if (!Character.isISOControl(ch)) randomString.append(ch); - } - } - iRandomString = randomString.toString(); - for (int i = 0; i < pEnumA.length; i++) - NODENAME_HASH.put(pEnumA[i] + iRandomString, pEnumA[i]); + NODENAME_HASH.put(pEnumA[i], pEnumA[i]); } static { |