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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions