Skip to content

Commit f4e0217

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 11f1f14 commit f4e0217

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
@@ -20,6 +20,13 @@ unsigned int test_count = 0;
2020
if (!(x)) {printf("%s:%d FAILED %s\n",__func__,__LINE__,#x);exit(1);} \
2121
} while (0)
2222

23+
24+
#ifdef _MSC_VER
25+
# define DEV_NULL "NUL"
26+
#else
27+
# define DEV_NULL "/dev/null"
28+
#endif
29+
2330
/* open where cab file doesn't exist */
2431
void cabd_open_test_01() {
2532
struct mscab_decompressor *cabd;
@@ -342,7 +349,7 @@ void cabd_extract_test_01() {
342349
TEST(cab = cabd->open(cabd, files[i]));
343350
TEST(cab->files != NULL);
344351
for (file = cab->files; file; file = file->next) {
345-
int err = cabd->extract(cabd, file, "/dev/null");
352+
int err = cabd->extract(cabd, file, DEV_NULL);
346353
TEST(err == MSPACK_ERR_DATAFORMAT || err == MSPACK_ERR_DECRUNCH);
347354
}
348355
cabd->close(cabd, cab);
@@ -363,11 +370,11 @@ void cabd_extract_test_02() {
363370
*/
364371
TEST(cabd = mspack_create_cab_decompressor(NULL));
365372
TEST(cab = cabd->open(cabd, TESTFILE("cve-2014-9732-folders-segfault.cab")));
366-
err = cabd->extract(cabd, cab->files, "/dev/null");
373+
err = cabd->extract(cabd, cab->files, DEV_NULL);
367374
TEST(err == MSPACK_ERR_OK);
368-
err = cabd->extract(cabd, cab->files->next, "/dev/null");
375+
err = cabd->extract(cabd, cab->files->next, DEV_NULL);
369376
TEST(err == MSPACK_ERR_DATAFORMAT || err == MSPACK_ERR_DECRUNCH);
370-
err = cabd->extract(cabd, cab->files, "/dev/null");
377+
err = cabd->extract(cabd, cab->files, DEV_NULL);
371378
TEST(err == MSPACK_ERR_OK);
372379
cabd->close(cabd, cab);
373380
mspack_destroy_cab_decompressor(cabd);

0 commit comments

Comments
 (0)