Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: dotnet/android-libzipsharp
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 2.0.2
Choose a base ref
...
head repository: dotnet/android-libzipsharp
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 2.0.3
Choose a head ref
  • 1 commit
  • 2 files changed
  • 1 contributor

Commits on Jan 25, 2022

  1. Don't rewind the temporary stream on write to the main one (#104)

    Context: dbe3236
    
    dbe3236 fixed an issue of data corruption when deleting files from the
    archive by properly creating temporary streams when `libzip` requested
    data modifications.  However, a bug crept in which causes the temporary
    stream to be rewound, instead of the destination one, when data is
    written back.  This has the effect of overwriting the ZIP local file
    header structure with, essentially, random data and causes errors
    similar to:
    
        error XABBA7000: Xamarin.Tools.Zip.ZipException: Zip archive inconsistent: entry 0: invalid WinZip AES extra field
        Xamarin.Android.Common.targets(2289,2): error ANDZA0000: zip W 01-25 15:03:13  9516 56652 WARNING: header mismatch
    
    The issue can be seen by either attempting to unpack the archive:
    
        $ 7z x base.zip
        ERROR: Headers Error : dex/classes.dex
        ERROR: Headers Error : root/assemblies/assemblies.blob
    
        $ unzip base.zip
        file #9:  bad zipfile offset (local header sig):  49783
        file #10:  bad zipfile offset (local header sig):  127988
    
    Or by looking at the file with `zipinfo -vv base.zip`:
    
        Central directory entry #10:
        ---------------------------
    
          There are an extra 9 bytes preceding this file.
    
          root/assemblies/assemblies.blob
    
          offset of local header from start of archive:   127988 (000000000001F3F4h) bytes
    
    Not only the local header is thought to be at the incorrect offset, it
    also doesn't have the correct signature:
    
        # show valid header
        $ hexdump -n 4 -C base.zip
        00000000  50 4b 03 04                                       |PK..|
    
        # show invalid header
        $ hexdump -s 127988 -n 4 -C base.zip
        0001f3f4  49 be 37 16                                       |I.7.|
    
        $ hexdump -s $((127988 - 9)) -n 4 -C base.zip
        0001f3eb  88 26 de 2c                                       |.&.,|
    
    Attempt to fix the problem by rewinding the destination stream on write.
    
    Fix found by Dean Ellis (@dellis1972)
    grendello authored Jan 25, 2022
    Configuration menu
    Copy the full SHA
    9bccd74 View commit details
    Browse the repository at this point in the history
Loading