You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Claus Ibsen (Jira)" <ji...@apache.org> on 2026/10/22 14:55:00 UTC
[jira] [Created] (CAMEL-26009) camel-tarfile - marshal takes the entry size from the CamelFileLength header, which fails after the body has changed
Claus Ibsen created CAMEL-26009:
-----------------------------------
Summary: 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
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)