[slf4j-dev] [JIRA] (SLF4J-397) Bridge can still call underlying logging system with a null message.
QOS.CH (JIRA)
noreply-jira at qos.ch
Tue Mar 7 17:13:00 CET 2017
Joern Huxhorn created SLF4J-397:
-----------------------------------
Summary: Bridge can still call underlying logging system with a null message.
Key: SLF4J-397
URL: https://jira.qos.ch/browse/SLF4J-397
Project: SLF4J
Issue Type: Bug
Components: jul-to-slf4j
Affects Versions: 1.7.24
Environment: any
Reporter: Joern Huxhorn
Assignee: SLF4J developers list
I just found a bug while preparing SLF4J-396.
{code:java}
private String getMessageI18N(LogRecord record) {
String message = record.getMessage();
if (message == null) {
return null;
}
// [..]
}
{code}
should be changed to
{code:java}
private String getMessageI18N(LogRecord record) {
String message = record.getMessage(); // can be null!
// this is a check to avoid calling the underlying logging system
// with a null message. While it is legitimate to invoke j.u.l. with
// a null message, other logging frameworks do not support this.
// see also http://jira.qos.ch/browse/SLF4J-99
if (message == null) {
return "";
}
// [..]
}
{code}
and
{code:java}
public void publish(LogRecord record) {
// Silently ignore null records.
if (record == null) {
return;
}
Logger slf4jLogger = getSLF4JLogger(record);
String message = record.getMessage(); // can be null!
// this is a check to avoid calling the underlying logging system
// with a null message. While it is legitimate to invoke j.u.l. with
// a null message, other logging frameworks do not support this.
// see also http://jira.qos.ch/browse/SLF4J-99
if (message == null) {
message = "";
}
if (slf4jLogger instanceof LocationAwareLogger) {
callLocationAwareLogger((LocationAwareLogger) slf4jLogger, record);
} else {
callPlainSLF4JLogger(slf4jLogger, record);
}
}
{code}
should be changed to
{code:java}
public void publish(LogRecord record) {
// Silently ignore null records.
if (record == null) {
return;
}
Logger slf4jLogger = getSLF4JLogger(record);
if (slf4jLogger instanceof LocationAwareLogger) {
callLocationAwareLogger((LocationAwareLogger) slf4jLogger, record);
} else {
callPlainSLF4JLogger(slf4jLogger, record);
}
}
{code}
The local {{message}} variable was assigned but never used. I suspect some refactoring sneakily reintroduced the problematic case where the underlying logging system is called with a {{null}} message.
{{getMessageI18N}} is called by both {{callLocationAwareLogger}} and {{callPlainSLF4JLogger}} so this fix should be fine.
--
This message was sent by Atlassian JIRA
(v7.3.1#73012)
More information about the slf4j-dev
mailing list