View Javadoc
1   /*
2     (C) Copyright IBM Corp. 2006, 2013
3   
4     THIS FILE IS PROVIDED UNDER THE TERMS OF THE ECLIPSE PUBLIC LICENSE
5     ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THIS FILE
6     CONSTITUTES RECIPIENTS ACCEPTANCE OF THE AGREEMENT.
7   
8     You can obtain a current copy of the Eclipse Public License from
9     http://www.opensource.org/licenses/eclipse-1.0.php
10  
11    @author : Endre Bak, ebak@de.ibm.com
12   * 
13   * Flag       Date        Prog         Description
14   * -------------------------------------------------------------------------------
15   * 1565892    2006-10-18  ebak         Make SBLIM client JSR48 compliant
16   * 2003590    2008-06-30  blaschke-oss Change licensing from CPL to EPL
17   * 2524131    2009-01-21  raman_arora  Upgrade client to JDK 1.5 (Phase 1)
18   * 3572993    2012-10-01  blaschke-oss parseDouble("2.2250738585072012e-308") DoS vulnerability
19   *    2618    2013-02-27  blaschke-oss Need to add property to disable weak cipher suites for the secure indication
20   */
21  
22  package org.metricshub.wbem.sblim.cimclient.internal.util;
23  
24  /*-
25   * ╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲
26   * WBEM Java Client
27   * ჻჻჻჻჻჻
28   * Copyright 2023 - 2025 MetricsHub
29   * ჻჻჻჻჻჻
30   * Licensed under the Apache License, Version 2.0 (the "License");
31   * you may not use this file except in compliance with the License.
32   * You may obtain a copy of the License at
33   *
34   *      http://www.apache.org/licenses/LICENSE-2.0
35   *
36   * Unless required by applicable law or agreed to in writing, software
37   * distributed under the License is distributed on an "AS IS" BASIS,
38   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
39   * See the License for the specific language governing permissions and
40   * limitations under the License.
41   * ╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱
42   */
43  
44  import java.math.BigDecimal;
45  import java.util.StringTokenizer;
46  import java.util.Vector;
47  
48  /**
49   * Class Util is responsible for storing commonly used static methods.
50   */
51  public class Util {
52  
53  	/**
54  	 * Quotes the passed string.
55  	 *
56  	 * @param pStr
57  	 * @return the quoted string
58  	 */
59  	public static String quote(String pStr) {
60  		StringBuffer dstBuf = new StringBuffer();
61  		dstBuf.append('"');
62  		for (int i = 0; i < pStr.length(); i++) {
63  			char ch = pStr.charAt(i);
64  			if (ch == '\\' || ch == '"') dstBuf.append('\\');
65  			dstBuf.append(ch);
66  		}
67  		dstBuf.append('"');
68  		return dstBuf.toString();
69  	}
70  
71  	/*
72  	 * Sun bug 4421494 identifies a range of <code>java.lang.Double</code>
73  	 * values that will hang the JVM due to an error in
74  	 * <code>FloatingDecimal.doubleValue()</code> that results in an infinite
75  	 * loop. The range is defined as (<code>lowBadDouble</code>,
76  	 * <code>hiBadDouble</code>).
77  	 */
78  	private static final BigDecimal lowBadDouble = new BigDecimal("2.225073858507201136057409796709131975934E-308");
79  
80  	private static final BigDecimal hiBadDouble = new BigDecimal("2.225073858507201259573821257020768020078E-308");
81  
82  	/**
83  	 * isBadDoubleString checks if passed string could hang JVM.
84  	 *
85  	 * @param s
86  	 *            A string to be converted to a Double.
87  	 * @return <code>true</code> if double is in range of bad values,
88  	 *         <code>false</code> otherwise.
89  	 */
90  	public static boolean isBadDoubleString(String s) {
91  		BigDecimal val = new BigDecimal(s);
92  		BigDecimal min = val.min(lowBadDouble);
93  		BigDecimal max = val.max(hiBadDouble);
94  
95  		// Do not use string if min < value < max
96  		return (min.compareTo(val) < 0 && max.compareTo(val) > 0);
97  	}
98  
99  	/**
100 	 * Filters any elements listed in <code>pIgnoreElements</code> out of
101 	 * <code>pArray</code> and returns the updated array. For example, if
102 	 * <code>pArray = {"A", "B", "C", "D", "E", "F", "G"}</code> and
103 	 * <code>pIgnoreElements = "D,E,B"</code> then this method returns
104 	 * <code>{"A", "C", "F", "G"}</code>.
105 	 *
106 	 * @param pArray
107 	 *            Original string array.
108 	 * @param pIgnoreElements
109 	 *            Comma-separated list of array elements to ignore.
110 	 * @return Updated string array.
111 	 */
112 	public static String[] getFilteredStringArray(String[] pArray, String pIgnoreElements) {
113 		int i, j;
114 
115 		if (pArray == null || pArray.length == 0 || pIgnoreElements == null || pIgnoreElements.length() == 0) return pArray;
116 
117 		Vector<String> vecIgnore = new Vector<String>();
118 		StringTokenizer strtok = new StringTokenizer(pIgnoreElements, ",");
119 		while (strtok.hasMoreElements()) {
120 			String str = ((String) strtok.nextElement()).trim();
121 			if (str.length() > 0) vecIgnore.add(str);
122 		}
123 
124 		if (vecIgnore.size() == 0) return pArray;
125 
126 		Vector<String> vecNew = new Vector<String>();
127 		for (i = 0; i < pArray.length; i++) {
128 			for (j = 0; j < vecIgnore.size(); j++) if (pArray[i].equalsIgnoreCase(vecIgnore.elementAt(j))) break;
129 			if (j >= vecIgnore.size()) vecNew.add(pArray[i]);
130 		}
131 
132 		return vecNew.toArray(new String[0]);
133 	}
134 }