[
https://issues.apache.org/jira/browse/CAMEL-26009?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18130942#comment-18130942
]
Claus Ibsen commented on CAMEL-26009:
-------------------------------------
Fix in PR https://github.com/apache/camel/pull/28355 (one PR for the 16 data
format tickets CAMEL-25995 to CAMEL-26011, except CAMEL-26000). The PR
description lists the change per ticket.
_Claude Code on behalf of davsclaus_
> camel-tarfile - marshal takes the entry size from the CamelFileLength header,
> which fails after the body has changed
> --------------------------------------------------------------------------------------------------------------------
>
> Key: CAMEL-26009
> URL: https://issues.apache.org/jira/browse/CAMEL-26009
> Project: Camel
> Issue Type: Bug
> Components: camel-tarfile
> Affects Versions: 4.18.0, 4.22.0, 4.23.0
> Reporter: Claus Ibsen
> Assignee: Claus Ibsen
> Priority: Minor
> Fix For: 4.24.0
>
>
> The tarFile marshal writes the size of the entry from the {{CamelFileLength}}
> header, or else from {{available()}} of the stream ({{TarFileDataFormat}},
> main 56aa5f4970a6, lines 67 and 81). Tar needs the exact size before the
> content, and commons-compress fails when the content differs from it. The
> file consumer sets {{CamelFileLength}} to the size of the file it read. So
> any route that changes the body after a file consumer and then marshals
> tarFile fails. Examples: decompressing the file first, or converting or
> transforming the body. The iterators of zipFile and tarFile also copy the
> {{CamelFileLength}} of the archive to each entry message, so tarring the
> entries of a split again fails the same way (read from the code).
> Checked on 4.24.0-SNAPSHOT with {{camel run}}: {{from: file:gzrun}} with a
> 64-byte {{plain.gz}}, then {{unmarshal: gzipDeflater}} (52 bytes), then
> {{marshal: tarFile}}: {{java.io.IOException: Entry 'plain.gz' closed at '52'
> before the '64' bytes specified in the header were written}}.
> *Proposed change*: take the size from the body when it is known (bytes, a
> file, a stream cache), or copy the body into a stream cache first, and use
> {{CamelFileLength}} only when it matches.
> _Claude Code on behalf of davsclaus_
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)