...
|
...
|
@@ -1230,9 +1230,17 @@ handler_otf(ole2_header_t * hdr, property_t * prop, const char *dir, cli_ctx * c
|
1230
|
1230
|
current_block = prop->start_block;
|
1231
|
1231
|
len = prop->size;
|
1232
|
1232
|
|
|
1233
|
+ if (cli_debug_flag) {
|
|
1234
|
+ if (!name)
|
|
1235
|
+ name = get_property_name2(prop->name, prop->name_size);
|
|
1236
|
+ cli_dbgmsg("OLE2 [handler_otf]: Dumping '%s' to '%s'\n", name, tempfile);
|
|
1237
|
+ }
|
|
1238
|
+
|
1233
|
1239
|
buff = (unsigned char *)cli_malloc(1 << hdr->log2_big_block_size);
|
1234
|
1240
|
if (!buff) {
|
1235
|
1241
|
close(ofd);
|
|
1242
|
+ if (name)
|
|
1243
|
+ free(name);
|
1236
|
1244
|
cli_unlink(tempfile);
|
1237
|
1245
|
free(tempfile);
|
1238
|
1246
|
return CL_EMEM;
|
...
|
...
|
@@ -1243,6 +1251,8 @@ handler_otf(ole2_header_t * hdr, property_t * prop, const char *dir, cli_ctx * c
|
1243
|
1243
|
cli_errmsg("OLE2: OTF handler init bitset failed\n");
|
1244
|
1244
|
free(buff);
|
1245
|
1245
|
close(ofd);
|
|
1246
|
+ if (name)
|
|
1247
|
+ free(name);
|
1246
|
1248
|
if (cli_unlink(tempfile)) {
|
1247
|
1249
|
free(tempfile);
|
1248
|
1250
|
return CL_EUNLINK;
|
...
|
...
|
@@ -1274,6 +1284,8 @@ handler_otf(ole2_header_t * hdr, property_t * prop, const char *dir, cli_ctx * c
|
1274
|
1274
|
offset = (1 << hdr->log2_small_block_size) * (current_block % (1 << (hdr->log2_big_block_size - hdr->log2_small_block_size)));
|
1275
|
1275
|
if (cli_writen(ofd, &buff[offset], MIN(len, 1 << hdr->log2_small_block_size)) != MIN(len, 1 << hdr->log2_small_block_size)) {
|
1276
|
1276
|
close(ofd);
|
|
1277
|
+ if (name)
|
|
1278
|
+ free(name);
|
1277
|
1279
|
free(buff);
|
1278
|
1280
|
cli_bitset_free(blk_bitset);
|
1279
|
1281
|
if (cli_unlink(tempfile)) {
|
...
|
...
|
@@ -1293,6 +1305,8 @@ handler_otf(ole2_header_t * hdr, property_t * prop, const char *dir, cli_ctx * c
|
1293
|
1293
|
if (cli_writen(ofd, buff, MIN(len, (1 << hdr->log2_big_block_size))) !=
|
1294
|
1294
|
MIN(len, (1 << hdr->log2_big_block_size))) {
|
1295
|
1295
|
close(ofd);
|
|
1296
|
+ if (name)
|
|
1297
|
+ free(name);
|
1296
|
1298
|
free(buff);
|
1297
|
1299
|
cli_bitset_free(blk_bitset);
|
1298
|
1300
|
if (cli_unlink(tempfile)) {
|
...
|
...
|
@@ -1312,6 +1326,8 @@ handler_otf(ole2_header_t * hdr, property_t * prop, const char *dir, cli_ctx * c
|
1312
|
1312
|
is_mso = likely_mso_stream(ofd);
|
1313
|
1313
|
if (lseek(ofd, 0, SEEK_SET) == -1) {
|
1314
|
1314
|
close(ofd);
|
|
1315
|
+ if (name)
|
|
1316
|
+ free(name);
|
1315
|
1317
|
if (ctx && !(ctx->engine->keeptmp))
|
1316
|
1318
|
cli_unlink(tempfile);
|
1317
|
1319
|
|
...
|
...
|
@@ -1324,7 +1340,8 @@ handler_otf(ole2_header_t * hdr, property_t * prop, const char *dir, cli_ctx * c
|
1324
|
1324
|
#if HAVE_JSON
|
1325
|
1325
|
/* JSON Output Summary Information */
|
1326
|
1326
|
if (ctx->options & CL_SCAN_FILE_PROPERTIES && ctx->properties != NULL) {
|
1327
|
|
- name = get_property_name2(prop->name, prop->name_size);
|
|
1327
|
+ if (!name)
|
|
1328
|
+ name = get_property_name2(prop->name, prop->name_size);
|
1328
|
1329
|
if (name) {
|
1329
|
1330
|
if (!strncmp(name, "_5_summaryinformation", 21)) {
|
1330
|
1331
|
cli_dbgmsg("OLE2: detected a '_5_summaryinformation' stream\n");
|