From f750f280a71a6f9566cc1294a45081ecf328cf5f Mon Sep 17 00:00:00 2001 From: Robert Merget Date: Thu, 12 Jun 2025 23:17:27 +0400 Subject: [PATCH] addressed static code analysis warnings --- pom.xml | 18 ++++++++++++++++++ spotbugs-exclude.xml | 13 +++++++++++++ .../ModifiableVariableHolder.java | 4 ++-- .../VariableModification.java | 4 ++-- .../biginteger/ModifiableBigInteger.java | 6 +++--- .../bool/BooleanExplicitValueModification.java | 5 +++++ .../bool/BooleanToggleModification.java | 16 ++++++---------- .../ByteArrayAppendValueModification.java | 6 +++--- .../bytearray/ByteArrayDeleteModification.java | 4 ++-- .../ByteArrayDuplicateModification.java | 15 +++------------ .../ByteArrayExplicitValueModification.java | 4 ++-- .../ByteArrayInsertValueModification.java | 8 ++++---- .../ByteArrayPrependValueModification.java | 6 +++--- .../bytearray/ByteArrayXorModification.java | 10 +++++----- .../bytearray/ModifiableByteArray.java | 4 ++-- .../integer/IntegerSwapEndianModification.java | 11 +---------- .../integer/ModifiableInteger.java | 4 ++-- .../length/ModifiableLengthField.java | 12 ++++++------ .../logging/ExtendedPatternLayout.java | 6 +++--- .../longint/LongSwapEndianModification.java | 11 +++++++---- .../longint/ModifiableLong.java | 4 ++-- .../modifiablevariable/util/DataConverter.java | 4 ++++ .../modifiablevariable/util/RandomHelper.java | 9 +++++++++ .../util/UnformattedByteArrayAdapter.java | 4 ++-- 24 files changed, 109 insertions(+), 79 deletions(-) create mode 100644 spotbugs-exclude.xml diff --git a/pom.xml b/pom.xml index 31b65b61..cbdf2d54 100644 --- a/pom.xml +++ b/pom.xml @@ -100,6 +100,12 @@ org.apache.logging.log4j log4j-core + + + com.github.spotbugs + spotbugs-annotations + provided + org.glassfish.jaxb @@ -174,6 +180,7 @@ ${maven.compiler.target} -proc:full + -Xlint:deprecation @@ -266,10 +273,21 @@ com.github.spotbugs spotbugs-maven-plugin + + spotbugs-exclude.xml + org.apache.maven.plugins maven-pmd-plugin + + 150 + + + **/integer/*ShiftModification.java + **/longint/*ShiftModification.java + + diff --git a/spotbugs-exclude.xml b/spotbugs-exclude.xml new file mode 100644 index 00000000..a3b60794 --- /dev/null +++ b/spotbugs-exclude.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/de/rub/nds/modifiablevariable/ModifiableVariableHolder.java b/src/main/java/de/rub/nds/modifiablevariable/ModifiableVariableHolder.java index 850a53c0..d852e98a 100644 --- a/src/main/java/de/rub/nds/modifiablevariable/ModifiableVariableHolder.java +++ b/src/main/java/de/rub/nds/modifiablevariable/ModifiableVariableHolder.java @@ -7,7 +7,7 @@ */ package de.rub.nds.modifiablevariable; -import de.rub.nds.modifiablevariable.util.ArrayConverter; +import de.rub.nds.modifiablevariable.util.DataConverter; import de.rub.nds.modifiablevariable.util.ReflectionHelper; import jakarta.xml.bind.annotation.XmlType; import java.io.Serializable; @@ -194,7 +194,7 @@ protected String getExtendedString(int depth) { stringBuilder.append("\t".repeat(Math.max(0, depth))); stringBuilder.append(field.getName()); stringBuilder.append(": "); - stringBuilder.append(ArrayConverter.bytesToHexString(temp)); + stringBuilder.append(DataConverter.bytesToHexString(temp)); stringBuilder.append("\n"); } if (tempObject instanceof ModifiableVariableHolder) { diff --git a/src/main/java/de/rub/nds/modifiablevariable/VariableModification.java b/src/main/java/de/rub/nds/modifiablevariable/VariableModification.java index 316cfa32..adc3d9da 100644 --- a/src/main/java/de/rub/nds/modifiablevariable/VariableModification.java +++ b/src/main/java/de/rub/nds/modifiablevariable/VariableModification.java @@ -10,7 +10,7 @@ import static de.rub.nds.modifiablevariable.util.StringUtil.backslashEscapeString; import com.fasterxml.jackson.annotation.JsonTypeInfo; -import de.rub.nds.modifiablevariable.util.ArrayConverter; +import de.rub.nds.modifiablevariable.util.DataConverter; import jakarta.xml.bind.annotation.XmlAccessType; import jakarta.xml.bind.annotation.XmlAccessorType; import jakarta.xml.bind.annotation.XmlTransient; @@ -137,7 +137,7 @@ protected void debug(E value) { } else { String valueString = switch (value) { - case byte[] bytes -> ArrayConverter.bytesToHexString(bytes); + case byte[] bytes -> DataConverter.bytesToHexString(bytes); case String s -> backslashEscapeString(s); default -> value.toString(); }; diff --git a/src/main/java/de/rub/nds/modifiablevariable/biginteger/ModifiableBigInteger.java b/src/main/java/de/rub/nds/modifiablevariable/biginteger/ModifiableBigInteger.java index 2148fc72..520ee387 100644 --- a/src/main/java/de/rub/nds/modifiablevariable/biginteger/ModifiableBigInteger.java +++ b/src/main/java/de/rub/nds/modifiablevariable/biginteger/ModifiableBigInteger.java @@ -8,7 +8,7 @@ package de.rub.nds.modifiablevariable.biginteger; import de.rub.nds.modifiablevariable.ModifiableVariable; -import de.rub.nds.modifiablevariable.util.ArrayConverter; +import de.rub.nds.modifiablevariable.util.DataConverter; import jakarta.xml.bind.annotation.XmlRootElement; import java.math.BigInteger; @@ -108,7 +108,7 @@ public boolean isOriginalValueModified() { * @return The byte array representation of the BigInteger */ public byte[] getByteArray() { - return ArrayConverter.bigIntegerToByteArray(getValue()); + return DataConverter.bigIntegerToByteArray(getValue()); } /** @@ -118,7 +118,7 @@ public byte[] getByteArray() { * @return The byte array representation of the BigInteger */ public byte[] getByteArray(int size) { - return ArrayConverter.bigIntegerToByteArray(getValue(), size, true); + return DataConverter.bigIntegerToByteArray(getValue(), size, true); } /** diff --git a/src/main/java/de/rub/nds/modifiablevariable/bool/BooleanExplicitValueModification.java b/src/main/java/de/rub/nds/modifiablevariable/bool/BooleanExplicitValueModification.java index 08a59733..b73b1112 100644 --- a/src/main/java/de/rub/nds/modifiablevariable/bool/BooleanExplicitValueModification.java +++ b/src/main/java/de/rub/nds/modifiablevariable/bool/BooleanExplicitValueModification.java @@ -8,6 +8,7 @@ package de.rub.nds.modifiablevariable.bool; import de.rub.nds.modifiablevariable.VariableModification; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import jakarta.xml.bind.annotation.XmlRootElement; /** @@ -76,6 +77,10 @@ public BooleanExplicitValueModification createCopy() { * @return The explicit value, or null if input was null */ @Override + @SuppressFBWarnings( + value = "NP_BOOLEAN_RETURN_NULL", + justification = + "Returning null for null input is intentional design for null-safety in modification chain") protected Boolean modifyImplementationHook(Boolean input) { if (input == null) { return null; diff --git a/src/main/java/de/rub/nds/modifiablevariable/bool/BooleanToggleModification.java b/src/main/java/de/rub/nds/modifiablevariable/bool/BooleanToggleModification.java index fa0a74d5..7e8e03fd 100644 --- a/src/main/java/de/rub/nds/modifiablevariable/bool/BooleanToggleModification.java +++ b/src/main/java/de/rub/nds/modifiablevariable/bool/BooleanToggleModification.java @@ -8,6 +8,7 @@ package de.rub.nds.modifiablevariable.bool; import de.rub.nds.modifiablevariable.VariableModification; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import jakarta.xml.bind.annotation.XmlRootElement; /** @@ -27,15 +28,6 @@ public BooleanToggleModification() { super(); } - /** - * Copy constructor. - * - * @param other The modification to copy - */ - public BooleanToggleModification(BooleanToggleModification other) { - super(); - } - /** * Creates a deep copy of this modification. * @@ -43,7 +35,7 @@ public BooleanToggleModification(BooleanToggleModification other) { */ @Override public BooleanToggleModification createCopy() { - return new BooleanToggleModification(this); + return new BooleanToggleModification(); } /** @@ -59,6 +51,10 @@ public BooleanToggleModification createCopy() { * @return The inverted Boolean value, or null if the input is null */ @Override + @SuppressFBWarnings( + value = "NP_BOOLEAN_RETURN_NULL", + justification = + "Returning null for null input is intentional design for null-safety in modification chain") protected Boolean modifyImplementationHook(Boolean input) { if (input == null) { return null; diff --git a/src/main/java/de/rub/nds/modifiablevariable/bytearray/ByteArrayAppendValueModification.java b/src/main/java/de/rub/nds/modifiablevariable/bytearray/ByteArrayAppendValueModification.java index 46e59044..96ee20d2 100644 --- a/src/main/java/de/rub/nds/modifiablevariable/bytearray/ByteArrayAppendValueModification.java +++ b/src/main/java/de/rub/nds/modifiablevariable/bytearray/ByteArrayAppendValueModification.java @@ -8,7 +8,7 @@ package de.rub.nds.modifiablevariable.bytearray; import de.rub.nds.modifiablevariable.VariableModification; -import de.rub.nds.modifiablevariable.util.ArrayConverter; +import de.rub.nds.modifiablevariable.util.DataConverter; import de.rub.nds.modifiablevariable.util.UnformattedByteArrayAdapter; import jakarta.xml.bind.annotation.XmlRootElement; import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; @@ -96,7 +96,7 @@ protected byte[] modifyImplementationHook(byte[] input) { if (input == null) { return null; } - return ArrayConverter.concatenate(input, bytesToAppend); + return DataConverter.concatenate(input, bytesToAppend); } /** @@ -167,7 +167,7 @@ public boolean equals(Object obj) { @Override public String toString() { return "ByteArrayAppendValueModification{bytesToAppend=" - + ArrayConverter.bytesToHexString(bytesToAppend) + + DataConverter.bytesToHexString(bytesToAppend) + "}"; } } diff --git a/src/main/java/de/rub/nds/modifiablevariable/bytearray/ByteArrayDeleteModification.java b/src/main/java/de/rub/nds/modifiablevariable/bytearray/ByteArrayDeleteModification.java index 6abefdf3..4aacb388 100644 --- a/src/main/java/de/rub/nds/modifiablevariable/bytearray/ByteArrayDeleteModification.java +++ b/src/main/java/de/rub/nds/modifiablevariable/bytearray/ByteArrayDeleteModification.java @@ -8,7 +8,7 @@ package de.rub.nds.modifiablevariable.bytearray; import de.rub.nds.modifiablevariable.VariableModification; -import de.rub.nds.modifiablevariable.util.ArrayConverter; +import de.rub.nds.modifiablevariable.util.DataConverter; import jakarta.xml.bind.annotation.XmlRootElement; import java.util.Arrays; @@ -114,7 +114,7 @@ protected byte[] modifyImplementationHook(byte[] input) { byte[] ret1 = Arrays.copyOf(input, deleteStartPosition); if (deleteEndPosition < input.length) { byte[] ret2 = Arrays.copyOfRange(input, deleteEndPosition, input.length); - return ArrayConverter.concatenate(ret1, ret2); + return DataConverter.concatenate(ret1, ret2); } return ret1; } diff --git a/src/main/java/de/rub/nds/modifiablevariable/bytearray/ByteArrayDuplicateModification.java b/src/main/java/de/rub/nds/modifiablevariable/bytearray/ByteArrayDuplicateModification.java index 519386b4..cca3fd6d 100644 --- a/src/main/java/de/rub/nds/modifiablevariable/bytearray/ByteArrayDuplicateModification.java +++ b/src/main/java/de/rub/nds/modifiablevariable/bytearray/ByteArrayDuplicateModification.java @@ -8,7 +8,7 @@ package de.rub.nds.modifiablevariable.bytearray; import de.rub.nds.modifiablevariable.VariableModification; -import de.rub.nds.modifiablevariable.util.ArrayConverter; +import de.rub.nds.modifiablevariable.util.DataConverter; import jakarta.xml.bind.annotation.XmlRootElement; /** @@ -31,15 +31,6 @@ public ByteArrayDuplicateModification() { super(); } - /** - * Copy constructor for creating a deep copy of an existing modification. - * - * @param other The modification to copy - */ - public ByteArrayDuplicateModification(ByteArrayDuplicateModification other) { - super(); - } - /** * Creates a deep copy of this modification. * @@ -49,7 +40,7 @@ public ByteArrayDuplicateModification(ByteArrayDuplicateModification other) { */ @Override public ByteArrayDuplicateModification createCopy() { - return new ByteArrayDuplicateModification(this); + return new ByteArrayDuplicateModification(); } /** @@ -72,7 +63,7 @@ protected byte[] modifyImplementationHook(byte[] input) { if (input == null) { return null; } - return ArrayConverter.concatenate(input, input); + return DataConverter.concatenate(input, input); } /** diff --git a/src/main/java/de/rub/nds/modifiablevariable/bytearray/ByteArrayExplicitValueModification.java b/src/main/java/de/rub/nds/modifiablevariable/bytearray/ByteArrayExplicitValueModification.java index 28b4a6b1..6090172d 100644 --- a/src/main/java/de/rub/nds/modifiablevariable/bytearray/ByteArrayExplicitValueModification.java +++ b/src/main/java/de/rub/nds/modifiablevariable/bytearray/ByteArrayExplicitValueModification.java @@ -8,7 +8,7 @@ package de.rub.nds.modifiablevariable.bytearray; import de.rub.nds.modifiablevariable.VariableModification; -import de.rub.nds.modifiablevariable.util.ArrayConverter; +import de.rub.nds.modifiablevariable.util.DataConverter; import de.rub.nds.modifiablevariable.util.UnformattedByteArrayAdapter; import jakarta.xml.bind.annotation.XmlRootElement; import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; @@ -148,7 +148,7 @@ public boolean equals(Object obj) { public String toString() { return "ByteArrayExplicitValueModification{" + "explicitValue=" - + ArrayConverter.bytesToHexString(explicitValue) + + DataConverter.bytesToHexString(explicitValue) + '}'; } } diff --git a/src/main/java/de/rub/nds/modifiablevariable/bytearray/ByteArrayInsertValueModification.java b/src/main/java/de/rub/nds/modifiablevariable/bytearray/ByteArrayInsertValueModification.java index 2419abcd..60b42a0c 100644 --- a/src/main/java/de/rub/nds/modifiablevariable/bytearray/ByteArrayInsertValueModification.java +++ b/src/main/java/de/rub/nds/modifiablevariable/bytearray/ByteArrayInsertValueModification.java @@ -8,7 +8,7 @@ package de.rub.nds.modifiablevariable.bytearray; import de.rub.nds.modifiablevariable.VariableModification; -import de.rub.nds.modifiablevariable.util.ArrayConverter; +import de.rub.nds.modifiablevariable.util.DataConverter; import de.rub.nds.modifiablevariable.util.UnformattedByteArrayAdapter; import jakarta.xml.bind.annotation.XmlRootElement; import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; @@ -118,9 +118,9 @@ protected byte[] modifyImplementationHook(byte[] input) { byte[] ret1 = Arrays.copyOf(input, insertPosition); if (insertPosition < input.length) { byte[] ret2 = Arrays.copyOfRange(input, insertPosition, input.length); - return ArrayConverter.concatenate(ret1, bytesToInsert, ret2); + return DataConverter.concatenate(ret1, bytesToInsert, ret2); } - return ArrayConverter.concatenate(ret1, bytesToInsert); + return DataConverter.concatenate(ret1, bytesToInsert); } /** @@ -215,7 +215,7 @@ public boolean equals(Object obj) { public String toString() { return "ByteArrayInsertModification{" + "bytesToInsert=" - + ArrayConverter.bytesToHexString(bytesToInsert) + + DataConverter.bytesToHexString(bytesToInsert) + ", startPosition=" + startPosition + '}'; diff --git a/src/main/java/de/rub/nds/modifiablevariable/bytearray/ByteArrayPrependValueModification.java b/src/main/java/de/rub/nds/modifiablevariable/bytearray/ByteArrayPrependValueModification.java index 3f32c70d..7e329309 100644 --- a/src/main/java/de/rub/nds/modifiablevariable/bytearray/ByteArrayPrependValueModification.java +++ b/src/main/java/de/rub/nds/modifiablevariable/bytearray/ByteArrayPrependValueModification.java @@ -8,7 +8,7 @@ package de.rub.nds.modifiablevariable.bytearray; import de.rub.nds.modifiablevariable.VariableModification; -import de.rub.nds.modifiablevariable.util.ArrayConverter; +import de.rub.nds.modifiablevariable.util.DataConverter; import de.rub.nds.modifiablevariable.util.UnformattedByteArrayAdapter; import jakarta.xml.bind.annotation.XmlRootElement; import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; @@ -98,7 +98,7 @@ protected byte[] modifyImplementationHook(byte[] input) { if (input == null) { return null; } - return ArrayConverter.concatenate(bytesToPrepend, input); + return DataConverter.concatenate(bytesToPrepend, input); } /** @@ -169,7 +169,7 @@ public boolean equals(Object obj) { @Override public String toString() { return "ByteArrayPrependValueModification{bytesToPrepend=" - + ArrayConverter.bytesToHexString(bytesToPrepend) + + DataConverter.bytesToHexString(bytesToPrepend) + "}"; } } diff --git a/src/main/java/de/rub/nds/modifiablevariable/bytearray/ByteArrayXorModification.java b/src/main/java/de/rub/nds/modifiablevariable/bytearray/ByteArrayXorModification.java index f039c729..d3a08017 100644 --- a/src/main/java/de/rub/nds/modifiablevariable/bytearray/ByteArrayXorModification.java +++ b/src/main/java/de/rub/nds/modifiablevariable/bytearray/ByteArrayXorModification.java @@ -8,7 +8,7 @@ package de.rub.nds.modifiablevariable.bytearray; import de.rub.nds.modifiablevariable.VariableModification; -import de.rub.nds.modifiablevariable.util.ArrayConverter; +import de.rub.nds.modifiablevariable.util.DataConverter; import de.rub.nds.modifiablevariable.util.UnformattedByteArrayAdapter; import jakarta.xml.bind.annotation.XmlRootElement; import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; @@ -126,10 +126,10 @@ protected byte[] modifyImplementationHook(byte[] input) { /** * Gets the byte array used for the XOR operation. * - * @return The XOR byte array + * @return A copy of the XOR byte array */ public byte[] getXor() { - return xor; + return xor == null ? null : xor.clone(); } /** @@ -138,7 +138,7 @@ public byte[] getXor() { * @param xor The new XOR byte array */ public void setXor(byte[] xor) { - this.xor = xor; + this.xor = xor == null ? null : xor.clone(); } /** @@ -208,7 +208,7 @@ public boolean equals(Object obj) { public String toString() { return "ByteArrayXorModification{" + "xor=" - + ArrayConverter.bytesToHexString(xor) + + DataConverter.bytesToHexString(xor) + ", startPosition=" + startPosition + '}'; diff --git a/src/main/java/de/rub/nds/modifiablevariable/bytearray/ModifiableByteArray.java b/src/main/java/de/rub/nds/modifiablevariable/bytearray/ModifiableByteArray.java index 5aff26db..5c6b017b 100644 --- a/src/main/java/de/rub/nds/modifiablevariable/bytearray/ModifiableByteArray.java +++ b/src/main/java/de/rub/nds/modifiablevariable/bytearray/ModifiableByteArray.java @@ -8,7 +8,7 @@ package de.rub.nds.modifiablevariable.bytearray; import de.rub.nds.modifiablevariable.ModifiableVariable; -import de.rub.nds.modifiablevariable.util.ArrayConverter; +import de.rub.nds.modifiablevariable.util.DataConverter; import de.rub.nds.modifiablevariable.util.UnformattedByteArrayAdapter; import jakarta.xml.bind.annotation.XmlAccessType; import jakarta.xml.bind.annotation.XmlAccessorType; @@ -213,7 +213,7 @@ public int hashCode() { public String toString() { return "ModifiableByteArray{" + "originalValue=" - + (originalValue != null ? ArrayConverter.bytesToHexString(originalValue) : "") + + (originalValue != null ? DataConverter.bytesToHexString(originalValue) : "") + innerToString() + '}'; } diff --git a/src/main/java/de/rub/nds/modifiablevariable/integer/IntegerSwapEndianModification.java b/src/main/java/de/rub/nds/modifiablevariable/integer/IntegerSwapEndianModification.java index c2f13f88..80192c3d 100644 --- a/src/main/java/de/rub/nds/modifiablevariable/integer/IntegerSwapEndianModification.java +++ b/src/main/java/de/rub/nds/modifiablevariable/integer/IntegerSwapEndianModification.java @@ -33,15 +33,6 @@ public IntegerSwapEndianModification() { super(); } - /** - * Copy constructor for creating a deep copy of an existing modification. - * - * @param other The modification to copy - */ - public IntegerSwapEndianModification(IntegerSwapEndianModification other) { - super(); - } - /** * Creates a deep copy of this modification. * @@ -49,7 +40,7 @@ public IntegerSwapEndianModification(IntegerSwapEndianModification other) { */ @Override public IntegerSwapEndianModification createCopy() { - return new IntegerSwapEndianModification(this); + return new IntegerSwapEndianModification(); } /** diff --git a/src/main/java/de/rub/nds/modifiablevariable/integer/ModifiableInteger.java b/src/main/java/de/rub/nds/modifiablevariable/integer/ModifiableInteger.java index c190c853..5d57e10f 100644 --- a/src/main/java/de/rub/nds/modifiablevariable/integer/ModifiableInteger.java +++ b/src/main/java/de/rub/nds/modifiablevariable/integer/ModifiableInteger.java @@ -8,7 +8,7 @@ package de.rub.nds.modifiablevariable.integer; import de.rub.nds.modifiablevariable.ModifiableVariable; -import de.rub.nds.modifiablevariable.util.ArrayConverter; +import de.rub.nds.modifiablevariable.util.DataConverter; import jakarta.xml.bind.annotation.XmlRootElement; /** @@ -111,7 +111,7 @@ public boolean isOriginalValueModified() { * @return The byte array representation of the integer */ public byte[] getByteArray(int size) { - return ArrayConverter.intToBytes(getValue(), size); + return DataConverter.intToBytes(getValue(), size); } /** diff --git a/src/main/java/de/rub/nds/modifiablevariable/length/ModifiableLengthField.java b/src/main/java/de/rub/nds/modifiablevariable/length/ModifiableLengthField.java index 01323ad8..5bd06a0f 100644 --- a/src/main/java/de/rub/nds/modifiablevariable/length/ModifiableLengthField.java +++ b/src/main/java/de/rub/nds/modifiablevariable/length/ModifiableLengthField.java @@ -130,12 +130,12 @@ public boolean equals(Object obj) { if (!(obj instanceof ModifiableLengthField that)) { return false; } - // First check if the values are equal - boolean valuesEqual = - getValue() == null ? that.getValue() == null : getValue().equals(that.getValue()); - // Then check if they reference the same byte array - boolean refsEqual = ref.equals(that.ref); - return valuesEqual && refsEqual; + // First check if the parent class considers them equal + if (!super.equals(obj)) { + return false; + } + // Then check if they reference equal byte arrays + return Objects.equals(ref, that.ref); } /** diff --git a/src/main/java/de/rub/nds/modifiablevariable/logging/ExtendedPatternLayout.java b/src/main/java/de/rub/nds/modifiablevariable/logging/ExtendedPatternLayout.java index 24860cfc..41d25482 100644 --- a/src/main/java/de/rub/nds/modifiablevariable/logging/ExtendedPatternLayout.java +++ b/src/main/java/de/rub/nds/modifiablevariable/logging/ExtendedPatternLayout.java @@ -7,7 +7,7 @@ */ package de.rub.nds.modifiablevariable.logging; -import de.rub.nds.modifiablevariable.util.ArrayConverter; +import de.rub.nds.modifiablevariable.util.DataConverter; import java.nio.charset.Charset; import java.util.Arrays; import java.util.HashMap; @@ -830,13 +830,13 @@ public StringBuilder toSerializable(LogEvent event, StringBuilder builder) { for (Object param : event.getMessage().getParameters()) { // Replace all ByteArrays with the String representation of the ByteArray - // calculated by the ArrayConverter. + // calculated by the DataConverter. if (param != null && bArrayClass.equals(param.getClass())) { builder.replace( builder.indexOf(Arrays.toString((byte[]) param)), builder.indexOf(Arrays.toString((byte[]) param)) + Arrays.toString((byte[]) param).length(), - ArrayConverter.bytesToHexString( + DataConverter.bytesToHexString( (byte[]) param, Builder.prettyPrinting, Builder.initNewLine)); diff --git a/src/main/java/de/rub/nds/modifiablevariable/longint/LongSwapEndianModification.java b/src/main/java/de/rub/nds/modifiablevariable/longint/LongSwapEndianModification.java index ae659002..a84599b1 100644 --- a/src/main/java/de/rub/nds/modifiablevariable/longint/LongSwapEndianModification.java +++ b/src/main/java/de/rub/nds/modifiablevariable/longint/LongSwapEndianModification.java @@ -32,12 +32,15 @@ public LongSwapEndianModification() { } /** - * Copy constructor for creating a deep copy of an existing modification. + * Copy constructor. * - * @param other The modification to copy + *

Since this modification is stateless, this constructor just calls the default constructor. + * + * @param other The modification to copy (ignored since modification is stateless) */ + @SuppressWarnings("unused") public LongSwapEndianModification(LongSwapEndianModification other) { - super(); + this(); } /** @@ -47,7 +50,7 @@ public LongSwapEndianModification(LongSwapEndianModification other) { */ @Override public LongSwapEndianModification createCopy() { - return new LongSwapEndianModification(this); + return new LongSwapEndianModification(); } /** diff --git a/src/main/java/de/rub/nds/modifiablevariable/longint/ModifiableLong.java b/src/main/java/de/rub/nds/modifiablevariable/longint/ModifiableLong.java index 5893411a..faf31111 100644 --- a/src/main/java/de/rub/nds/modifiablevariable/longint/ModifiableLong.java +++ b/src/main/java/de/rub/nds/modifiablevariable/longint/ModifiableLong.java @@ -8,7 +8,7 @@ package de.rub.nds.modifiablevariable.longint; import de.rub.nds.modifiablevariable.ModifiableVariable; -import de.rub.nds.modifiablevariable.util.ArrayConverter; +import de.rub.nds.modifiablevariable.util.DataConverter; import jakarta.xml.bind.annotation.XmlRootElement; /** @@ -133,7 +133,7 @@ public boolean isOriginalValueModified() { * @return A byte array representation of the current value with the specified size */ public byte[] getByteArray(int size) { - return ArrayConverter.longToBytes(getValue(), size); + return DataConverter.longToBytes(getValue(), size); } /** diff --git a/src/main/java/de/rub/nds/modifiablevariable/util/DataConverter.java b/src/main/java/de/rub/nds/modifiablevariable/util/DataConverter.java index 70af909f..6f1d1420 100644 --- a/src/main/java/de/rub/nds/modifiablevariable/util/DataConverter.java +++ b/src/main/java/de/rub/nds/modifiablevariable/util/DataConverter.java @@ -8,6 +8,7 @@ package de.rub.nds.modifiablevariable.util; import de.rub.nds.modifiablevariable.bytearray.ModifiableByteArray; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.lang.reflect.Array; import java.math.BigInteger; import java.util.List; @@ -161,6 +162,9 @@ public static long uInt32BytesToLong(byte[] bytes) { * @return Byte array representing the integer. If the array size is larger, 00 bytes are * prepended. If the number are larger, MSBs are omitted. */ + @SuppressFBWarnings( + value = "ICAST_QUESTIONABLE_UNSIGNED_RIGHT_SHIFT", + justification = "Unsigned right shift is intentional for extracting bytes from integer") public static byte[] intToBytes(int value, int size) { if (size < 1) { throw new IllegalArgumentException("The array must be at least of size 1"); diff --git a/src/main/java/de/rub/nds/modifiablevariable/util/RandomHelper.java b/src/main/java/de/rub/nds/modifiablevariable/util/RandomHelper.java index 447fcd79..1685d342 100644 --- a/src/main/java/de/rub/nds/modifiablevariable/util/RandomHelper.java +++ b/src/main/java/de/rub/nds/modifiablevariable/util/RandomHelper.java @@ -7,6 +7,7 @@ */ package de.rub.nds.modifiablevariable.util; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.util.Random; /** @@ -32,6 +33,10 @@ public final class RandomHelper { * * @return A Random instance with a fixed seed of 0 */ + @SuppressFBWarnings( + value = "MS_EXPOSE_REP", + justification = + "Intentionally sharing Random instance across application for deterministic testing") public static synchronized Random getRandom() { if (random == null) { random = new Random(0); @@ -60,6 +65,10 @@ public static BadRandom getBadSecureRandom() { * * @param randomInstance The Random instance to use as the singleton */ + @SuppressFBWarnings( + value = "EI_EXPOSE_STATIC_REP2", + justification = + "Intentionally allowing external Random instances to be set for testing flexibility") public static synchronized void setRandom(Random randomInstance) { random = randomInstance; } diff --git a/src/main/java/de/rub/nds/modifiablevariable/util/UnformattedByteArrayAdapter.java b/src/main/java/de/rub/nds/modifiablevariable/util/UnformattedByteArrayAdapter.java index 8ef88a17..5b44d11c 100644 --- a/src/main/java/de/rub/nds/modifiablevariable/util/UnformattedByteArrayAdapter.java +++ b/src/main/java/de/rub/nds/modifiablevariable/util/UnformattedByteArrayAdapter.java @@ -61,7 +61,7 @@ public UnformattedByteArrayAdapter() { @Override public byte[] unmarshal(String value) { value = value.replaceAll("\\s", ""); - return ArrayConverter.hexStringToByteArray(value); + return DataConverter.hexStringToByteArray(value); } /** @@ -75,6 +75,6 @@ public byte[] unmarshal(String value) { */ @Override public String marshal(byte[] value) { - return ArrayConverter.bytesToHexString(value, false, false); + return DataConverter.bytesToHexString(value, false, false); } }