[ 
https://issues.apache.org/jira/browse/CAMEL-24725?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Andrea Cosentino reassigned CAMEL-24725:
----------------------------------------

    Assignee: Andrea Cosentino

> core: apply the shared deserialization filter in KeyValueRepositoryHelper
> -------------------------------------------------------------------------
>
>                 Key: CAMEL-24725
>                 URL: https://issues.apache.org/jira/browse/CAMEL-24725
>             Project: Camel
>          Issue Type: Improvement
>          Components: camel-core
>            Reporter: Andrea Cosentino
>            Assignee: Andrea Cosentino
>            Priority: Major
>
> {{KeyValueRepositoryHelper}} was added in 4.23 (CAMEL-24463) to centralise 
> the Java serialization used by the persistent {{KeyValueRepository}} 
> implementations. Its two {{deserialize(...)}} overloads create a plain 
> {{ObjectInputStream}} and call {{readObject()}} without installing an 
> {{ObjectInputFilter}}:
> * 
> {{core/camel-support/src/main/java/org/apache/camel/support/KeyValueRepositoryHelper.java}},
>  lines 84-91 and 103-110
> This is inconsistent with the rest of the codebase. Camel already has a 
> shared helper for exactly this, {{DeserializationFilterHelper}} (added in 
> 4.22), and every other {{ObjectInputStream}} call site in main source either 
> goes through it or installs an equivalent filter:
> * camel-mina {{MinaConverter}}
> * camel-netty {{NettyConverter}}, {{ObjectDecoder}}
> * camel-netty-http {{NettyHttpHelper}}
> * camel-vertx-http {{VertxHttpHelper}}
> * camel-http-common {{HttpHelper}}
> * camel-jms and camel-sjms {{JmsBinding}}
> * camel-spring-redis {{FilteringDeserializer}}
> * camel-consul {{ConsulRegistry}}
> * camel-infinispan {{DefaultExchangeHolderUtils}}
> * camel-pqc {{FileBasedKeyLifecycleManager}}
> * the Cassandra and JDBC aggregation repository codecs 
> ({{CassandraCamelCodec}}, {{JdbcCamelCodec}})
> The KeyValue repositories are the only remaining group without it, so the 
> filtering that the aggregation repositories apply is not applied by their 
> KeyValue counterparts. Affected components: camel-cassandraql, 
> camel-hazelcast, camel-infinispan, camel-jpa, camel-kafka, 
> camel-spring-redis, camel-sql.
> h3. Proposed change
> Install the shared filter in both {{deserialize}} overloads:
> {code:java}
> ObjectInputStream ois = new ObjectInputStream(bis);
> ois.setObjectInputFilter(DeserializationFilterHelper.resolveDeserializationFilter(null));
> {code}
> {{DeserializationFilterHelper.resolveDeserializationFilter}} already honours 
> an explicitly configured pattern first, then the JVM-wide 
> {{jdk.serialFilter}}, then the conservative Camel default - so this keeps 
> behaviour consistent with every other component and stays configurable.
> Optionally, expose a {{deserializationFilter}} option on the KeyValue 
> repositories, mirroring the option the JMS/HTTP/Netty components already 
> provide, so the allow-list can be narrowed per repository.
> The class Javadoc should also be updated - it currently states that the 
> stored data is trusted.
> h3. Notes
> {{KeyValueRepositoryHelper}} is {{@since 4.23}} and is not present on 
> {{camel-4.22.x}} or {{camel-4.18.x}}, so this only needs to land on {{main}} 
> before 4.23.0 is released. No backport required.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to