cmds.secrets: Fix rewrite() of long member names #135
1 changed files with 6 additions and 0 deletions
cmds.secrets: Fix rewrite() of long member names
All checks were successful
CI / Packaging - Kali Linux (pull_request) Successful in 5m21s
CI / Packaging - OpenSUSE Tumbleweed (pull_request) Successful in 5m26s
CI / Packaging test (pull_request) Successful in 0s
CI / Packaging - Kali Linux (push) Successful in 5m27s
CI / Packaging - OpenSUSE Tumbleweed (push) Successful in 5m3s
CI / Packaging test (push) Successful in 0s
All checks were successful
CI / Packaging - Kali Linux (pull_request) Successful in 5m21s
CI / Packaging - OpenSUSE Tumbleweed (pull_request) Successful in 5m26s
CI / Packaging test (pull_request) Successful in 0s
CI / Packaging - Kali Linux (push) Successful in 5m27s
CI / Packaging - OpenSUSE Tumbleweed (push) Successful in 5m3s
CI / Packaging test (push) Successful in 0s
rewrite() renames the members of a tar blob, but the TarInfo objects carried over from the input still hold the pax "path" supplement that was recorded for the original name. Re-serialization (tf_out.addfile()) uses the pax supplement with higher precedence than what's in the base header's name filed, so for member names exceeding the 100 character ustar limit the rewrite silently has no effect and the original name is written back. Drop the stale "path" supplement after renaming a member. tf_out.addfile() then builds a rewritten, up-to-date supplement from the name field if it needs one. Assisted-by: unsloth/Qwen3.8-27B-GGUF:Q4_K_M with pi.dev v1.0.0 Signed-off-by: Jan Lindemann <jan@janware.com>
commit
939eb09c0f
|
|
@ -40,6 +40,12 @@ def rewrite(blob: bytes, rewrite_filter: Callable[[str], str]) -> bytes:
|
|||
new_name = rewrite_filter(info.name)
|
||||
log(DEBUG, f'Rewriting {info.name} -> {new_name}')
|
||||
info.name = new_name
|
||||
# -- A pax "path" supplement from the input would override
|
||||
# the rewritten name on re-serialization
|
||||
info.pax_headers = {
|
||||
k: v
|
||||
for k, v in info.pax_headers.items() if k != 'path'
|
||||
}
|
||||
buf = tf_in.extractfile(info)
|
||||
tf_out.addfile(info, buf)
|
||||
return ret.getvalue()
|
||||
|
|
|
|||
Loading…
Reference in a new issue