Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Deserialization disabled by default. #4334

Merged
merged 1 commit into from
Jun 3, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2021 Oracle and/or its affiliates.
* Copyright (c) 2021, 2022 Oracle and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -126,7 +126,7 @@ public static Builder builder() {
* This is a one-off call to set up global filter.
*/
public static void configureRuntime() {
builder().build().configure();
builder().onNoConfig(Action.CONFIGURE).build().configure();
}

/**
Expand Down Expand Up @@ -366,8 +366,8 @@ public enum TraceOption {
* {@link SerializationConfig#configureRuntime()} directly.
*/
public static class Builder implements io.helidon.common.Builder<Builder, SerializationConfig> {
private Action onWrongConfig = configuredAction(PROP_WRONG_CONFIG_ACTION, Action.WARN);
private Action onNoConfig = configuredAction(PROP_NO_CONFIG_ACTION, Action.WARN);
private Action onWrongConfig = configuredAction(PROP_WRONG_CONFIG_ACTION, Action.FAIL);
private Action onNoConfig = configuredAction(PROP_NO_CONFIG_ACTION, Action.FAIL);
private String filterPattern = System.getProperty(PROP_PATTERN);
private TraceOption traceSerialization = configuredTrace(TraceOption.NONE);
private boolean ignoreFiles = Boolean.getBoolean(PROP_IGNORE_FILES);
Expand Down Expand Up @@ -621,6 +621,10 @@ public Status checkInput(FilterInfo filterInfo) {
}
Status result = delegate.checkInput(filterInfo);

if (clazz == null) {
return result;
}

if (!reportedClasses.add(clazz)) {
if (basic) {
return result;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2021 Oracle and/or its affiliates.
* Copyright (c) 2021, 2022 Oracle and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -34,10 +34,8 @@ void testDefaults() {

SerializationConfig.ConfigOptions options = serializationConfig.options();
assertThat(options.traceSerialization(), is(SerializationConfig.TraceOption.NONE));
// TODO this will change in 3.0.0
assertThat(options.onNoConfig(), is(SerializationConfig.Action.WARN));
// TODO this will change in 3.0.0
assertThat(options.onWrongConfig(), is(SerializationConfig.Action.WARN));
assertThat(options.onNoConfig(), is(SerializationConfig.Action.FAIL));
assertThat(options.onWrongConfig(), is(SerializationConfig.Action.FAIL));
assertThat(options.filterPattern(), is("!*"));
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2020, 2021 Oracle and/or its affiliates.
* Copyright (c) 2020, 2022 Oracle and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -668,11 +668,46 @@ private static class OrdinalConverter {
private OrdinalConverter(Converter<?> converter, Class<?> aClass, int ordinal) {
this.ordinal = ordinal;
this.type = aClass;
this.converter = converter;
this.converter = new NullCheckingConverter<>(aClass, converter);
}

private OrdinalConverter(Converter<?> converter) {
this(converter, getConverterType(converter.getClass()), Priorities.find(converter, 100));
}

@Override
public String toString() {
return type.getName() + "->" + converter;
}
}

private static final class NullCheckingConverter<T> implements Converter<T> {
private final Converter<T> delegate;
private final Class<?> type;

private NullCheckingConverter(Class<?> type, Converter<T> delegate) {
this.delegate = delegate;
this.type = type;
}

@Override
public T convert(String value) throws IllegalArgumentException, NullPointerException {
if (value == null) {
throw new NullPointerException("Null not allowed in MP converters. Converter for type " + type.getName());
}

try {
return delegate.convert(value);
} catch (IllegalArgumentException | NullPointerException e) {
throw e;
} catch (Exception e) {
throw new IllegalArgumentException("Cannot convert value", e);
}
}

@Override
public String toString() {
return type.getName() + "->" + delegate;
}
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2020, 2021 Oracle and/or its affiliates.
* Copyright (c) 2020, 2022 Oracle and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -260,19 +260,6 @@ private <T> Optional<Converter<T>> findComponentConverter(Class<T> type) {
.findFirst()
.map(Map.Entry::getValue)
.map(it -> (Converter<T>) it)
.map(it -> (Converter<T>) value -> {
if (value == null) {
throw new NullPointerException("Null not allowed in MP converters. Converter for type " + forType
.getName());
}
try {
return it.convert(value);
} catch (IllegalArgumentException e) {
throw e;
} catch (Exception e) {
throw new IllegalArgumentException("Cannot convert value", e);
}
})
.or(() -> findImplicit(forType));
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#
# Copyright (c) 2022 Oracle and/or its affiliates.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

# The JBatch uses Serialization a lot, and these are all required
pattern=com.ibm.jbatch.**;jakarta.batch.runtime.BatchStatus;java.lang.Enum;\
java.util.Properties;java.util.Hashtable;java.util.Map$Entry
7 changes: 0 additions & 7 deletions examples/jbatch/src/main/resources/logging.properties
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,3 @@ java.util.logging.SimpleFormatter.format=%1$tY.%1$tm.%1$td %1$tH:%1$tM:%1$tS %4$

# Quiet Weld
org.jboss.level=WARNING

# Component specific log levels
#io.helidon.webserver.level=INFO
#io.helidon.config.level=INFO
#io.helidon.security.level=INFO
#io.helidon.common.level=INFO
#io.netty.level=INFO
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#
# Copyright (c) 2022 Oracle and/or its affiliates.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

pattern=org.jboss.weld.bean.proxy.util.SerializableClientProxy;org.jboss.weld.bean.StringBeanIdentifier;\
org.eclipse.microprofile.config.Config$_$$_WeldClientProxy;io.helidon.config.mp.MpConfigBuilder$NullCheckingConverter
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#
# Copyright (c) 2022 Oracle and/or its affiliates.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

# TCK converter to validate deserialization
pattern=org.eclipse.microprofile.config.tck.converters.DuckConverter;org.eclipse.microprofile.config.tck.converters.Duck