fix CodeQL security reports, update to Java 17, fix Java 17 warnings

This commit is contained in:
Jörg Prante 2022-11-03 22:59:37 +01:00
parent 91c585b465
commit 20762770b1
20 changed files with 62 additions and 37 deletions

View file

@ -1,6 +1,5 @@
package org.xbib.datastructures.common;
import org.xbib.datastructures.common.StrictArraySet;
import java.util.AbstractMap;
import java.util.Collection;
import java.util.Map;
@ -77,7 +76,7 @@ public class StrictArrayMap<K, V> extends AbstractMap<K, V> implements Map<K, V>
public V get(Object key) {
for (int i = 0; i < keys.length; i++ ) {
if (keys[i].equals(key)) {
return (V) values[i];
return values[i];
}
}
return null;
@ -113,10 +112,10 @@ public class StrictArrayMap<K, V> extends AbstractMap<K, V> implements Map<K, V>
return new StrictArraySet<>(values);
}
@SuppressWarnings("unchecked")
@SuppressWarnings({"unchecked", "rawtypes"})
@Override
public Set<Entry<K, V>> entrySet() {
Entry<K, V>[] entries = new Map.Entry[keys.length];
Map.Entry<K, V>[] entries = new Map.Entry[keys.length];
for (int i = 0; i < keys.length; i++) {
entries[i] = new EntryHolder<>(keys[i], values[i]);
}

View file

@ -2,6 +2,9 @@ package org.xbib.datastructures.common;
public class Utf8Util {
public Utf8Util() {
}
public static String decode(byte[] data, int offset, int length) {
char[] chars = new char[length];
int len = 0;

View file

@ -247,10 +247,10 @@ public class TestJSONParser {
ret += parser.getNumberChars().length();
break;
case JSONParser.NUMBER:
ret += parser.getDouble();
ret = ret + (int)parser.getDouble();
break;
case JSONParser.LONG:
ret += parser.getLong();
ret = ret + (int)parser.getLong();
break;
default:
ret += ev;

View file

@ -135,7 +135,7 @@ public class TestPerf {
ret += parser.getNumberChars().length();
break;
case JSONParser.NUMBER:
ret += Double.doubleToRawLongBits(parser.getDouble());
ret = ret + (int)Double.doubleToRawLongBits(parser.getDouble());
break;
case JSONParser.ARRAY_START:
ret += 13;

View file

@ -6,6 +6,9 @@ import java.util.Deque;
public class EmptyJsonListener implements JsonResult {
public EmptyJsonListener() {
}
@Override
public void begin() {
}

View file

@ -156,7 +156,7 @@ public class FastDoubleParser {
if (neg_exp) {
exp_number = -exp_number;
}
exponent += exp_number;
exponent = exponent + (int)exp_number;
}
index = skipWhitespace(str, index, endIndex);
if (index < endIndex
@ -164,7 +164,7 @@ public class FastDoubleParser {
throw newNumberFormatException(str);
}
final boolean isDigitsTruncated;
int skipCountInTruncatedDigits = 0;//counts +1 if we skipped over the decimal point
int skipCountInTruncatedDigits = 0;
if (digitCount > 19) {
digits = 0;
for (index = indexOfFirstDigit; index < indexAfterDigits; index++) {
@ -231,10 +231,7 @@ public class FastDoubleParser {
if (index >= endIndex) {
throw newNumberFormatException(str);
}
// Parse digits
// ------------
long digits = 0;// digits is treated as an unsigned long
long digits = 0;
int exponent = 0;
final int indexOfFirstDigit = index;
int virtualIndexOfPoint = -1;
@ -242,10 +239,9 @@ public class FastDoubleParser {
char ch = 0;
for (; index < endIndex; index++) {
ch = str.charAt(index);
// Table look up is faster than a sequence of if-else-branches.
int hexValue = ch > 255 ? OTHER_CLASS : CHAR_TO_HEX_MAP[ch];
if (hexValue >= 0) {
digits = (digits << 4) | hexValue;// This might overflow, we deal with it later.
digits = (digits << 4) | hexValue;
} else if (hexValue == DECIMAL_POINT_CLASS) {
if (virtualIndexOfPoint != -1) {
throw newNumberFormatException(str);
@ -263,9 +259,6 @@ public class FastDoubleParser {
digitCount = indexAfterDigits - indexOfFirstDigit - 1;
exponent = Math.min(virtualIndexOfPoint - index + 1, MINIMAL_EIGHT_DIGIT_INTEGER) * 4;
}
// Parse exponent number
// ---------------------
long exp_number = 0;
final boolean hasExponent = (ch == 'p') || (ch == 'P');
if (hasExponent) {
@ -278,7 +271,6 @@ public class FastDoubleParser {
throw newNumberFormatException(str);
}
do {
// Guard against overflow of exp_number
if (exp_number < MINIMAL_EIGHT_DIGIT_INTEGER) {
exp_number = 10 * exp_number + ch - '0';
}
@ -287,27 +279,20 @@ public class FastDoubleParser {
if (neg_exp) {
exp_number = -exp_number;
}
exponent += exp_number;
exponent = exponent + (int)exp_number;
}
// Skip trailing whitespace
// ------------------------
index = skipWhitespace(str, index, endIndex);
if (index < endIndex
|| digitCount == 0 && str.charAt(virtualIndexOfPoint) != '.'
|| !hasExponent) {
throw newNumberFormatException(str);
}
// Re-parse digits in case of a potential overflow
// -----------------------------------------------
final boolean isDigitsTruncated;
int skipCountInTruncatedDigits = 0;//counts +1 if we skipped over the decimal point
int skipCountInTruncatedDigits = 0;
if (digitCount > 16) {
digits = 0;
for (index = indexOfFirstDigit; index < indexAfterDigits; index++) {
ch = str.charAt(index);
// Table look up is faster than a sequence of if-else-branches.
int hexValue = ch > 127 ? OTHER_CLASS : CHAR_TO_HEX_MAP[ch];
if (hexValue >= 0) {
if (Long.compareUnsigned(digits, MINIMAL_NINETEEN_DIGIT_INTEGER) < 0) {

View file

@ -6,6 +6,9 @@ import java.util.List;
public class ListNode extends TinyList.Builder<Node<?>> implements org.xbib.datastructures.api.ListNode {
public ListNode() {
}
public boolean has(int i) {
return i >= 0 && i < size() && get(i) == null;
}

View file

@ -6,6 +6,9 @@ import java.util.Map;
public class MapNode extends TinyMap.Builder<CharSequence, Node<?>> implements org.xbib.datastructures.api.MapNode {
public MapNode() {
}
public boolean has(String name) {
return containsKey(name);
}

View file

@ -17,6 +17,9 @@ public class StandardJsonListener implements JsonResult {
private final ValueNode FALSE_NODE = new ValueNode(Boolean.FALSE);
public StandardJsonListener() {
}
public Deque<Node<?>> getStack() {
return stack;
}

View file

@ -8,6 +8,9 @@ import java.util.List;
@SuppressWarnings("serial")
public class StandardListNode extends ArrayList<Object> implements Node<List<Object>> {
public StandardListNode() {
}
public boolean has(int i) {
return i >= 0 && i < size() && get(i) == null;
}

View file

@ -8,6 +8,9 @@ import java.util.Map;
@SuppressWarnings("serial")
public class StandardMapNode extends LinkedHashMap<CharSequence, Object> implements Node<Map<CharSequence, Object>> {
public StandardMapNode() {
}
public boolean has(String name) {
return containsKey(name);
}

View file

@ -271,7 +271,7 @@ public class StreamParser implements Parser {
private void expectChar(char expected) throws JsonException {
if (ch != expected) {
throw new JsonException("expected char " + (char)expected + " but got " + (char)ch);
throw new JsonException("expected char " + expected + " but got " + (char)ch);
}
}

View file

@ -17,6 +17,9 @@ public class TinyJsonListener implements JsonResult {
private final ValueNode FALSE_NODE = new ValueNode(Boolean.FALSE);
public TinyJsonListener() {
}
@Override
public Node<?> getResult() {
return node;

View file

@ -8,6 +8,9 @@ import java.util.function.Consumer;
public abstract class IndexedListBase<T> extends IndexedCollectionBase<T> implements IndexedList<T> {
public IndexedListBase() {
}
@Override
public boolean addAll(int index, Collection<? extends T> collection) {
boolean added = false;

View file

@ -6,8 +6,12 @@ import java.util.Objects;
import java.util.function.BiConsumer;
public abstract class IndexedMapBase<K, V> implements IndexedMap<K, V> {
private static final Object SENTINEL = new Object();
public IndexedMapBase() {
}
@Override
public V getOrDefault(Object key, V defaultValue) {
int index = getIndex(key);

View file

@ -5,6 +5,9 @@ import java.util.Set;
public abstract class IndexedSetBase<T> extends IndexedCollectionBase<T> implements IndexedSet<T> {
public IndexedSetBase() {
}
@Override
public boolean equals(Object o) {
if (this == o) {

View file

@ -2,6 +2,9 @@ package org.xbib.datastructures.tiny;
public abstract class Preconditions {
public Preconditions() {
}
public static void checkArgument(boolean expression, String errorMessage) {
if (!expression) {
throw new IllegalArgumentException(errorMessage);

View file

@ -5,6 +5,9 @@ import java.util.Objects;
public abstract class TinySet<T> extends IndexedSetBase<T> {
public TinySet() {
}
public static int tableSize(int length) {
return Integer.highestOneBit(length * 2 - 1) * 2;
}

View file

@ -1,5 +1,5 @@
group = org.xbib
name = datastructures
version = 1.0.1
version = 2.0.0
org.gradle.warning.mode = ALL

View file

@ -6,13 +6,13 @@ java {
}
compileJava {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
compileTestJava {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
jar {
@ -38,10 +38,11 @@ artifacts {
}
tasks.withType(JavaCompile) {
// commented out mostly because of jmh generated code
options.compilerArgs << '-Xlint:all'
options.compilerArgs.add('-Xlint:all')
options.encoding = 'UTF-8'
}
javadoc {
tasks.withType(Javadoc) {
options.addStringOption('Xdoclint:none', '-quiet')
options.encoding = 'UTF-8'
}