Skip to content

Commit e952cc6

Browse files
committed
much better compression tests, fixed xz and segfault
1 parent d3887c7 commit e952cc6

File tree

6 files changed

+47
-10
lines changed

6 files changed

+47
-10
lines changed

lib/external/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ LIBAR_CMAKE_OPTIONS = -DCMAKE_COLOR_MAKEFILE=OFF -DBUILD_SHARED_LIBS=OFF -DENABL
2727
-DENABLE_LIBXML2=OFF -DENABLE_OPENSSL=OFF -DENABLE_CNG=OFF -DENABLE_ZSTD=OFF -DHAVE_LIBXML_XMLREADER_H=0 -DHAVE_LIBXML_XMLWRITER_H=0 \
2828

2929
LIBAR_DEP_INCLUDES = -DZLIB_LIBRARY=./$(LIBZ_NAME) -DZLIB_INCLUDE_DIR=$(ZLIB_DIR)include \
30-
-DLIBLZMA_LIBRARY=./$(XZ_NAME) -DLIBLZMA_INCLUDE_DIR=$(XZ_DIR)include \
30+
-DLIBLZMA_LIBRARY=./$(XZ_NAME) -DLIBLZMA_INCLUDE_DIR=$(XZ_DIR)include -DLIBLZMA_HAS_AUTO_DECODER=TRUE -DLIBLZMA_HAS_EASY_ENCODER=TRUE -DLIBLZMA_HAS_LZMA_PRESET=TRUE \
3131
-DLZ4_LIBRARY=./$(LZ4_NAME) -DLZ4_INCLUDE_DIR=./lz4/lib/ \
3232
-DBZIP2_LIBRARIES=./$(BZ2_NAME) -DBZIP2_INCLUDE_DIR=./bzip2/
3333

lib/stdlib/source/DDP/compression.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,7 @@ void Archiv_Entpacken_Dateien_Pfad(ddpstringlist *dateiPfade, ddpstring *arPfad,
232232
}
233233

234234
struct archive *a = openArchive(arPfad->str);
235+
if (!a) return;
235236

236237
int flags = ARCHIVE_EXTRACT_TIME | ARCHIVE_EXTRACT_PERM | ARCHIVE_EXTRACT_ACL | ARCHIVE_EXTRACT_FFLAGS;
237238

@@ -323,12 +324,18 @@ ddpint Archiv_Datei_Groesse(ddpstring *dateiPfad, ddpstring *arPfad) {
323324

324325
// find entry
325326
struct archive_entry *e;
326-
while (archive_read_next_header(a, &e) == ARCHIVE_OK) {
327+
int r;
328+
while ((r = archive_read_next_header(a, &e)) == ARCHIVE_OK) {
327329
if (!strcmp(dateiPfad->str, archive_entry_pathname(e))) {
328330
break;
329331
}
330332
}
331333

334+
if (r == ARCHIVE_EOF) {
335+
ddp_error("Die Datei '"DDP_STRING_FMT"' konnte nicht im Archiv '"DDP_STRING_FMT"' nicht gefunden werden.", false, dateiPfad->str, arPfad->str);
336+
return -1;
337+
}
338+
332339
la_ssize_t size = archive_entry_size(e);
333340

334341
if (archive_read_free(a) != ARCHIVE_OK) {

tests/testdata/stdlib/Komprimierung/Komprimierung.ddp

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,34 @@ Binde "Duden/Fehlerbehandlung" ein.
55

66
Schreibe ab jetzt alle Fehler.
77

8-
Verpacke die Datei "expected.txt" zu einem neuen ZIP Archiv bei "expected.zip".
9-
Erstelle den Ordner "./expected".
8+
Erstelle den Ordner "./output".
9+
Erstelle den Ordner "./zips".
1010

11-
Entpacke die Datei "expected.txt" vom Archiv "expected.zip" in den Ordner "./expected/".
11+
Verpacke die Datei "text.txt" zu einem neuen ZIP Archiv bei "zips/ar.zip".
12+
Verpacke die Datei "text.txt" zu einem neuen SevenZip Archiv bei "zips/ar.7z".
13+
Verpacke die Datei "text.txt" zu einem neuen XZ Archiv bei "zips/ar.tar.xz".
14+
Verpacke die Datei "text.txt" zu einem neuen BZIP2 Archiv bei "zips/ar.tar.bz2".
15+
Verpacke die Dateien (eine Liste, die aus "text.txt", "text2.txt" besteht) zu einem neuen GZIP Archiv bei "zips/ar.tar.gz".
16+
Verpacke die Datei "text.txt" zu einem neuen LZ4 Archiv bei "zips/ar.tar.lz4".
1217

13-
Der Text expected ist "".
14-
Lies den Text in "./expected/expected.txt" und speichere ihn in expected.
18+
Entpacke die Datei "text.txt" vom Archiv "zips/ar.zip" in den Ordner "./output/zip".
19+
Entpacke das Archiv "zips/ar.7z" in den Ordner "./output/7z".
20+
Entpacke das Archiv "zips/ar.tar.xz" in den Ordner "./output/xz".
21+
Entpacke das Archiv "zips/ar.tar.bz2" in den Ordner "./output/bz2".
22+
Entpacke das Archiv "zips/ar.tar.gz" in den Ordner "./output/gz".
23+
Entpacke das Archiv "zips/ar.tar.lz4" in den Ordner "./output/lz4".
1524

16-
Lösche den Ordner "./expected/".
25+
Der Text text ist "".
26+
Lies den Text in "./output/zip/text.txt" und speichere ihn in text. Schreibe text auf eine Zeile.
27+
Lies den Text in "./output/7z/text.txt" und speichere ihn in text. Schreibe text auf eine Zeile.
28+
Lies den Text in "./output/xz/text.txt" und speichere ihn in text. Schreibe text auf eine Zeile.
29+
Lies den Text in "./output/bz2/text.txt" und speichere ihn in text. Schreibe text auf eine Zeile.
30+
Lies den Text in "./output/gz/text.txt" und speichere ihn in text. Schreibe text auf eine Zeile.
31+
Lies den Text in "./output/gz/text2.txt" und speichere ihn in text. Schreibe text auf eine Zeile.
32+
Lies den Text in "./output/lz4/text.txt" und speichere ihn in text. Schreibe text auf eine Zeile.
1733

18-
Schreibe expected.
34+
Schreibe (die Anzahl der Dateien im Archiv "zips/ar.tar.gz") auf eine Zeile.
35+
Schreibe (die Dateigröße in Bytes von "text2.txt" im Archiv "zips/ar.tar.gz") auf eine Zeile.
36+
37+
Lösche den Ordner "./output/".
38+
Lösche den Ordner "./zips/".
Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,9 @@
1-
test test 123
1+
hallo
2+
hallo
3+
hallo
4+
hallo
5+
hallo
6+
welt
7+
hallo
8+
2
9+
4
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
hallo
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
welt

0 commit comments

Comments
 (0)