Das Entpacken bestimmter Archive funktioniert unter Windows, jedoch nicht unter Linux

7

Ich habe ein paar Leute gefragt und nur darüber nachgedacht, es hier zu fragen. Wir erhalten Dateien von einem internationalen Unternehmen für Designarbeiten im Zip-Format. Wenn ich ein Skript zum Entpacken der Dateien im Terminal ausführe, wird nur unter Linux ein Zip-Fehler angezeigt . Wir können die Dateien den ganzen Tag mit 7zip und winzip testen, entpacken, durchsuchen und ändern. Wenn 7zip oder Winzip ausgeführt wird, geben sie auch keine Sicherheit an.

Terminalfehler:

compressed WinNT security missing (-7 bytes)

Ich habe überall gesucht und keine Lösung oder Korrektur dafür gefunden. Ein Kollege schlug vor:

"Die Verwendung einer anderen Sprachversion von Unzip kann möglicherweise den zum Extrahieren der Datei erforderlichen Unicode ändern. Stellen Sie sich das wie ein Passwort vor, ohne den richtigen Code können Sie nicht hineinkommen."

Warum wird im Ubuntu-Terminal beim Entpacken ein Fehler angezeigt?

DᴀʀᴛʜVᴀᴅᴇʀ
quelle
5
Unicode ist Unicode. Es "ändert" sich nicht nur aufgrund des Gebietsschemas. Ihr Kollege liegt falsch.
Chris Down
2
Was Ihr Kollege sagt, enthält ein Körnchen Wahrheit (zip gibt keinen Zeichensatz für Dateinamen an, sodass Nicht-ASCII-Dateinamen beim Extrahieren auf einem anderen System verstümmelt werden können), aber selbst dieses Körnchen ist für Ihr Problem nicht relevant .
Ignacio Vazquez-Abrams
2
7zist der Name des einmal installierten Befehls. Siehe man 7z.
Jordanm
2
Können Sie eine dieser Dateien irgendwo hochladen?
sendmoreinfo
2
Möglicherweise können Sie weitere Einzelheiten ermitteln, wenn Sie uns mitteilen können, von welchem ​​Programm (einschließlich der Version) die Datei erstellt wurde und welche Version von unzipIhnen verwendet wird (try :) unzip -v.
depquid

Antworten:

2

Ich habe ein bisschen im Quellcode gegraben (unzip60 von Ubuntu raring, obwohl ich vermute, dass ältere Versionen sich nicht sehr unterscheiden). Der betreffende Fehler wird intern aufgerufen TruncNTSDund in definiert extract.c:295. Die meisten Verwendungen dieser Nachricht befinden sich erwartungsgemäß win32/win32.cin NTFS-Sicherheitsdaten und beziehen sich tatsächlich auf diese. Es gibt jedoch nur eine Stelle im Code, an der Sie diesen Fehler jemals außerhalb eines Win32-Systems erhalten sollten (da Sie gemeldet haben, dass er auf Ubuntu angezeigt wird).

Der fragliche Ort ( extract.c:2118) befindet sich in einer aufgerufenen Funktion TestExtraField. Wie Wikipedia erklärt:

Das .ZIP-Dateiformat enthält die zusätzliche Feldfunktion in Dateikopfzeilen, mit der zusätzliche Daten gespeichert werden können, die nicht durch vorhandene .ZIP-Spezifikationen definiert sind, und konformen Archivierern, die die Felder nicht erkennen, ermöglicht werden, die Felder sicher zu überspringen.

Genau das tut NT, um Sicherheitsinformationen zu speichern. Wichtig ist, dass die Funktion die Fehlerkommentare druckt

/* we know the regular compressed file data tested out OK, or else we
 * wouldn't be here ==> print filename if any extra-field errors found
 */

Wenn Sie also die Dateien selbst gut entpacken können, kann dieser Fehler sicher ignoriert werden. Wenn Sie weiter schauen, ist der einzige Ort außerhalb von win32-Code, der diesen Fehler auslöst (vorausgesetzt, es handelt sich nicht um einen schrecklichen Fehler beim Entpacken) test_compr_eb:extract.c:2227, der auf den ersten Blick so aussieht, als ob er auftritt, wenn einer komprimierten Datei zusätzliche Felder zugeordnet sind, die als komprimiert markiert sind Die Felddaten haben jedoch eine Länge von 0 Bytes.

Wie das zustande kommt, weiß ich nicht - vielleicht macht das Programm, das die Zip-Dateien erstellt, dies versehentlich, vielleicht werden die zusätzlichen Felder irgendwo von Sicherheitssoftware herausgefiltert. In jedem Fall sieht es harmlos aus und hat wahrscheinlich überhaupt nichts mit NT-Sicherheit zu tun. Wenn Ihre Dateien gut entpackt werden, ist es absolut sicher, sie zu ignorieren .

Bristol
quelle