Skip to content

caibx extract failure #272

@benoit-pierre

Description

@benoit-pierre

Using casync version v2-268-ge6817a7:

# Download our 2 versions:
▸ wget -c -O v1.tar.gz http://ota.koreader.rocks/koreader-kindlepw2-v2024.11-210-ga641207f7_2025-02-21.targz
[…]
▸ wget -c -O v2.tar.gz http://ota.koreader.rocks/koreader-kindlepw2-v2024.11-212-g3cf45b9dc_2025-02-22.targz
[…]
# Notice the first version is slightly smaller:
▸ du -b v1.tar.gz v2.tar.gz
44236764        v1.tar.gz
44249752        v2.tar.gz

# Create server data:
▸ rm -rf server
▸ mkdir server
▸ for f in {v1,v2}.tar.gz; do casync make --store=server/default.castr --compression=zstd --without=all "server/$f.caibx" "$f"; done
383c545328f8d65ee6605d5684a5aa03f2951163576c05b04174029cc4edd05d
2967d8497c486bcbe24203b0d5448fa6d94ad0d0c0b3eeccdc6c1544783b7fad

# Simulate downloading the first version:
▸ rm -f test.tar.gz
▸ casync extract --reflink=no server/v1.tar.gz.caibx test.tar.gz
# All good:
▸ sha1sum test.tar.gz v1.tar.gz v2.tar.gz
739930b7bc47e323c3732649229b53620e83cc64  test.tar.gz
739930b7bc47e323c3732649229b53620e83cc64  v1.tar.gz
88d94d0df23838b4d2bcf3386a77b7addba51db7  v2.tar.gz

# Simulate updating to the second version:
▸ casync extract --reflink=no server/v2.tar.gz.caibx test.tar.gz
# All good:
▸ sha1sum test.tar.gz v1.tar.gz v2.tar.gz
88d94d0df23838b4d2bcf3386a77b7addba51db7  test.tar.gz
739930b7bc47e323c3732649229b53620e83cc64  v1.tar.gz
88d94d0df23838b4d2bcf3386a77b7addba51db7  v2.tar.gz

# Simulate downgrading back to the first version:
▸ casync extract --reflink=no server/v1.tar.gz.caibx test.tar.gz
# Contents do not match:
▸ sha1sum test.tar.gz v1.tar.gz v2.tar.gz
5d12d3285825465931013bd3c30897b713d87ae1  test.tar.gz
739930b7bc47e323c3732649229b53620e83cc64  v1.tar.gz
88d94d0df23838b4d2bcf3386a77b7addba51db7  v2.tar.gz
# Resulting file has the same size as version 2:
▸ ds -b test.tar.gz v1.tar.gz v2.tar.gz
 44236764 v1.tar.gz
 44249752 test.tar.gz
 44249752 v2.tar.gz
132736268 total
# Except for that extraneous data, contents match:
▸ v1size="$(stat -c %s v1.tar.gz)"
▸ sha1sum <(dd if=test.tar.gz bs="$v1size" count=1 status=none) v1.tar.gz
739930b7bc47e323c3732649229b53620e83cc64  /dev/fd/63
739930b7bc47e323c3732649229b53620e83cc64  v1.tar.gz
# The extra data matches the end of the second version:
▸ sha1sum <(dd if=test.tar.gz bs="$v1size" skip=1 status=none) <(dd if=v2.tar.gz bs="$v1size" skip=1 status=none)
9131c52cef85129117bd2a0cfd07b5107a55422c  /dev/fd/63
9131c52cef85129117bd2a0cfd07b5107a55422c  /dev/fd/62

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions