...
|
...
|
@@ -346,20 +346,20 @@ static int cabd_read_headers(struct mspack_system *sys,
|
346
|
346
|
/* get the number of folders */
|
347
|
347
|
num_folders = EndGetI16(&buf[cfhead_NumFolders]);
|
348
|
348
|
if (num_folders == 0) {
|
349
|
|
- if (!quiet) sys->message(fh, "no folders in cabinet.");
|
|
349
|
+ sys->message(fh, "no folders in cabinet.");
|
350
|
350
|
return MSPACK_ERR_DATAFORMAT;
|
351
|
351
|
}
|
352
|
352
|
|
353
|
353
|
/* get the number of files */
|
354
|
354
|
num_files = EndGetI16(&buf[cfhead_NumFiles]);
|
355
|
355
|
if (num_files == 0) {
|
356
|
|
- if (!quiet) sys->message(fh, "no files in cabinet.");
|
|
356
|
+ sys->message(fh, "no files in cabinet.");
|
357
|
357
|
return MSPACK_ERR_DATAFORMAT;
|
358
|
358
|
}
|
359
|
359
|
|
360
|
360
|
/* check cabinet version */
|
361
|
361
|
if ((buf[cfhead_MajorVersion] != 1) && (buf[cfhead_MinorVersion] != 3)) {
|
362
|
|
- if (!quiet) sys->message(fh, "WARNING; cabinet version is not 1.3");
|
|
362
|
+ sys->message(fh, "WARNING; unexpected cabinet version %d.%d (expected 1.3)", buf[cfhead_MajorVersion], buf[cfhead_MinorVersion]);
|
363
|
363
|
}
|
364
|
364
|
|
365
|
365
|
/* read the reserved-sizes part of header, if present */
|
...
|
...
|
@@ -458,7 +458,7 @@ static int cabd_read_headers(struct mspack_system *sys,
|
458
|
458
|
|
459
|
459
|
if (!ifol) {
|
460
|
460
|
sys->free(file);
|
461
|
|
- D(("invalid folder index"))
|
|
461
|
+ sys->message(NULL, "invalid folder index: %d", x);
|
462
|
462
|
return MSPACK_ERR_DATAFORMAT;
|
463
|
463
|
}
|
464
|
464
|
}
|
...
|
...
|
@@ -551,6 +551,7 @@ static char *cabd_read_string(struct mspack_system *sys,
|
551
|
551
|
for (i = 1, ok = 0; i < len; i++) if (!buf[i]) { ok = 1; break; }
|
552
|
552
|
if (!ok) {
|
553
|
553
|
*error = MSPACK_ERR_DATAFORMAT;
|
|
554
|
+ sys->message(NULL, "Unable to find null terminator for string read in buffer of len %d", len);
|
554
|
555
|
return NULL;
|
555
|
556
|
}
|
556
|
557
|
|
...
|
...
|
@@ -873,6 +874,7 @@ static int cabd_merge(struct mscab_decompressor *base,
|
873
|
873
|
else {
|
874
|
874
|
/* folder merge required - do the files match? */
|
875
|
875
|
if (! cabd_can_merge_folders(sys, lfol, rfol)) {
|
|
876
|
+ sys->message(NULL, "Failed to merge folders");
|
876
|
877
|
return self->error = MSPACK_ERR_DATAFORMAT;
|
877
|
878
|
}
|
878
|
879
|
|
...
|
...
|
@@ -1142,27 +1144,32 @@ static int cabd_init_decomp(struct mscab_decompressor_p *self, unsigned int ct)
|
1142
|
1142
|
|
1143
|
1143
|
switch (ct & cffoldCOMPTYPE_MASK) {
|
1144
|
1144
|
case cffoldCOMPTYPE_NONE:
|
|
1145
|
+ self->d->sys.message(NULL, "Detected CAB Compression Type: None (%x)", ct & cffoldCOMPTYPE_MASK);
|
1145
|
1146
|
self->d->decompress = (int (*)(void *, off_t)) &noned_decompress;
|
1146
|
1147
|
self->d->state = noned_init(&self->d->sys, fh, fh,
|
1147
|
1148
|
self->param[MSCABD_PARAM_DECOMPBUF]);
|
1148
|
1149
|
break;
|
1149
|
1150
|
case cffoldCOMPTYPE_MSZIP:
|
|
1151
|
+ self->d->sys.message(NULL, "Detected CAB Compression Type: MSZIP (%x)", ct & cffoldCOMPTYPE_MASK);
|
1150
|
1152
|
self->d->decompress = (int (*)(void *, off_t)) &mszipd_decompress;
|
1151
|
1153
|
self->d->state = mszipd_init(&self->d->sys, fh, fh,
|
1152
|
1154
|
self->param[MSCABD_PARAM_DECOMPBUF],
|
1153
|
1155
|
self->param[MSCABD_PARAM_FIXMSZIP]);
|
1154
|
1156
|
break;
|
1155
|
1157
|
case cffoldCOMPTYPE_QUANTUM:
|
|
1158
|
+ self->d->sys.message(NULL, "Detected CAB Compression Type: QUANTUM (%x)", ct & cffoldCOMPTYPE_MASK);
|
1156
|
1159
|
self->d->decompress = (int (*)(void *, off_t)) &qtmd_decompress;
|
1157
|
1160
|
self->d->state = qtmd_init(&self->d->sys, fh, fh, (int) (ct >> 8) & 0x1f,
|
1158
|
1161
|
self->param[MSCABD_PARAM_DECOMPBUF]);
|
1159
|
1162
|
break;
|
1160
|
1163
|
case cffoldCOMPTYPE_LZX:
|
|
1164
|
+ self->d->sys.message(NULL, "Detected CAB Compression Type: LZX (%x)", ct & cffoldCOMPTYPE_MASK);
|
1161
|
1165
|
self->d->decompress = (int (*)(void *, off_t)) &lzxd_decompress;
|
1162
|
1166
|
self->d->state = lzxd_init(&self->d->sys, fh, fh, (int) (ct >> 8) & 0x1f, 0,
|
1163
|
1167
|
self->param[MSCABD_PARAM_DECOMPBUF], (off_t)0,0);
|
1164
|
1168
|
break;
|
1165
|
1169
|
default:
|
|
1170
|
+ self->d->sys.message(NULL, "Unsupported compression type for CAB: %x", ct & cffoldCOMPTYPE_MASK);
|
1166
|
1171
|
return self->error = MSPACK_ERR_DATAFORMAT;
|
1167
|
1172
|
}
|
1168
|
1173
|
return self->error = (self->d->state) ? MSPACK_ERR_OK : MSPACK_ERR_NOMEMORY;
|
...
|
...
|
@@ -1220,6 +1227,7 @@ static int cabd_sys_read(struct mspack_file *file, void *buffer, int bytes) {
|
1220
|
1220
|
|
1221
|
1221
|
/* check if we're out of input blocks, advance block counter */
|
1222
|
1222
|
if (self->d->block++ >= self->d->folder->base.num_blocks) {
|
|
1223
|
+ sys->message(NULL, "Ran out of CAB input blocks prematurely");
|
1223
|
1224
|
self->read_error = MSPACK_ERR_DATAFORMAT;
|
1224
|
1225
|
break;
|
1225
|
1226
|
}
|
...
|
...
|
@@ -1242,15 +1250,11 @@ static int cabd_sys_read(struct mspack_file *file, void *buffer, int bytes) {
|
1242
|
1242
|
/* special LZX hack -- on the last block, inform LZX of the
|
1243
|
1243
|
* size of the output data stream. */
|
1244
|
1244
|
lzxd_set_output_length((struct lzxd_stream *) self->d->state, (off_t)
|
1245
|
|
- ((self->d->block-1) * CAB_BLOCKMAX + outlen));
|
|
1245
|
+ ((self->d->block-1) * CAB_BLOCKSTD + outlen));
|
1246
|
1246
|
}
|
1247
|
1247
|
}
|
1248
|
1248
|
else {
|
1249
|
|
- /* not the last block */
|
1250
|
|
- if (outlen < CAB_BLOCKMAX) {
|
1251
|
|
- self->system->message(self->d->infh,
|
1252
|
|
- "WARNING; non-maximal data block");
|
1253
|
|
- }
|
|
1249
|
+ /* not the last block */
|
1254
|
1250
|
}
|
1255
|
1251
|
} /* if (avail) */
|
1256
|
1252
|
} /* while (todo > 0) */
|
...
|
...
|
@@ -1351,7 +1355,7 @@ static int cabd_sys_read_block(struct mspack_system *sys,
|
1351
|
1351
|
|
1352
|
1352
|
/* advance to next member in the cabinet set */
|
1353
|
1353
|
if (!(d->data = d->data->next)) {
|
1354
|
|
- D(("ran out of splits in cabinet set"))
|
|
1354
|
+ sys->message(NULL, "ran out of splits in cabinet set");
|
1355
|
1355
|
return MSPACK_ERR_DATAFORMAT;
|
1356
|
1356
|
}
|
1357
|
1357
|
|