Andrea Cosentino created CAMEL-24350:
----------------------------------------

             Summary: camel-google-pubsub: producer NPEs on non-convertible 
headers and drops non-Exchange list elements
                 Key: CAMEL-24350
                 URL: https://issues.apache.org/jira/browse/CAMEL-24350
             Project: Camel
          Issue Type: Bug
          Components: camel-google-pubsub
            Reporter: Andrea Cosentino
            Assignee: Andrea Cosentino


1. Header pass-through can hand protobuf a null value:
{code:java}
// GooglePubsubProducer.java:126-133
for (String camelHeader : exchange.getIn().getHeaders().keySet()) {
    String value = exchange.getIn().getHeader(camelHeader, String.class);
    if (headerFilterStrategy != null && 
headerFilterStrategy.applyFilterToCamelHeaders(camelHeader, value, exchange)) {
        continue;
    }
    messageBuilder.putAttributes(camelHeader, value);
}
{code}
{{putAttributes}} rejects null, so a header whose value is null or does not 
convert to String aborts the send with an NPE. The filter strategy is also 
consulted with a null value.

2. A List body that mixes exchanges and plain payloads silently drops the plain 
ones:
{code:java}
// GooglePubsubProducer.java:72-82
if (exchange.getIn().getBody() instanceof List) {
    boolean groupedExchanges = false;
    for (Object body : exchange.getIn().getBody(List.class)) {
        if (body instanceof Exchange) { send((Exchange) body); groupedExchanges 
= true; }
    }
    if (!groupedExchanges) { send(exchange); }
}
{code}
Non-Exchange elements are never published when at least one element is an 
Exchange. The same shape exists in {{consumer/AcknowledgeSync:72-76}}.

Found during a source audit of the {{components/camel-google}} module family 
against main @ c3b01310be15.



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

Reply via email to