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