ZipWriter erzeugt fehlerhafte Datei

  • Affected App
    WoltLab Suite Forum

    Hey leute.

    Hat jemand schonmal die ZipWriter klasse getestet?
    Bei mir erzeugt sie ein fehlerhaftes Archiv.
    Ich bin mir nicht sicher ob man bei der Benutzung mit nur 1 Datei etwas falsch amchen kann^^

    Kann es sein das ein Fehler in der Byte struktur vorliegt?
    Hier nen Error von Unzip:
    Archive: /home/pc/Downloads/test.zip
    file #2: bad zipfile offset (lseek): 536870912

    Das Zip Archiv besteht aus einem Order "test/" und einer Datei "test/script.sh".
    Ich habe die Bytestruktur verglichen und soweit scheint es korrekt zu sein soch mir scheint das i-wo eventuell ein Word verdreht ist und beim Unzippen gedacht wird das mehrere Teile existieren.
    Die einzelnen Offsets bzw Längen der Strings stimmen.
    Sprich der Name des Ordners und der Datei + die Datei selbst sind korrekt angegeben.

    Die Nutzung der Klasse sieht versimpelt so aus:

    Code
    $zip = new ZipWriter();
    $zip->addDir('test/');
    $zip->addFile($content, $path.$fileName, $timestamp);
    $zip->getFile();

    Mach ich was Falsch oder ist da n Bug drin?

    Thx im Vorraus für die Hilfe.

    Gruß Sick

  • Kann ich für Verzeichnisse innerhalb des Zips bestätigen. Dateien funktionieren.

    Code
    [kernel@~/html/private/dummy/lib/page]unzip test.zip 
    Archive:  test.zip
     extracting: test                    
    checkdir error:  test exists but is not directory
                     unable to process test/derp.

    Scheinbar werden Verzeichnisse als Dateien im Zip angelegt.

  • Also der Fehler liegt definitiv am ende der Datei nur wo weiß nich noch nicht.

    Original ZipWriter Datei Ende:

    Code
    50 4B 01 02 00 00 0A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 00 00 00 00 00 00 00 00 00 10 00 00 00 00 00 00 00 74 65 73 74 2F 50 4B 01 02 00 00 14 00 00 00 08 00 00 00 21 FF FF FF FF FF FF FF EC 33 CC F1 E8 32 05 00 00 03 0D 00 00 0E 00 00 00 00 00 00 00 00 00 20 00 00 00 2F 00 00 00 74 65 73 74 2F 41 57 53 2D 53 33 2E 73 68 50 4B 05 06 00 00 00 00 02 00 02 00 76 00 00 00 8D 05 00 00 00 00

    Funktionierendes Datei Ende:

    Code
    50 4B 01 02 3F 03 14 03 00 00 00 00 BB 4E BF 42 00 00 00 00 00 00 00 00 00 00 00 00 05 00 00 00 00 00 00 00 00 00 10 80 FD 41 00 00 00 00 74 65 73 74 2F 50 4B 01 02 3F 03 14 03 00 00 08 00 43 6F A2 42 33 CC F1 E8 1C 05 00 00 03 0D 00 00 0E 00 00 00 00 00 00 00 00 00 20 80 A4 81 23 00 00 00 74 65 73 74 2F 41 57 53 2D 53 33 2E 73 68 50 4B 05 06 00 00 00 00 02 00 02 00 6F 00 00 00 6B 05 00 00 00 00


    Edit:
    Das Problem ist das DosDate...
    Das sollen nur 4 byte sein sind aber glaube ich 11

    Edit2:
    Das problem ist wenn date in getDosDatetime null ist.
    Dann wird anstatt 4 bytes 00 00 21 FF FF FF FF FF FF FF EC geadded
    Also entweder if empty $date gleicht 00 00 00 00 returnen oder $date = intval($date);

    Kann das einer machen oder soll ich nen pull request starten?

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!