CRC-Fehler beim Entpacken von ZIP / Owncloud

German support forum

Moderators: Hacker, Stefan2, white

User avatar
ghisler(Author)
Site Admin
Site Admin
Posts: 50561
Joined: 2003-02-04, 09:46 UTC
Location: Switzerland
Contact:

Post by *ghisler(Author) »

2white
Das stimmt so nicht, siehe mein Quote oben:
For ZIP64(tm) format archives, the compressed and uncompressed sizes are 8 bytes each."
D.h. wenn im local header ein x64-header vorhanden ist, dann ist die data descriptor ebenfalls 64-bit.

2McNetic
Auch wenn die Spezifikation nicht 100% klar ist - was spricht dagegen, den data descriptor anzuhängen? Die Programme, welche ihn ignorieren, werden weiterhin laufen - und die Programme, die sich streng an die Vorgaben halten wie TC, werden die Dateien entpacken können.
Author of Total Commander
https://www.ghisler.com
User avatar
white
Power Member
Power Member
Posts: 5827
Joined: 2003-11-19, 08:16 UTC
Location: Netherlands

Post by *white »

ghisler(Author) wrote:2white
Das stimmt so nicht, siehe mein Quote oben:
For ZIP64(tm) format archives, the compressed and uncompressed sizes are 8 bytes each."
Ach so. Dann ist die Frage, wie werden diese 8 Bytes gespeichert? Ich denke, mit Hilfe der 0xFFFFFFFF Wert in der Data Descriptor, und "Extra-Feld" 0x0001 nachdem die Data Descriptor. Sonst wäre es nicht abwärtskompatibel sein.

ghisler(Author) wrote:D.h. wenn im local header ein x64-header vorhanden ist, dann ist die data descriptor ebenfalls 64-bit.
Nicht möglich. Siehe:
Clarification from PKWare wrote:To address your question, you would not use the Data Descriptor (presence is signaled using bit 3) at the same time as the ZIP64 Extended Information Extra Field (which uses the 0xFFFFFFFF value and "Extra Field" 0x0001). When using the Data Descriptor, the values would be written as ZERO. When alternatively, the ZIP64 extended information extra field is used, the values should be 0xFFFFFFFF.
Last edited by white on 2022-03-21, 14:36 UTC, edited 1 time in total.
Reason: fixed BBCode
User avatar
white
Power Member
Power Member
Posts: 5827
Joined: 2003-11-19, 08:16 UTC
Location: Netherlands

Post by *white »

Gem wrote:Zunächst hatte ich auf Hilfestellung durch die Community gehofft, vl. hat ja jemand das gleiche Problem und schon eine Lösung parat.

Hier aber natürlich auch eine von Owncloud generierte Datei:
test.zip
Als Workaround können Sie den Ordner in der Zip-Datei auf dem gleichen Namen umzubenennen. TC ist dann in der Lage die Datei zu entpacken.
User avatar
ghisler(Author)
Site Admin
Site Admin
Posts: 50561
Joined: 2003-02-04, 09:46 UTC
Location: Switzerland
Contact:

Post by *ghisler(Author) »

To address your question, you would not use the Data Descriptor (presence is signaled using bit 3) at the same time as the ZIP64 Extended Information Extra Field (which uses the 0xFFFFFFFF value and "Extra Field" 0x0001). When using the Data Descriptor, the values would be written as ZERO. When alternatively, the ZIP64 extended information extra field is used, the values should be 0xFFFFFFFF.
Ich sehe da keinen Widerspruch: Die Werte im normalen Header sind 0xFFFFFFFF, woraufhin man im ZIP64 extended header schaut. Dort steht dann wiederum 0 drin, worauf man im Data Descriptor schaut.
Author of Total Commander
https://www.ghisler.com
User avatar
white
Power Member
Power Member
Posts: 5827
Joined: 2003-11-19, 08:16 UTC
Location: Netherlands

Post by *white »

ghisler(Author) wrote:
To address your question, you would not use the Data Descriptor (presence is signaled using bit 3) at the same time as the ZIP64 Extended Information Extra Field (which uses the 0xFFFFFFFF value and "Extra Field" 0x0001). When using the Data Descriptor, the values would be written as ZERO. When alternatively, the ZIP64 extended information extra field is used, the values should be 0xFFFFFFFF.
Ich sehe da keinen Widerspruch: Die Werte im normalen Header sind 0xFFFFFFFF, woraufhin man im ZIP64 extended header schaut. Dort steht dann wiederum 0 drin, worauf man im Data Descriptor schaut.
Nicht :?: Er sagt, daß ist nicht möglich..

Wenn man Bit 3 setzt, dann muß crc-32, Komprimierte Größe und unkomprimierte Größe null sein.

Wenn Bit 3 gesetzt ist, werden Software-Programme wahrscheinlich nicht in den Felder Komprimierte Größe und unkomprimierte Größe im Header schauen.
User avatar
ghisler(Author)
Site Admin
Site Admin
Posts: 50561
Joined: 2003-02-04, 09:46 UTC
Location: Switzerland
Contact:

Post by *ghisler(Author) »

Hmm, wieso hat er dann bit 3 gesetzt und die Grössen alle auf FFFFFFFF gestellt?
Author of Total Commander
https://www.ghisler.com
McNetic
Junior Member
Junior Member
Posts: 6
Joined: 2014-07-31, 11:52 UTC

Post by *McNetic »

Sorry, dass es so lange gedauert hat - manchmal hat das Leben ja noch andere Anforderungen ;-). Und nochmal sorry, dass ich so überzeugend das Problem von mir gewiesen habe - tatsächlich habt ihr Recht, dass das Bit 3 gesetzt war, der Data Descriptor aber fehlte.
In der aktuellen Entwicklungsversion der Zip-Erweiterung, die owncloud nutzt, ist es nun so implementiert, dass der Data Descriptor vorhanden ist und entweder 32Bit- oder 64Bit-Werte enthält, je nach dem, ob die Zip64-Erweiterung aktiv ist. Bis das in Owncloud ankommt, kann aber noch ein wenig Zeit vergehen.
User avatar
ghisler(Author)
Site Admin
Site Admin
Posts: 50561
Joined: 2003-02-04, 09:46 UTC
Location: Switzerland
Contact:

Post by *ghisler(Author) »

Das wäre super, TC kommt mit beiden Typen data descriptor zurecht! wichtig ist für ihn nur der CRC32-Wert, und der ist in beiden Fällen 4 Bytes lang.
Author of Total Commander
https://www.ghisler.com
McNetic
Junior Member
Junior Member
Posts: 6
Joined: 2014-07-31, 11:52 UTC

Post by *McNetic »

Wobei ich nicht ganz verstehe, warum man überhaupt den Data Descriptor verwendet. Im central directory stehen ja auch alle Daten, und das muss man sowieso zuerst einlesen, um die Offsets der Dateien zu haben. Oder sehe ich das falsch?
User avatar
ghisler(Author)
Site Admin
Site Admin
Posts: 50561
Joined: 2003-02-04, 09:46 UTC
Location: Switzerland
Contact:

Post by *ghisler(Author) »

Nein, muss man nicht unbedingt - TC kann ZIP-Dateien auch ohne Central Directory entpacken. Die Idee des Data Descriptors ist das Streamen: Nicht nur beim Senden kann die Datei so linear von Anfang bis Ende geschrieben werden, auch beim Lesen kann sie linear ohne Sprünge gelesen werden.
Author of Total Commander
https://www.ghisler.com
McNetic
Junior Member
Junior Member
Posts: 6
Joined: 2014-07-31, 11:52 UTC

Post by *McNetic »

Das verstehe ich nicht so ganz. Beim Senden macht der data descriptor ja noch (in Grenzen) Sinn, da man die Größe der Datei erst nach dem kompletten Schreiben kennt und sie dann da hin schreiben kann (wobei man die auch ins Central Directory schreibt). Beim Empfangen muss ich aber doch vorher wissen, wie lang die Datei ist, sonst weiss ich doch gar nicht, wo die Datei aufhört und der data descriptor anfängt? D.h. aus meiner Sicht schliesst sich das gegenseitig aus.
Last edited by McNetic on 2014-10-23, 11:21 UTC, edited 1 time in total.
User avatar
ghisler(Author)
Site Admin
Site Admin
Posts: 50561
Joined: 2003-02-04, 09:46 UTC
Location: Switzerland
Contact:

Post by *ghisler(Author) »

Nein, muss man nicht - wenn die Datei gepackt ist, ergibt sich das Ende aus dem gepackten Code selbst (Ende-Zeichen). Wenn sie ungepackt gespeichert ist, kann (und muss!) man die Grösse im Header speichern.
Author of Total Commander
https://www.ghisler.com
Gem
Junior Member
Junior Member
Posts: 24
Joined: 2007-08-29, 11:21 UTC

Post by *Gem »

Mittlerweile sollte das Thema (zumindest was die "Probleme" mit dem TC angeht) erledigt sein:

https://github.com/owncloud/core/issues/10001#issuecomment-131005070
User avatar
ghisler(Author)
Site Admin
Site Admin
Posts: 50561
Joined: 2003-02-04, 09:46 UTC
Location: Switzerland
Contact:

Post by *ghisler(Author) »

Ah, das ist erfreulich! In TC9 wird es eine Unterstützung solcher Archive geben. Ich habe sie aber nicht auf TC 8.52 zurück portiert, weil der Fix sehr komplex ist und viele Dateien von TC betrifft: Dazu müssen beim Einlesen die CRC-Quersummen aller Dateien gespeichert und an alle Entpackfunktionen verteilt werden (die Quersumme direkt bei den daten fehlte ja in der ZIP-Datei von Owncloud). Dies betrifft u.a. Funktionen zum Entpacken einzelner und mehrerer Dateien, Dateianzeige, und Verzeichnisse synchronisieren.
Author of Total Commander
https://www.ghisler.com
Post Reply