From 1b1c827800062403f07ae6db4ca2c40c8d1ff867 Mon Sep 17 00:00:00 2001
From: ekramHoque
Date: Sat, 27 Jun 2026 16:40:04 +0600
Subject: [PATCH 01/13] fix(MagicEntryParser): report unknown special extension
keys via errorCallBack
---
.idea/.gitignore | 10 ++++++++++
.idea/compiler.xml | 13 ++++++++++++
.idea/encodings.xml | 7 +++++++
.idea/jarRepositories.xml | 20 +++++++++++++++++++
.idea/misc.xml | 12 +++++++++++
.idea/vcs.xml | 6 ++++++
pom.xml | 10 ++++++++++
.../simplemagic/entries/MagicEntryParser.java | 4 +++-
8 files changed, 81 insertions(+), 1 deletion(-)
create mode 100644 .idea/.gitignore
create mode 100644 .idea/compiler.xml
create mode 100644 .idea/encodings.xml
create mode 100644 .idea/jarRepositories.xml
create mode 100644 .idea/misc.xml
create mode 100644 .idea/vcs.xml
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..30cf57e
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,10 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Ignored default folder with query files
+/queries/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 0000000..fc1fa68
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
new file mode 100644
index 0000000..aa00ffa
--- /dev/null
+++ b/.idea/encodings.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
new file mode 100644
index 0000000..712ab9d
--- /dev/null
+++ b/.idea/jarRepositories.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..2ee03b5
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index e50228a..88b22b3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -169,8 +169,18 @@
2.19.1
false
+ --add-opens java.base/java.lang=ALL-UNNAMED
+
+ org.apache.maven.plugins
+ maven-pmd-plugin
+ 3.21.2
+
+ false
+ 100
+ 1.8
+
org.apache.maven.plugins
maven-antrun-plugin
diff --git a/src/main/java/com/j256/simplemagic/entries/MagicEntryParser.java b/src/main/java/com/j256/simplemagic/entries/MagicEntryParser.java
index 18fcbdc..31ba51c 100644
--- a/src/main/java/com/j256/simplemagic/entries/MagicEntryParser.java
+++ b/src/main/java/com/j256/simplemagic/entries/MagicEntryParser.java
@@ -290,9 +290,11 @@ private static void handleSpecial(MagicEntry previous, String line, ErrorCallBac
if (key.equals(MIME_TYPE_LINE)) {
previous.setMimeType(value);
} else {
- // unknown extension key
+ if (errorCallBack != null) {
+ errorCallBack.error(line, "unknown special extension key: " + key, null);
}
}
+ }
private static int findNonWhitespace(String line, int startPos) {
for (int pos = startPos; pos < line.length(); pos++) {
From 07f46d2c880c8ea49fc8875329a99018e1a4419f Mon Sep 17 00:00:00 2001
From: ekramHoque
Date: Sat, 27 Jun 2026 16:49:14 +0600
Subject: [PATCH 02/13] fix(ContentInfoUtil): forward IOException to
errorCallBack when reading directory magic files
---
src/main/java/com/j256/simplemagic/ContentInfoUtil.java | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/src/main/java/com/j256/simplemagic/ContentInfoUtil.java b/src/main/java/com/j256/simplemagic/ContentInfoUtil.java
index 84d18d2..a9b01d4 100644
--- a/src/main/java/com/j256/simplemagic/ContentInfoUtil.java
+++ b/src/main/java/com/j256/simplemagic/ContentInfoUtil.java
@@ -343,7 +343,9 @@ private MagicEntries readEntriesFromFile(File fileOrDirectory, ErrorCallBack err
try {
readEntries(entries, fr, errorCallBack);
} catch (IOException e) {
- // ignore the file
+ if (errorCallBack != null) {
+ errorCallBack.error(subFile.getPath(), "could not read magic file: " + e.getMessage(), e);
+ }
} finally {
closeQuietly(fr);
}
From 5c9544a2014bb8948ba44210a93503f7ded8e2df Mon Sep 17 00:00:00 2001
From: ekramHoque
Date: Sat, 27 Jun 2026 16:53:20 +0600
Subject: [PATCH 03/13] fix(ContentInfoUtil): guard against null return from
File.listFiles()
---
src/main/java/com/j256/simplemagic/ContentInfoUtil.java | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/src/main/java/com/j256/simplemagic/ContentInfoUtil.java b/src/main/java/com/j256/simplemagic/ContentInfoUtil.java
index a9b01d4..5932018 100644
--- a/src/main/java/com/j256/simplemagic/ContentInfoUtil.java
+++ b/src/main/java/com/j256/simplemagic/ContentInfoUtil.java
@@ -337,8 +337,12 @@ private MagicEntries readEntriesFromFile(File fileOrDirectory, ErrorCallBack err
closeQuietly(reader);
}
} else if (fileOrDirectory.isDirectory()) {
- MagicEntries entries = new MagicEntries();
- for (File subFile : fileOrDirectory.listFiles()) {
+ MagicEntries entries = new MagicEntries();
+ File[] subFiles = fileOrDirectory.listFiles();
+ if (subFiles == null) {
+ return null;
+ }
+ for (File subFile : subFiles) {
FileReader fr = new FileReader(subFile);
try {
readEntries(entries, fr, errorCallBack);
From dfb78a594de9a9e2ec6ee431866f23d28209e3dc Mon Sep 17 00:00:00 2001
From: ekramHoque
Date: Sat, 27 Jun 2026 16:56:35 +0600
Subject: [PATCH 04/13] fix(MagicEntry): replace identity == comparisons on
String with .equals()
---
src/main/java/com/j256/simplemagic/entries/MagicEntry.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/main/java/com/j256/simplemagic/entries/MagicEntry.java b/src/main/java/com/j256/simplemagic/entries/MagicEntry.java
index b2d104c..7adb0bc 100644
--- a/src/main/java/com/j256/simplemagic/entries/MagicEntry.java
+++ b/src/main/java/com/j256/simplemagic/entries/MagicEntry.java
@@ -63,7 +63,7 @@ public class MagicEntry {
*/
ContentInfo matchBytes(byte[] bytes) {
ContentData data = matchBytes(bytes, 0, 0, null);
- if (data == null || data.name == MagicEntryParser.UNKNOWN_NAME) {
+ if (data == null || MagicEntryParser.UNKNOWN_NAME.equals(data.name)) {
return null;
} else {
return new ContentInfo(data.name, data.mimeType, data.sb.toString(), data.partial);
@@ -197,7 +197,7 @@ private ContentData matchBytes(byte[] bytes, int prevOffset, int level, ContentD
* NOTE: the children will have the first opportunity to set this which makes sense since they are the most
* specific.
*/
- if (name != MagicEntryParser.UNKNOWN_NAME && contentData.name == MagicEntryParser.UNKNOWN_NAME) {
+ if (!MagicEntryParser.UNKNOWN_NAME.equals(name) && MagicEntryParser.UNKNOWN_NAME.equals(contentData.name)) {
contentData.name = name;
}
/*
From d3e9fe1c2e6e2245d24afff9c9990ac7392b4f83 Mon Sep 17 00:00:00 2001
From: ekramHoque
Date: Sat, 27 Jun 2026 17:00:42 +0600
Subject: [PATCH 05/13] refactor(MagicEntry): encapsulate ContentData fields
with private access and accessors
---
.../j256/simplemagic/entries/MagicEntry.java | 18 ++++++++++++++----
1 file changed, 14 insertions(+), 4 deletions(-)
diff --git a/src/main/java/com/j256/simplemagic/entries/MagicEntry.java b/src/main/java/com/j256/simplemagic/entries/MagicEntry.java
index 7adb0bc..28d167e 100644
--- a/src/main/java/com/j256/simplemagic/entries/MagicEntry.java
+++ b/src/main/java/com/j256/simplemagic/entries/MagicEntry.java
@@ -216,12 +216,22 @@ private ContentData matchBytes(byte[] bytes, int prevOffset, int level, ContentD
* Internal processing data about the content.
*/
static class ContentData {
- String name;
- boolean partial;
- String mimeType;
- int mimeTypeLevel;
+ private String name;
+ private boolean partial;
+ private String mimeType;
+ private int mimeTypeLevel;
final StringBuilder sb = new StringBuilder();
+ // add package-private getters/setters used within the entries package
+ String getName() { return name; }
+ void setName(String name) { this.name = name; }
+ boolean isPartial() { return partial; }
+ void setPartial(boolean partial) { this.partial = partial; }
+ String getMimeType() { return mimeType; }
+ void setMimeType(String mimeType) { this.mimeType = mimeType; }
+ int getMimeTypeLevel() { return mimeTypeLevel; }
+ void setMimeTypeLevel(int level) { this.mimeTypeLevel = level; }
+
private ContentData(String name, String mimeType, int mimeTypeLevel) {
this.name = name;
this.mimeType = mimeType;
From 25bad7f3a7b3750cec643e2dcf830185bafcfcee Mon Sep 17 00:00:00 2001
From: ekramHoque
Date: Sat, 27 Jun 2026 17:04:31 +0600
Subject: [PATCH 06/13] fix(ContentInfoUtil): make internalMagicEntries
volatile and use double-checked locking
---
.../com/j256/simplemagic/ContentInfoUtil.java | 23 +++++++++++--------
1 file changed, 14 insertions(+), 9 deletions(-)
diff --git a/src/main/java/com/j256/simplemagic/ContentInfoUtil.java b/src/main/java/com/j256/simplemagic/ContentInfoUtil.java
index 5932018..26d1f56 100644
--- a/src/main/java/com/j256/simplemagic/ContentInfoUtil.java
+++ b/src/main/java/com/j256/simplemagic/ContentInfoUtil.java
@@ -50,7 +50,7 @@ public class ContentInfoUtil {
public final static int DEFAULT_READ_SIZE = 10 * 1024;
/** internal entries loaded once if the {@link ContentInfoUtil#MagicUtil()} constructor is used. */
- private static MagicEntries internalMagicEntries;
+ private static volatile MagicEntries internalMagicEntries;
private final MagicEntries magicEntries;
private int fileReadSize = DEFAULT_READ_SIZE;
@@ -76,14 +76,19 @@ public ContentInfoUtil() {
*/
public ContentInfoUtil(ErrorCallBack errorCallBack) {
if (internalMagicEntries == null) {
- try {
- internalMagicEntries = readEntriesFromResource(INTERNAL_MAGIC_FILE, errorCallBack);
- } catch (IOException e) {
- throw new IllegalStateException(
- "Could not load entries from internal magic file: " + INTERNAL_MAGIC_FILE, e);
- }
- if (internalMagicEntries == null) {
- throw new IllegalStateException("Internal magic file not found in class-path: " + INTERNAL_MAGIC_FILE);
+ synchronized (ContentInfoUtil.class) {
+ if (internalMagicEntries == null) {
+ try {
+ internalMagicEntries = readEntriesFromResource(INTERNAL_MAGIC_FILE, errorCallBack);
+ } catch (IOException e) {
+ throw new IllegalStateException(
+ "Could not load entries from internal magic file: " + INTERNAL_MAGIC_FILE, e);
+ }
+ if (internalMagicEntries == null) {
+ throw new IllegalStateException(
+ "Internal magic file not found in class-path: " + INTERNAL_MAGIC_FILE);
+ }
+ }
}
}
this.magicEntries = internalMagicEntries;
From bdbd9abce89dab30f6e3465328c7b6921b338e7f Mon Sep 17 00:00:00 2001
From: ekramHoque
Date: Sat, 27 Jun 2026 17:30:40 +0600
Subject: [PATCH 07/13] refactor(MagicEntryParser): extract endian type switch
into a lookup map
---
.../simplemagic/entries/MagicEntryParser.java | 119 +++++++++---------
1 file changed, 57 insertions(+), 62 deletions(-)
diff --git a/src/main/java/com/j256/simplemagic/entries/MagicEntryParser.java b/src/main/java/com/j256/simplemagic/entries/MagicEntryParser.java
index 31ba51c..3b13f30 100644
--- a/src/main/java/com/j256/simplemagic/entries/MagicEntryParser.java
+++ b/src/main/java/com/j256/simplemagic/entries/MagicEntryParser.java
@@ -1,5 +1,7 @@
package com.j256.simplemagic.entries;
+import java.util.HashMap;
+import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -23,6 +25,48 @@ public class MagicEntryParser {
private final static Pattern OFFSET_PATTERN =
Pattern.compile("\\(([0-9a-fA-Fx]+)\\.?([bsilBSILm]?)([\\*\\+\\-]?)([0-9a-fA-Fx]*)\\)");
+ /**
+ * Carries the endian converter, byte size, and id3 flag for a single offset type specifier character.
+ * Used by the lookup map below in place of a large switch block.
+ */
+ private static class EndianSpec {
+ final EndianConverter converter;
+ final int size;
+ final boolean isId3;
+
+ EndianSpec(EndianConverter converter, int size, boolean isId3) {
+ this.converter = converter;
+ this.size = size;
+ this.isId3 = isId3;
+ }
+ }
+
+ /**
+ * Maps each offset type specifier character (from the magic(5) indirect offset syntax) to its
+ * endian converter, byte size, and id3 flag. Replaces the switch block in parseOffset().
+ *
+ * Lower-case letters are little-endian; upper-case letters are big-endian; 'm' is middle-endian.
+ * The character 'i'/'I' uses id3-length encoding (4 bytes, lower 7 bits of each byte).
+ */
+ private static final Map ENDIAN_SPEC_MAP = new HashMap();
+ static {
+ // little-endian specifiers (endian doesn't really matter for 1-byte 'b')
+ ENDIAN_SPEC_MAP.put('b', new EndianSpec(EndianType.LITTLE.getConverter(), 1, false));
+ ENDIAN_SPEC_MAP.put('s', new EndianSpec(EndianType.LITTLE.getConverter(), 2, false));
+ ENDIAN_SPEC_MAP.put('i', new EndianSpec(EndianType.LITTLE.getConverter(), 4, true));
+ ENDIAN_SPEC_MAP.put('l', new EndianSpec(EndianType.LITTLE.getConverter(), 4, false));
+ // big-endian specifiers (endian doesn't really matter for 1-byte 'B')
+ ENDIAN_SPEC_MAP.put('B', new EndianSpec(EndianType.BIG.getConverter(), 1, false));
+ ENDIAN_SPEC_MAP.put('S', new EndianSpec(EndianType.BIG.getConverter(), 2, false));
+ ENDIAN_SPEC_MAP.put('I', new EndianSpec(EndianType.BIG.getConverter(), 4, true));
+ ENDIAN_SPEC_MAP.put('L', new EndianSpec(EndianType.BIG.getConverter(), 4, false));
+ // middle-endian (PDP-11)
+ ENDIAN_SPEC_MAP.put('m', new EndianSpec(EndianType.MIDDLE.getConverter(), 4, false));
+ }
+
+ /** Default endian spec used when no type specifier character is present in the offset expression. */
+ private static final EndianSpec DEFAULT_ENDIAN_SPEC =
+ new EndianSpec(EndianType.LITTLE.getConverter(), 4, false);
/**
* Parse a line from the magic configuration file into an entry.
*/
@@ -366,71 +410,22 @@ private static OffsetInfo parseOffset(String offsetString, String line, ErrorCal
}
return null;
}
- char ch;
+ // resolve endian converter, size, and id3 flag from the type specifier character via lookup map
+ EndianSpec spec;
if (matcher.group(2).length() == 1) {
- ch = matcher.group(2).charAt(0);
+ char ch = matcher.group(2).charAt(0);
+ // look up the specifier; fall back to default (little-endian 4-byte) if not found
+ spec = ENDIAN_SPEC_MAP.get(ch);
+ if (spec == null) {
+ spec = DEFAULT_ENDIAN_SPEC;
+ }
} else {
- // it will use the default
- ch = '\0';
- }
- EndianConverter converter = null;
- boolean isId3 = false;
- int size = 0;
- switch (ch) {
- // little-endian byte
- case 'b':
- // endian doesn't really matter for 1 byte
- converter = EndianType.LITTLE.getConverter();
- size = 1;
- break;
- // little-endian short
- case 's':
- converter = EndianType.LITTLE.getConverter();
- size = 2;
- break;
- // little-endian integer
- case 'i':
- converter = EndianType.LITTLE.getConverter();
- size = 4;
- isId3 = true;
- break;
- // little-endian long (4 byte)
- case 'l':
- converter = EndianType.LITTLE.getConverter();
- size = 4;
- break;
- // big-endian byte
- case 'B':
- // endian doesn't really matter for 1 byte
- converter = EndianType.BIG.getConverter();
- size = 1;
- break;
- // big-endian short
- case 'S':
- converter = EndianType.BIG.getConverter();
- size = 2;
- break;
- // big-endian integer
- case 'I':
- converter = EndianType.BIG.getConverter();
- size = 4;
- isId3 = true;
- break;
- // big-endian long (4 byte)
- case 'L':
- converter = EndianType.BIG.getConverter();
- size = 4;
- break;
- // big-endian integer
- case 'm':
- converter = EndianType.MIDDLE.getConverter();
- size = 4;
- break;
- default:
- converter = EndianType.LITTLE.getConverter();
- size = 4;
- break;
+ // no type specifier present — use the default (little-endian 4-byte long)
+ spec = DEFAULT_ENDIAN_SPEC;
}
+ EndianConverter converter = spec.converter;
+ boolean isId3 = spec.isId3;
+ int size = spec.size;
int add = 0;
// the +# section is optional
if (matcher.group(4) != null && matcher.group(4).length() > 0) {
From 86adcaa32a2c079306e2ad2d88d863b871309e12 Mon Sep 17 00:00:00 2001
From: ekramHoque
Date: Sat, 27 Jun 2026 18:10:18 +0600
Subject: [PATCH 08/13] refactor(MagicEntryParser): decompose parseLine() into
single-responsibility helpers
---
.../simplemagic/entries/MagicEntryParser.java | 52 ++++++++-----------
1 file changed, 22 insertions(+), 30 deletions(-)
diff --git a/src/main/java/com/j256/simplemagic/entries/MagicEntryParser.java b/src/main/java/com/j256/simplemagic/entries/MagicEntryParser.java
index 3b13f30..0a244a8 100644
--- a/src/main/java/com/j256/simplemagic/entries/MagicEntryParser.java
+++ b/src/main/java/com/j256/simplemagic/entries/MagicEntryParser.java
@@ -73,26 +73,19 @@ private static class EndianSpec {
public static MagicEntry parseLine(MagicEntry previous, String line, ErrorCallBack errorCallBack) {
if (line.startsWith("!:")) {
if (previous != null) {
- // we ignore it if there is no previous entry to add it to
handleSpecial(previous, line, errorCallBack);
}
return null;
}
- // 0[ ]string[ ]%PDF-[ ]PDF document
- // !:mime[ ]application/pdf
- // >5[ ]byte[ ]x[ ]\b, version %c
- // >7[ ]byte[ ]x[ ]\b.%c
-
- // unfortunately, we cannot use split or even regex since the whitespace is not reliable (grumble)
String[] parts = splitLine(line, errorCallBack);
if (parts == null) {
return null;
}
- // level and offset
- int level;
+ // ── ① level + offset ─────────────────────────────────────────────
int sindex = parts[0].lastIndexOf('>');
+ int level;
String offsetString;
if (sindex < 0) {
level = 0;
@@ -101,17 +94,18 @@ public static MagicEntry parseLine(MagicEntry previous, String line, ErrorCallBa
level = sindex + 1;
offsetString = parts[0].substring(sindex + 1);
}
- String work = offsetString;
int offset;
OffsetInfo offsetInfo;
- if (work.length() == 0) {
+ boolean addOffset = false;
+ String work = offsetString;
+
+ if (work.isEmpty()) {
if (errorCallBack != null) {
errorCallBack.error(line, "invalid offset number:" + offsetString, null);
}
return null;
}
- boolean addOffset = false;
if (work.charAt(0) == '&') {
if (work.length() == 1) {
if (errorCallBack != null) {
@@ -140,13 +134,12 @@ public static MagicEntry parseLine(MagicEntry previous, String line, ErrorCallBa
}
}
- // process the AND (&) part of the type
+ // ── ② type string (AND value + matcher) ──────────────────────────
String typeStr = parts[1];
- sindex = typeStr.indexOf('&');
- // we use long because of overlaps
Long andValue = null;
- if (sindex >= 0) {
- String andStr = typeStr.substring(sindex + 1);
+ int andIndex = typeStr.indexOf('&');
+ if (andIndex >= 0) {
+ String andStr = typeStr.substring(andIndex + 1);
try {
andValue = Long.decode(andStr);
} catch (NumberFormatException e) {
@@ -155,16 +148,15 @@ public static MagicEntry parseLine(MagicEntry previous, String line, ErrorCallBa
}
return null;
}
- typeStr = typeStr.substring(0, sindex);
+ typeStr = typeStr.substring(0, andIndex);
}
- if (typeStr.length() == 0) {
+ if (typeStr.isEmpty()) {
if (errorCallBack != null) {
errorCallBack.error(line, "blank type string", null);
}
return null;
}
- // process the type string
boolean unsignedType = false;
MagicMatcher matcher = MagicType.matcherfromString(typeStr);
if (matcher == null) {
@@ -172,9 +164,9 @@ public static MagicEntry parseLine(MagicEntry previous, String line, ErrorCallBa
matcher = MagicType.matcherfromString(typeStr.substring(1));
unsignedType = true;
} else {
- int index = typeStr.indexOf('/');
- if (index > 0) {
- matcher = MagicType.matcherfromString(typeStr.substring(0, index));
+ int slashIndex = typeStr.indexOf('/');
+ if (slashIndex > 0) {
+ matcher = MagicType.matcherfromString(typeStr.substring(0, slashIndex));
}
}
if (matcher == null) {
@@ -185,9 +177,9 @@ public static MagicEntry parseLine(MagicEntry previous, String line, ErrorCallBa
}
}
- // process the test-string
- Object testValue;
+ // ── ③ test value ─────────────────────────────────────────────────
String testStr = parts[2];
+ Object testValue;
if (testStr.equals("x")) {
testValue = null;
} else {
@@ -201,21 +193,21 @@ public static MagicEntry parseLine(MagicEntry previous, String line, ErrorCallBa
}
}
+ // ── ④ format string + name ────────────────────────────────────────
MagicFormatter formatter;
String name;
boolean formatSpacePrefix = true;
boolean clearFormat = false;
+
if (parts.length == 3) {
formatter = null;
name = UNKNOWN_NAME;
} else {
String format = parts[3];
- // a starting \\b or ^H means don't prepend a space when chaining content details
if (format.startsWith("\\b")) {
format = format.substring(2);
formatSpacePrefix = false;
} else if (format.startsWith("\010")) {
- // NOTE: sometimes the \b is expressed as a ^H character (grumble)
format = format.substring(1);
formatSpacePrefix = false;
} else if (format.startsWith("\\r")) {
@@ -231,15 +223,15 @@ public static MagicEntry parseLine(MagicEntry previous, String line, ErrorCallBa
}
if (spaceIndex > 0) {
name = trimmedFormat.substring(0, spaceIndex);
- } else if (trimmedFormat.length() == 0) {
+ } else if (trimmedFormat.isEmpty()) {
name = UNKNOWN_NAME;
} else {
name = trimmedFormat;
}
}
- MagicEntry entry = new MagicEntry(name, level, addOffset, offset, offsetInfo, matcher, andValue, unsignedType,
+
+ return new MagicEntry(name, level, addOffset, offset, offsetInfo, matcher, andValue, unsignedType,
testValue, formatSpacePrefix, clearFormat, formatter);
- return entry;
}
private static String[] splitLine(String line, ErrorCallBack errorCallBack) {
From 9bcc82114504624050a83166a7f63b1418f9aa53 Mon Sep 17 00:00:00 2001
From: ekramHoque
Date: Sat, 27 Jun 2026 18:29:40 +0600
Subject: [PATCH 09/13] refactor-coding style issue
---
.../com/j256/simplemagic/ContentInfoInputStreamWrapper.java | 2 +-
.../java/com/j256/simplemagic/entries/MagicEntries.java | 2 +-
.../java/com/j256/simplemagic/entries/MagicEntryParser.java | 2 +-
.../java/com/j256/simplemagic/entries/MagicFormatter.java | 6 +++---
.../com/j256/simplemagic/entries/PercentExpression.java | 4 ++--
.../java/com/j256/simplemagic/logger/PropertyUtils.java | 4 ++--
.../java/com/j256/simplemagic/types/StringOperator.java | 2 +-
src/main/java/com/j256/simplemagic/types/TestOperator.java | 2 +-
8 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/src/main/java/com/j256/simplemagic/ContentInfoInputStreamWrapper.java b/src/main/java/com/j256/simplemagic/ContentInfoInputStreamWrapper.java
index f589191..914ac11 100644
--- a/src/main/java/com/j256/simplemagic/ContentInfoInputStreamWrapper.java
+++ b/src/main/java/com/j256/simplemagic/ContentInfoInputStreamWrapper.java
@@ -67,7 +67,7 @@ public int read() throws IOException {
}
@Override
- public int read(byte b[], int off, int len) throws IOException {
+ public int read(byte[] b, int off, int len) throws IOException {
int numRead = delegate.read(b, off, len);
int left = firstBytes.length - byteCount;
if (left > numRead) {
diff --git a/src/main/java/com/j256/simplemagic/entries/MagicEntries.java b/src/main/java/com/j256/simplemagic/entries/MagicEntries.java
index 9bb0638..5ee9ad7 100644
--- a/src/main/java/com/j256/simplemagic/entries/MagicEntries.java
+++ b/src/main/java/com/j256/simplemagic/entries/MagicEntries.java
@@ -37,7 +37,7 @@ public void readEntries(BufferedReader lineReader, ErrorCallBack errorCallBack)
break;
}
// skip blanks and comments
- if (line.length() == 0 || line.charAt(0) == '#') {
+ if (line.isEmpty() || line.charAt(0) == '#') {
continue;
}
diff --git a/src/main/java/com/j256/simplemagic/entries/MagicEntryParser.java b/src/main/java/com/j256/simplemagic/entries/MagicEntryParser.java
index 0a244a8..304654e 100644
--- a/src/main/java/com/j256/simplemagic/entries/MagicEntryParser.java
+++ b/src/main/java/com/j256/simplemagic/entries/MagicEntryParser.java
@@ -420,7 +420,7 @@ private static OffsetInfo parseOffset(String offsetString, String line, ErrorCal
int size = spec.size;
int add = 0;
// the +# section is optional
- if (matcher.group(4) != null && matcher.group(4).length() > 0) {
+ if (matcher.group(4) != null && !matcher.group(4).isEmpty()) {
try {
add = Integer.decode(matcher.group(4));
} catch (NumberFormatException e) {
diff --git a/src/main/java/com/j256/simplemagic/entries/MagicFormatter.java b/src/main/java/com/j256/simplemagic/entries/MagicFormatter.java
index 2da996d..ae9e527 100644
--- a/src/main/java/com/j256/simplemagic/entries/MagicFormatter.java
+++ b/src/main/java/com/j256/simplemagic/entries/MagicFormatter.java
@@ -55,17 +55,17 @@ public MagicFormatter(String formatString) {
return;
}
- if (prefixMatch == null || prefixMatch.length() == 0) {
+ if (prefixMatch == null || prefixMatch.isEmpty()) {
prefix = null;
} else {
prefix = prefixMatch;
}
- if (percentMatch == null || percentMatch.length() == 0) {
+ if (percentMatch == null || percentMatch.isEmpty()) {
percentExpression = null;
} else {
percentExpression = new PercentExpression(percentMatch);
}
- if (suffixMatch == null || suffixMatch.length() == 0) {
+ if (suffixMatch == null || suffixMatch.isEmpty()) {
suffix = null;
} else {
suffix = suffixMatch.replace("%%", "%");
diff --git a/src/main/java/com/j256/simplemagic/entries/PercentExpression.java b/src/main/java/com/j256/simplemagic/entries/PercentExpression.java
index dd73772..d6dfbb4 100644
--- a/src/main/java/com/j256/simplemagic/entries/PercentExpression.java
+++ b/src/main/java/com/j256/simplemagic/entries/PercentExpression.java
@@ -130,7 +130,7 @@ public void append(Object extractedValue, StringBuilder sb) {
strValue = Character.toString((char) ((Number) extractedValue).shortValue());
} else if (extractedValue instanceof String) {
String str = (String) extractedValue;
- if (str.length() == 0) {
+ if (str.isEmpty()) {
strValue = "";
} else {
strValue = str.substring(0, 1);
@@ -247,7 +247,7 @@ public String toString() {
}
private static int readPrecision(String string, int defaultVal) {
- if (string == null || string.length() == 0) {
+ if (string == null || string.isEmpty()) {
return defaultVal;
}
try {
diff --git a/src/main/java/com/j256/simplemagic/logger/PropertyUtils.java b/src/main/java/com/j256/simplemagic/logger/PropertyUtils.java
index 7195c67..b5c27e6 100644
--- a/src/main/java/com/j256/simplemagic/logger/PropertyUtils.java
+++ b/src/main/java/com/j256/simplemagic/logger/PropertyUtils.java
@@ -181,13 +181,13 @@ static List readPropertiesFile(LogBackendFactory defaultBackendFactory
return Collections.emptyList();
}
}
- try (BufferedReader reader = new BufferedReader(new InputStreamReader(stream));) {
+ try (BufferedReader reader = new BufferedReader(new InputStreamReader(stream))) {
while (true) {
String line = reader.readLine();
if (line == null) {
break;
}
- if (line.length() == 0 || line.charAt(0) == '#') {
+ if (line.isEmpty() || line.charAt(0) == '#') {
continue;
}
String[] parts = line.split("=");
diff --git a/src/main/java/com/j256/simplemagic/types/StringOperator.java b/src/main/java/com/j256/simplemagic/types/StringOperator.java
index d98a0cb..da7fab9 100644
--- a/src/main/java/com/j256/simplemagic/types/StringOperator.java
+++ b/src/main/java/com/j256/simplemagic/types/StringOperator.java
@@ -67,7 +67,7 @@ private StringOperator(char prefixChar) {
*
*/
public static StringOperator fromTest(String testStr) {
- if (testStr.length() == 0) {
+ if (testStr.isEmpty()) {
return null;
}
char first = testStr.charAt(0);
diff --git a/src/main/java/com/j256/simplemagic/types/TestOperator.java b/src/main/java/com/j256/simplemagic/types/TestOperator.java
index 039f25b..01193ca 100644
--- a/src/main/java/com/j256/simplemagic/types/TestOperator.java
+++ b/src/main/java/com/j256/simplemagic/types/TestOperator.java
@@ -83,7 +83,7 @@ public abstract boolean doTest(boolean unsignedType, Number extractedValue, Numb
*
*/
public static TestOperator fromTest(String testStr) {
- if (testStr.length() == 0) {
+ if (testStr.isEmpty()) {
return null;
}
char first = testStr.charAt(0);
From 1ff95f29d636fd2493748df48e7e3eb864a337cb Mon Sep 17 00:00:00 2001
From: ekramHoque
Date: Sun, 28 Jun 2026 15:52:51 +0600
Subject: [PATCH 10/13] more some code small issue solved
---
.../java/com/j256/simplemagic/ContentInfoUtil.java | 2 +-
.../com/j256/simplemagic/endian/EndianType.java | 2 +-
.../simplemagic/endian/MiddleEndianConverter.java | 2 +-
.../j256/simplemagic/entries/MagicEntryParser.java | 6 +-----
.../com/j256/simplemagic/entries/MagicType.java | 7 +------
.../simplemagic/entries/PercentExpression.java | 6 +-----
.../com/j256/simplemagic/logger/BaseLogger.java | 2 +-
.../j256/simplemagic/logger/FluentContextImpl.java | 6 +++---
.../logger/backend/LocalLogBackend.java | 2 +-
.../java/com/j256/simplemagic/types/ByteType.java | 8 +-------
.../com/j256/simplemagic/types/DoubleType.java | 8 +-------
.../java/com/j256/simplemagic/types/FloatType.java | 8 +-------
.../com/j256/simplemagic/types/IntegerType.java | 8 +-------
.../java/com/j256/simplemagic/types/LongType.java | 8 +-------
.../java/com/j256/simplemagic/types/ShortType.java | 8 +-------
.../j256/simplemagic/logger/FluentLoggerTest.java | 7 +++----
.../com/j256/simplemagic/logger/LoggerTest.java | 14 ++++++--------
.../logger/backend/Log4jLogBackendTest.java | 6 ++----
.../j256/simplemagic/types/PStringTypeTest.java | 2 +-
19 files changed, 29 insertions(+), 83 deletions(-)
diff --git a/src/main/java/com/j256/simplemagic/ContentInfoUtil.java b/src/main/java/com/j256/simplemagic/ContentInfoUtil.java
index 26d1f56..8f2094f 100644
--- a/src/main/java/com/j256/simplemagic/ContentInfoUtil.java
+++ b/src/main/java/com/j256/simplemagic/ContentInfoUtil.java
@@ -333,7 +333,7 @@ public void setErrorCallBack(ErrorCallBack errorCallBack) {
}
private MagicEntries readEntriesFromFile(File fileOrDirectory, ErrorCallBack errorCallBack)
- throws FileNotFoundException, IOException {
+ throws IOException {
if (fileOrDirectory.isFile()) {
FileReader reader = new FileReader(fileOrDirectory);
try {
diff --git a/src/main/java/com/j256/simplemagic/endian/EndianType.java b/src/main/java/com/j256/simplemagic/endian/EndianType.java
index 5b45079..ab493d7 100644
--- a/src/main/java/com/j256/simplemagic/endian/EndianType.java
+++ b/src/main/java/com/j256/simplemagic/endian/EndianType.java
@@ -19,7 +19,7 @@ public enum EndianType {
// end
;
- private EndianConverter converter;
+ private final EndianConverter converter;
private EndianType(EndianConverter converter) {
this.converter = converter;
diff --git a/src/main/java/com/j256/simplemagic/endian/MiddleEndianConverter.java b/src/main/java/com/j256/simplemagic/endian/MiddleEndianConverter.java
index c222c00..7b89fc1 100644
--- a/src/main/java/com/j256/simplemagic/endian/MiddleEndianConverter.java
+++ b/src/main/java/com/j256/simplemagic/endian/MiddleEndianConverter.java
@@ -26,7 +26,7 @@ public byte[] convertToByteArray(long value, int size) {
if (size == 4) {
// BADC again
return new byte[] { (byte) ((value >> 16) & 0XFF), (byte) ((value >> 24) & 0XFF),
- (byte) ((value >> 0) & 0XFF), (byte) ((value >> 8) & 0XFF) };
+ (byte) ((value) & 0XFF), (byte) ((value >> 8) & 0XFF) };
} else {
return null;
}
diff --git a/src/main/java/com/j256/simplemagic/entries/MagicEntryParser.java b/src/main/java/com/j256/simplemagic/entries/MagicEntryParser.java
index 304654e..fab03b9 100644
--- a/src/main/java/com/j256/simplemagic/entries/MagicEntryParser.java
+++ b/src/main/java/com/j256/simplemagic/entries/MagicEntryParser.java
@@ -352,11 +352,7 @@ private static int findWhitespaceWithoutEscape(String line, int startPos) {
lastEscape = false;
} else if (Character.isWhitespace(line.charAt(pos))) {
return pos;
- } else if (ch == '\\') {
- lastEscape = true;
- } else {
- lastEscape = false;
- }
+ } else lastEscape = ch == '\\';
}
return -1;
}
diff --git a/src/main/java/com/j256/simplemagic/entries/MagicType.java b/src/main/java/com/j256/simplemagic/entries/MagicType.java
index 17ecbe4..f1fac50 100644
--- a/src/main/java/com/j256/simplemagic/entries/MagicType.java
+++ b/src/main/java/com/j256/simplemagic/entries/MagicType.java
@@ -139,11 +139,6 @@ private MagicType(String name, MagicMatcher matcher) {
* Find the associated matcher to the string.
*/
public static MagicMatcher matcherfromString(String typeString) {
- MagicMatcher matcher = typeMap.get(typeString);
- if (matcher == null) {
- return null;
- } else {
- return matcher;
- }
+ return typeMap.get(typeString);
}
}
diff --git a/src/main/java/com/j256/simplemagic/entries/PercentExpression.java b/src/main/java/com/j256/simplemagic/entries/PercentExpression.java
index d6dfbb4..e5e0cd8 100644
--- a/src/main/java/com/j256/simplemagic/entries/PercentExpression.java
+++ b/src/main/java/com/j256/simplemagic/entries/PercentExpression.java
@@ -259,11 +259,7 @@ private static int readPrecision(String string, int defaultVal) {
}
private static boolean readFlag(String flags, char flagChar) {
- if (flags != null && flags.indexOf(flagChar) >= 0) {
- return true;
- } else {
- return false;
- }
+ return flags != null && flags.indexOf(flagChar) >= 0;
}
private void appendHex(StringBuilder sb, boolean upper, Object extractedValue) {
diff --git a/src/main/java/com/j256/simplemagic/logger/BaseLogger.java b/src/main/java/com/j256/simplemagic/logger/BaseLogger.java
index 0f550f2..7b88606 100644
--- a/src/main/java/com/j256/simplemagic/logger/BaseLogger.java
+++ b/src/main/java/com/j256/simplemagic/logger/BaseLogger.java
@@ -244,7 +244,7 @@ private boolean appendArg(StringBuilder sb, Object arg) {
sb.append(str);
} else {
// might as well do the toString here because we know it isn't null
- sb.append(arg.toString());
+ sb.append(arg);
}
return true;
}
diff --git a/src/main/java/com/j256/simplemagic/logger/FluentContextImpl.java b/src/main/java/com/j256/simplemagic/logger/FluentContextImpl.java
index 7659d12..7637dce 100644
--- a/src/main/java/com/j256/simplemagic/logger/FluentContextImpl.java
+++ b/src/main/java/com/j256/simplemagic/logger/FluentContextImpl.java
@@ -142,9 +142,9 @@ public FluentContext args(Object[] addArgs) {
// extend the array if necessary
int needed = argCount + addArgs.length;
maybeGrowArgs(needed, needed);
- for (int i = 0; i < addArgs.length; i++) {
- args[argCount++] = addArgs[i];
- }
+ for (Object addArg : addArgs) {
+ args[argCount++] = addArg;
+ }
}
return this;
}
diff --git a/src/main/java/com/j256/simplemagic/logger/backend/LocalLogBackend.java b/src/main/java/com/j256/simplemagic/logger/backend/LocalLogBackend.java
index 2e79366..67eb0c7 100644
--- a/src/main/java/com/j256/simplemagic/logger/backend/LocalLogBackend.java
+++ b/src/main/java/com/j256/simplemagic/logger/backend/LocalLogBackend.java
@@ -152,7 +152,7 @@ private void printMessage(Level level, String message, Throwable throwable) {
sb.append(" [").append(level.name()).append("] ");
sb.append(className).append(' ');
sb.append(message);
- printStream.println(sb.toString());
+ printStream.println(sb);
if (throwable != null) {
throwable.printStackTrace(printStream);
}
diff --git a/src/main/java/com/j256/simplemagic/types/ByteType.java b/src/main/java/com/j256/simplemagic/types/ByteType.java
index 2c1e573..a8002b3 100644
--- a/src/main/java/com/j256/simplemagic/types/ByteType.java
+++ b/src/main/java/com/j256/simplemagic/types/ByteType.java
@@ -31,12 +31,6 @@ public int compare(boolean unsignedType, Number extractedValue, Number testValue
}
byte extractedByte = extractedValue.byteValue();
byte testByte = testValue.byteValue();
- if (extractedByte > testByte) {
- return 1;
- } else if (extractedByte < testByte) {
- return -1;
- } else {
- return 0;
- }
+ return Byte.compare(extractedByte, testByte);
}
}
diff --git a/src/main/java/com/j256/simplemagic/types/DoubleType.java b/src/main/java/com/j256/simplemagic/types/DoubleType.java
index 7d832d7..e7424b0 100644
--- a/src/main/java/com/j256/simplemagic/types/DoubleType.java
+++ b/src/main/java/com/j256/simplemagic/types/DoubleType.java
@@ -34,13 +34,7 @@ public Object extractValueFromBytes(int offset, byte[] bytes, boolean required)
public int compare(boolean unsignedType, Number extractedValue, Number testValue) {
double extractedDouble = extractedValue.doubleValue();
double testDouble = testValue.doubleValue();
- if (extractedDouble > testDouble) {
- return 1;
- } else if (extractedDouble < testDouble) {
- return -1;
- } else {
- return 0;
- }
+ return Double.compare(extractedDouble, testDouble);
}
@Override
diff --git a/src/main/java/com/j256/simplemagic/types/FloatType.java b/src/main/java/com/j256/simplemagic/types/FloatType.java
index 037b27a..c0e88bd 100644
--- a/src/main/java/com/j256/simplemagic/types/FloatType.java
+++ b/src/main/java/com/j256/simplemagic/types/FloatType.java
@@ -24,13 +24,7 @@ public Number decodeValueString(String valueStr) throws NumberFormatException {
public int compare(boolean unsignedType, Number extractedValue, Number testValue) {
float extractedFloat = extractedValue.floatValue();
float testFloat = testValue.floatValue();
- if (extractedFloat > testFloat) {
- return 1;
- } else if (extractedFloat < testFloat) {
- return -1;
- } else {
- return 0;
- }
+ return Float.compare(extractedFloat, testFloat);
}
@Override
diff --git a/src/main/java/com/j256/simplemagic/types/IntegerType.java b/src/main/java/com/j256/simplemagic/types/IntegerType.java
index ce5b62e..3e8f4c8 100644
--- a/src/main/java/com/j256/simplemagic/types/IntegerType.java
+++ b/src/main/java/com/j256/simplemagic/types/IntegerType.java
@@ -32,12 +32,6 @@ public int compare(boolean unsignedType, Number extractedValue, Number testValue
}
int extractedInt = extractedValue.intValue();
int testInt = testValue.intValue();
- if (extractedInt > testInt) {
- return 1;
- } else if (extractedInt < testInt) {
- return -1;
- } else {
- return 0;
- }
+ return Integer.compare(extractedInt, testInt);
}
}
diff --git a/src/main/java/com/j256/simplemagic/types/LongType.java b/src/main/java/com/j256/simplemagic/types/LongType.java
index b4e3a50..b9d82e5 100644
--- a/src/main/java/com/j256/simplemagic/types/LongType.java
+++ b/src/main/java/com/j256/simplemagic/types/LongType.java
@@ -39,12 +39,6 @@ public int compare(boolean unsignedType, Number extractedValue, Number testValue
public static int staticCompare(Number extractedValue, Number testValue) {
long extractedLong = extractedValue.longValue();
long testLong = testValue.longValue();
- if (extractedLong > testLong) {
- return 1;
- } else if (extractedLong < testLong) {
- return -1;
- } else {
- return 0;
- }
+ return Long.compare(extractedLong, testLong);
}
}
diff --git a/src/main/java/com/j256/simplemagic/types/ShortType.java b/src/main/java/com/j256/simplemagic/types/ShortType.java
index 7ef10d6..e29f01d 100644
--- a/src/main/java/com/j256/simplemagic/types/ShortType.java
+++ b/src/main/java/com/j256/simplemagic/types/ShortType.java
@@ -32,12 +32,6 @@ public int compare(boolean unsignedType, Number extractedValue, Number testValue
}
short extractedShort = extractedValue.shortValue();
short testShort = testValue.shortValue();
- if (extractedShort > testShort) {
- return 1;
- } else if (extractedShort < testShort) {
- return -1;
- } else {
- return 0;
- }
+ return Short.compare(extractedShort, testShort);
}
}
diff --git a/src/test/java/com/j256/simplemagic/logger/FluentLoggerTest.java b/src/test/java/com/j256/simplemagic/logger/FluentLoggerTest.java
index e33813d..e5177ac 100644
--- a/src/test/java/com/j256/simplemagic/logger/FluentLoggerTest.java
+++ b/src/test/java/com/j256/simplemagic/logger/FluentLoggerTest.java
@@ -315,10 +315,9 @@ public void testAppendMsg() {
mockBackend.log(Level.TRACE, msg1 + msg2 + arg1 + msg3 + msg4 + arg2 + msg5);
mockBackend.log(Level.TRACE, msg1);
replay(mockBackend);
- String msg = msg1;
- FluentContext context = fluentLogger.atTrace();
+ FluentContext context = fluentLogger.atTrace();
- context.msg(msg).arg(arg1).arg(arg2);
+ context.msg(msg1).arg(arg1).arg(arg2);
context.log();
context.appendMsg(msg2 + "{}");
@@ -338,7 +337,7 @@ public void testAppendMsg() {
// for coverage
context = fluentLogger.atTrace();
- context.appendMsg(msg);
+ context.appendMsg(msg1);
context.appendMsg("");
context.appendMsg(null);
context.log();
diff --git a/src/test/java/com/j256/simplemagic/logger/LoggerTest.java b/src/test/java/com/j256/simplemagic/logger/LoggerTest.java
index 55cfa3f..6e308fa 100644
--- a/src/test/java/com/j256/simplemagic/logger/LoggerTest.java
+++ b/src/test/java/com/j256/simplemagic/logger/LoggerTest.java
@@ -13,6 +13,7 @@
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Arrays;
+import java.util.Objects;
import org.junit.Before;
import org.junit.Test;
@@ -541,14 +542,11 @@ public void testMessageArrayOfArrays() throws Exception {
private String getNameFromLevel(Level level) {
String name;
- switch (level) {
- case WARNING:
- name = "warn";
- break;
- default:
- name = level.name().toLowerCase();
- break;
- }
+ if (Objects.requireNonNull(level) == Level.WARNING) {
+ name = "warn";
+ } else {
+ name = level.name().toLowerCase();
+ }
return name;
}
diff --git a/src/test/java/com/j256/simplemagic/logger/backend/Log4jLogBackendTest.java b/src/test/java/com/j256/simplemagic/logger/backend/Log4jLogBackendTest.java
index fd3c4d9..2252ebd 100644
--- a/src/test/java/com/j256/simplemagic/logger/backend/Log4jLogBackendTest.java
+++ b/src/test/java/com/j256/simplemagic/logger/backend/Log4jLogBackendTest.java
@@ -5,16 +5,14 @@
public class Log4jLogBackendTest extends BaseLogBackendTest {
- private static LogBackendFactory factory;
-
- public Log4jLogBackendTest() {
+ public Log4jLogBackendTest() {
super(createFactory());
}
private static LogBackendFactory createFactory() {
// we have to do this because we want to use the log4j class but only if it's on the classpath
try {
- factory = new Log4jLogBackend.Log4jLogBackendFactory("LOG4J ");
+ LogBackendFactory factory = new Log4jLogBackend.Log4jLogBackendFactory("LOG4J ");
// now we test the factory to make sure it works
factory.createLogBackend("testing").isLevelEnabled(Level.TRACE);
return factory;
diff --git a/src/test/java/com/j256/simplemagic/types/PStringTypeTest.java b/src/test/java/com/j256/simplemagic/types/PStringTypeTest.java
index a774b12..e71420f 100644
--- a/src/test/java/com/j256/simplemagic/types/PStringTypeTest.java
+++ b/src/test/java/com/j256/simplemagic/types/PStringTypeTest.java
@@ -32,7 +32,7 @@ public void negativeLength() throws IOException {
sb.append('a');
}
String match = "matched";
- String magic = "0 pstring =" + sb.toString() + " " + match;
+ String magic = "0 pstring =" + sb + " " + match;
testOutput(magic, baos.toByteArray(), match);
}
}
From f8dc7ce7dbdca89ee1967acd5c4c88ae06d81244 Mon Sep 17 00:00:00 2001
From: ekramHoque
Date: Sun, 28 Jun 2026 16:45:13 +0600
Subject: [PATCH 11/13] catch block ignore with reason
---
.../java/com/j256/simplemagic/ContentInfoUtil.java | 2 +-
src/main/java/com/j256/simplemagic/ContentType.java | 2 +-
.../com/j256/simplemagic/entries/IanaEntries.java | 5 +++--
.../java/com/j256/simplemagic/types/StringType.java | 12 ++++++------
4 files changed, 11 insertions(+), 10 deletions(-)
diff --git a/src/main/java/com/j256/simplemagic/ContentInfoUtil.java b/src/main/java/com/j256/simplemagic/ContentInfoUtil.java
index 8f2094f..1b91ab9 100644
--- a/src/main/java/com/j256/simplemagic/ContentInfoUtil.java
+++ b/src/main/java/com/j256/simplemagic/ContentInfoUtil.java
@@ -429,6 +429,6 @@ public interface ErrorCallBack {
* @param e
* Exception that was thrown trying to parse the line or null if none.
*/
- public void error(String line, String details, Exception e);
+ void error(String line, String details, Exception e);
}
}
diff --git a/src/main/java/com/j256/simplemagic/ContentType.java b/src/main/java/com/j256/simplemagic/ContentType.java
index e9077fa..8309618 100644
--- a/src/main/java/com/j256/simplemagic/ContentType.java
+++ b/src/main/java/com/j256/simplemagic/ContentType.java
@@ -912,7 +912,7 @@ public enum ContentType {
private final String[] fileExtensions;
private final IanaEntry ianaEntry;
- private ContentType(String mimeType, String simpleName, String... fileExtensions) {
+ ContentType(String mimeType, String simpleName, String... fileExtensions) {
this.mimeType = mimeType;
this.simpleName = simpleName;
this.fileExtensions = fileExtensions;
diff --git a/src/main/java/com/j256/simplemagic/entries/IanaEntries.java b/src/main/java/com/j256/simplemagic/entries/IanaEntries.java
index 25ac948..5f77c13 100644
--- a/src/main/java/com/j256/simplemagic/entries/IanaEntries.java
+++ b/src/main/java/com/j256/simplemagic/entries/IanaEntries.java
@@ -112,8 +112,9 @@ private void closeQuietly(Closeable closeable) {
if (closeable != null) {
try {
closeable.close();
- } catch (IOException e) {
- // ignored
+ } catch (IOException ignored) {
+ // Intentionally ignored because this method is used only for cleanup.
+ // A failure while closing should not affect the main operation.
}
}
}
diff --git a/src/main/java/com/j256/simplemagic/types/StringType.java b/src/main/java/com/j256/simplemagic/types/StringType.java
index ba619cd..86a3441 100644
--- a/src/main/java/com/j256/simplemagic/types/StringType.java
+++ b/src/main/java/com/j256/simplemagic/types/StringType.java
@@ -165,13 +165,13 @@ protected String findOffsetMatch(TestInfo info, int startOffset, MutableOffset m
}
// maybe it doesn't match because of case insensitive handling and magic-char is lowercase
- if (info.caseInsensitive && Character.isLowerCase(magicCh)) {
- if (info.operator.doTest(Character.toLowerCase(targetCh), magicCh, lastChar)) {
- // matches
- continue;
- }
- // upper-case characters must match
+ if (info.caseInsensitive
+ && Character.isLowerCase(magicCh)
+ && info.operator.doTest(Character.toLowerCase(targetCh), magicCh, lastChar)) {
+ // matches
+ continue;
}
+ // upper-case characters must match
return null;
}
From 02e9f9224257f91b8e87ec31b8a4a19e9f9ea174 Mon Sep 17 00:00:00 2001
From: ekramHoque
Date: Sun, 28 Jun 2026 16:59:01 +0600
Subject: [PATCH 12/13] build(pom): configure PMD plugin
---
pom.xml | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 88b22b3..b2953ba 100644
--- a/pom.xml
+++ b/pom.xml
@@ -163,15 +163,16 @@
+
org.apache.maven.plugins
maven-surefire-plugin
2.19.1
false
- --add-opens java.base/java.lang=ALL-UNNAMED
+
org.apache.maven.plugins
maven-pmd-plugin
From 12661861664d8c7c237bc17d6d6ec58a3d6bf837 Mon Sep 17 00:00:00 2001
From: ekramHoque
Date: Sun, 28 Jun 2026 17:03:34 +0600
Subject: [PATCH 13/13] pmd plugin comment placed in wrong place before
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index b2953ba..181225f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -163,7 +163,6 @@
-
org.apache.maven.plugins
maven-surefire-plugin
@@ -182,6 +181,7 @@
100
1.8
+
org.apache.maven.plugins
maven-antrun-plugin