Skip to content

fix: null-check AppenderDynamicMBean setLayout instantiation#4219

Open
SebTardif wants to merge 2 commits into
apache:2.xfrom
SebTardif:fix/appender-mbean-null-layout
Open

fix: null-check AppenderDynamicMBean setLayout instantiation#4219
SebTardif wants to merge 2 commits into
apache:2.xfrom
SebTardif:fix/appender-mbean-null-layout

Conversation

@SebTardif

Copy link
Copy Markdown
Contributor

What Problem This Solves

AppenderDynamicMBean.invoke("setLayout") calls OptionConverter.instantiateByClassName(..., null) and immediately passes the result to appender.setLayout(...). When the class name is invalid or not a Layout, instantiation returns null and the next line NPEs. Same pattern as LoggerDynamicMBean.addAppender (#4185).

Evidence

Failure scenario

final Layout layout =
    (Layout) OptionConverter.instantiateByClassName((String) params[0], Layout.class, null);
appender.setLayout(layout); // NPE when instantiate returns null

Red-green / tests

export JAVA_HOME=$(/usr/libexec/java_home -v 17)
./mvnw -pl log4j-1.2-api -am test \
  -Dtest=AppenderDynamicMBeanTest \
  -Dsurefire.failIfNoSpecifiedTests=false
  • Invalid class: no NPE, layout remains null
  • Valid PatternLayout: layout attached

Sibling audit

Summary

Null-check + error log on failed layout instantiation; unit tests + changelog.

OptionConverter.instantiateByClassName returns null when the class is missing
or not a Layout. setLayout immediately called appender.setLayout and could NPE
on invalid JMX setLayout class names. Log an error and skip attach instead.

Sibling of the LoggerDynamicMBean.addAppender guard (apache#4185).

Signed-off-by: Sebastien Tardif <sebtardif@ncf.ca>
Signed-off-by: Sebastien Tardif <sebtardif@ncf.ca>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Development

Successfully merging this pull request may close these issues.

1 participant