Skip to content

Commit 3e0c377

Browse files
committed
Fix cabd tests on Windows
On Windows, the tests should write to "NUL" instead of "/dev/null". Resolved an issue where a large unsigned int cast to an off_t resulted in a negative value, because off_t is 32-bits instead of 64.
1 parent 752c94c commit 3e0c377

File tree

3 files changed

+14
-7
lines changed

3 files changed

+14
-7
lines changed

libmspack/mspack/cabd.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1012,7 +1012,7 @@ static int cabd_extract(struct mscab_decompressor *base,
10121012
struct mscabd_folder_p *fol;
10131013
struct mspack_system *sys;
10141014
struct mspack_file *fh;
1015-
off_t filelen;
1015+
unsigned int filelen;
10161016

10171017
if (!self) return MSPACK_ERR_ARGS;
10181018
if (!file) return self->error = MSPACK_ERR_ARGS;
@@ -1049,7 +1049,7 @@ static int cabd_extract(struct mscab_decompressor *base,
10491049
* In salvage mode, don't assume block sizes, just try decoding
10501050
*/
10511051
if (!self->salvage) {
1052-
off_t maxlen = fol->base.num_blocks * CAB_BLOCKMAX;
1052+
unsigned int maxlen = fol->base.num_blocks * CAB_BLOCKMAX;
10531053
if ((file->offset + filelen) > maxlen) {
10541054
sys->message(NULL, "ERROR; file \"%s\" cannot be extracted, "
10551055
"cabinet set is incomplete", file->filename);

libmspack/test/cabd_md5.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
#include <string.h>
88
#include "mspack.h"
99
#include <sys/stat.h>
10-
#ifdef _WIN32
10+
#ifdef _MSC_VER
1111
#include "dirent.h"
1212
#else
1313
#include <dirent.h>

libmspack/test/cabd_test.c

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,13 @@ unsigned int test_count = 0;
2121
if (!(x)) {printf("%s:%d FAILED %s\n",__func__,__LINE__,#x);exit(1);} \
2222
} while (0)
2323

24+
25+
#ifdef _MSC_VER
26+
# define DEV_NULL "NUL"
27+
#else
28+
# define DEV_NULL "/dev/null"
29+
#endif
30+
2431
/* open where cab file doesn't exist */
2532
void cabd_open_test_01() {
2633
struct mscab_decompressor *cabd;
@@ -343,7 +350,7 @@ void cabd_extract_test_01() {
343350
TEST(cab = cabd->open(cabd, files[i]));
344351
TEST(cab->files != NULL);
345352
for (file = cab->files; file; file = file->next) {
346-
int err = cabd->extract(cabd, file, "/dev/null");
353+
int err = cabd->extract(cabd, file, DEV_NULL);
347354
TEST(err == MSPACK_ERR_DATAFORMAT || err == MSPACK_ERR_DECRUNCH);
348355
}
349356
cabd->close(cabd, cab);
@@ -364,11 +371,11 @@ void cabd_extract_test_02() {
364371
*/
365372
TEST(cabd = mspack_create_cab_decompressor(NULL));
366373
TEST(cab = cabd->open(cabd, TESTFILE("cve-2014-9732-folders-segfault.cab")));
367-
err = cabd->extract(cabd, cab->files, "/dev/null");
374+
err = cabd->extract(cabd, cab->files, DEV_NULL);
368375
TEST(err == MSPACK_ERR_OK);
369-
err = cabd->extract(cabd, cab->files->next, "/dev/null");
376+
err = cabd->extract(cabd, cab->files->next, DEV_NULL);
370377
TEST(err == MSPACK_ERR_DATAFORMAT || err == MSPACK_ERR_DECRUNCH);
371-
err = cabd->extract(cabd, cab->files, "/dev/null");
378+
err = cabd->extract(cabd, cab->files, DEV_NULL);
372379
TEST(err == MSPACK_ERR_OK);
373380
cabd->close(cabd, cab);
374381
mspack_destroy_cab_decompressor(cabd);

0 commit comments

Comments
 (0)