Skip to content

Commit 5ef4670

Browse files
committed
Fix Spotbugs alerts up to rank 9
This fixes Spotbugs alerts up to rank 9 (the "scary" category). Most are false positives or problems in the tests. The `LocationInfo` fix in `log4j-1.2-api` prevents an NPE though.
1 parent 08ab8d9 commit 5ef4670

File tree

11 files changed

+40
-20
lines changed

11 files changed

+40
-20
lines changed

log4j-1.2-api/src/main/java/org/apache/log4j/WriterAppender.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import java.io.InterruptedIOException;
2121
import java.io.OutputStream;
2222
import java.io.OutputStreamWriter;
23+
import java.io.UnsupportedEncodingException;
2324
import java.io.Writer;
2425

2526
import org.apache.log4j.helpers.QuietWriter;
@@ -242,12 +243,8 @@ protected OutputStreamWriter createWriter(final OutputStream os) {
242243
if (enc != null) {
243244
try {
244245
retval = new OutputStreamWriter(os, enc);
245-
} catch (IOException e) {
246-
if (e instanceof InterruptedIOException) {
247-
Thread.currentThread().interrupt();
248-
}
249-
LOGGER.warn("Error initializing output writer.");
250-
LOGGER.warn("Unsupported encoding?");
246+
} catch (final UnsupportedEncodingException e) {
247+
LOGGER.warn("Error initializing output writer: encoding {} is not supported.", enc, e);
251248
}
252249
}
253250
if (retval == null) {

log4j-1.2-api/src/main/java/org/apache/log4j/spi/LocationInfo.java

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
import java.io.Serializable;
2020
import java.util.Objects;
2121

22+
import org.apache.logging.log4j.core.util.Integers;
23+
2224
/**
2325
* The internal representation of caller location information.
2426
*
@@ -101,35 +103,40 @@ public LocationInfo(final Throwable throwable, final String fqnOfCallingClass) {
101103
prevClass = thisClass;
102104
}
103105
}
104-
this.stackTraceElement = new StackTraceElement(declaringClass, methodName, file, Integer.parseInt(line));
105-
this.fullInfo = stackTraceElement.toString();
106+
if (declaringClass != null && methodName != null) {
107+
this.stackTraceElement = new StackTraceElement(declaringClass, methodName, file, Integers.parseInt(line));
108+
this.fullInfo = stackTraceElement.toString();
109+
} else {
110+
this.stackTraceElement = null;
111+
this.fullInfo = null;
112+
}
106113
}
107114

108115
/**
109116
* Gets the fully qualified class name of the caller making the logging request.
110117
*/
111118
public String getClassName() {
112-
return stackTraceElement.getClassName();
119+
return stackTraceElement != null ? stackTraceElement.getClassName() : NA;
113120
}
114121

115122
/**
116123
* Gets the file name of the caller.
117124
*/
118125
public String getFileName() {
119-
return stackTraceElement.getFileName();
126+
return stackTraceElement != null ? stackTraceElement.getFileName() : NA;
120127
}
121128

122129
/**
123130
* Gets the line number of the caller.
124131
*/
125132
public String getLineNumber() {
126-
return Integer.toString(stackTraceElement.getLineNumber());
133+
return stackTraceElement != null ? Integer.toString(stackTraceElement.getLineNumber()) : NA;
127134
}
128135

129136
/**
130137
* Gets the method name of the caller.
131138
*/
132139
public String getMethodName() {
133-
return stackTraceElement.getMethodName();
140+
return stackTraceElement != null ? stackTraceElement.getMethodName() : NA;
134141
}
135142
}

log4j-api/src/main/java/org/apache/logging/log4j/util/SortedArrayStringMap.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import java.util.Map;
3434
import java.util.Objects;
3535

36+
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
3637
import org.apache.logging.log4j.status.StatusLogger;
3738

3839
/**
@@ -545,6 +546,8 @@ private static byte[] marshall(final Object obj) throws IOException {
545546
}
546547
}
547548

549+
@SuppressFBWarnings(value = "OBJECT_DESERIALIZATION", justification = "Object deserialization uses either Java 9 " +
550+
"native filter or our custom filter to limit the kinds of classes deserialized.")
548551
private static Object unmarshall(final byte[] data, final ObjectInputStream inputStream)
549552
throws IOException, ClassNotFoundException {
550553
final ByteArrayInputStream bin = new ByteArrayInputStream(data);

log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/appender/db/jdbc/JdbcH2TestHelper.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import java.sql.DriverManager;
2424
import java.sql.SQLException;
2525

26+
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
2627
import org.apache.commons.io.file.PathUtils;
2728
import org.apache.commons.lang3.SystemUtils;
2829
import org.apache.logging.log4j.core.appender.db.jdbc.AbstractConnectionSource;
@@ -67,10 +68,12 @@ public static void deleteDir() throws IOException {
6768
}
6869
}
6970

71+
@SuppressFBWarnings(value = "DMI_EMPTY_DB_PASSWORD")
7072
public static Connection getConnectionInMemory() throws SQLException {
7173
return DriverManager.getConnection(CONNECTION_STRING_IN_MEMORY, USER_NAME, PASSWORD);
7274
}
7375

76+
@SuppressFBWarnings(value = "DMI_EMPTY_DB_PASSWORD")
7477
public static Connection getConnectionTempDir() throws SQLException {
7578
return DriverManager.getConnection(CONNECTION_STRING_TEMP_DIR, USER_NAME, PASSWORD);
7679
}

log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeAvroManager.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ public void send(final Event event) {
205205
} else {
206206
int eventCount;
207207
BatchEvent batch = null;
208-
synchronized(batchEvent) {
208+
synchronized(this) {
209209
batchEvent.addEvent(event);
210210
eventCount = batchEvent.size();
211211
final long now = System.nanoTime();

log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/AnnotationVsMarkerInterface.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818

1919
import java.util.concurrent.TimeUnit;
2020

21-
import org.apache.logging.log4j.util.PerformanceSensitive;
2221
import org.apache.logging.log4j.util.SortedArrayStringMap;
2322
import org.apache.logging.log4j.util.StringBuilderFormattable;
2423
import org.apache.logging.log4j.util.StringMap;
@@ -58,7 +57,7 @@ public class AnnotationVsMarkerInterface {
5857
@BenchmarkMode({Mode.Throughput, Mode.AverageTime, Mode.SampleTime, Mode.SingleShotTime})
5958
@OutputTimeUnit(TimeUnit.NANOSECONDS)
6059
public Object annotationMissing() {
61-
return map.getClass().isAnnotationPresent(PerformanceSensitive.class);
60+
return map.getClass().isAnnotationPresent(State.class);
6261
}
6362

6463
@Benchmark

log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/JdbcAppenderBenchmark.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import java.sql.Statement;
2323
import java.util.concurrent.TimeUnit;
2424

25+
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
2526
import org.apache.logging.log4j.LogManager;
2627
import org.apache.logging.log4j.Logger;
2728
import org.apache.logging.log4j.core.LoggerContext;
@@ -185,6 +186,7 @@ private String toCreateTableSqlStringHQLDB(final String tableName) {
185186
/**
186187
* Referred from log4j2-jdbc-appender.xml.
187188
*/
189+
@SuppressFBWarnings("DMI_EMPTY_DB_PASSWORD")
188190
public static Connection getConnectionH2() throws Exception {
189191
Class.forName("org.h2.Driver");
190192
return DriverManager.getConnection("jdbc:h2:mem:Log4j", "sa", "");
@@ -193,6 +195,7 @@ public static Connection getConnectionH2() throws Exception {
193195
/**
194196
* Referred from log4j2-jdbc-appender.xml.
195197
*/
198+
@SuppressFBWarnings("DMI_EMPTY_DB_PASSWORD")
196199
public static Connection getConnectionHSQLDB() throws Exception {
197200
Class.forName("org.hsqldb.jdbcDriver");
198201
return DriverManager.getConnection("jdbc:hsqldb:mem:Log4j", "sa", "");

log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/JpaAppenderBenchmark.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import java.sql.Statement;
2323
import java.util.concurrent.TimeUnit;
2424

25+
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
2526
import org.apache.logging.log4j.LogManager;
2627
import org.apache.logging.log4j.Logger;
2728
import org.apache.logging.log4j.core.LoggerContext;
@@ -165,6 +166,7 @@ public void tearDown() throws SQLException {
165166
/**
166167
* Referred from log4j2-jdbc-appender.xml.
167168
*/
169+
@SuppressFBWarnings("DMI_EMPTY_DB_PASSWORD")
168170
public static Connection getConnectionH2() throws Exception {
169171
Class.forName("org.h2.Driver");
170172
final Connection connection = DriverManager.getConnection("jdbc:h2:mem:Log4j;MODE=PostgreSQL", "sa", "");
@@ -182,6 +184,7 @@ public static Connection getConnectionH2() throws Exception {
182184
/**
183185
* Referred from log4j2-jdbc-appender.xml.
184186
*/
187+
@SuppressFBWarnings("DMI_EMPTY_DB_PASSWORD")
185188
public static Connection getConnectionHSQLDB() throws Exception {
186189
Class.forName("org.hsqldb.jdbcDriver");
187190
final Connection connection = DriverManager.getConnection("jdbc:hsqldb:mem:Log4j", "sa", "");

log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/ThreadsafeDateFormatBenchmark.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ public CachedTimeFixedFmt(final long timestamp) {
9090
}
9191
}
9292

93-
private class FormatterSimple {
93+
private static class FormatterSimple {
9494
private final SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss.SSS");
9595
private long timestamp;
9696
private String formatted;
@@ -108,7 +108,7 @@ public String format(final long timestamp) {
108108
}
109109
}
110110

111-
private class FormatterFixedReuseBuffer {
111+
private static class FormatterFixedReuseBuffer {
112112
private final FixedDateFormat customFormat = FixedDateFormat.createIfSupported("HH:mm:ss.SSS");
113113
private long timestamp;
114114
private String formatted;

log4j-perf/src/main/java/org/apache/logging/log4j/perf/nogc/NoGcMessage.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
* Reusable Message..
2525
*/
2626
public class NoGcMessage implements Message {
27-
class InternalState {
27+
static class InternalState {
2828
private final Object[] params = new Object[10];
2929
private int paramCount;
3030
private final StringBuilder buffer = new StringBuilder(2048);

0 commit comments

Comments
 (0)