Skip to content

DefaultFilterComponentBuilder creates builder attributes for onMatch/onMismatch without performing null checks. #3464

@JWT007

Description

@JWT007

Log4j 2.24.3

When using a configuration builder and adding a FilterComponentBuilder, generating XML from the ConfigurationBuilder causes exception when the filter is defined with a null OnMatch/OnMismatch Result.

Configuring the onMatch/onMismatch attributes is not required - null should be a valid value.

In this case, no attributtes should be added.

However in tthe DefaulttFilterComponentBuilder, attributes are added to tthe builder without performing a null-check first.

class DefaultFilterComponentBuilder extends DefaultComponentAndConfigurationBuilder<FilterComponentBuilder>
        implements FilterComponentBuilder {

    public DefaultFilterComponentBuilder(
            final DefaultConfigurationBuilder<? extends Configuration> builder,
            final String type,
            final String onMatch,
            final String onMismatch) {
        super(builder, type);
        addAttribute(AbstractFilterBuilder.ATTR_ON_MATCH, onMatch);
        addAttribute(AbstractFilterBuilder.ATTR_ON_MISMATCH, onMismatch);
    }
}

This results attributes with null values in the builder tree which can cause XML serialization problems.

I think this might be better:

class DefaultFilterComponentBuilder extends DefaultComponentAndConfigurationBuilder<FilterComponentBuilder>
        implements FilterComponentBuilder {

    public DefaultFilterComponentBuilder(
            final DefaultConfigurationBuilder<? extends Configuration> builder,
            final String type,
            final String onMatch,
            final String onMismatch) {
        super(builder, type);
        Optional.ofNullable(onMatch).ifPresent(() -> addAttribute(AbstractFilterBuilder.ATTR_ON_MATCH, onMatch));
        Optional.ofNullable(onMismatch).ifPresent(() -> addAttribute(AbstractFilterBuilder.ATTR_ON_MISMATCH, onMismatch));
    }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions