Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Side by Side Diff: src/xz/list.c

Issue 12568011: Update XZ Utils to 5.0.4 (third_party) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/third_party/xz/
Patch Set: Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /////////////////////////////////////////////////////////////////////////////// 1 ///////////////////////////////////////////////////////////////////////////////
2 // 2 //
3 /// \file list.c 3 /// \file list.c
4 /// \brief Listing information about .xz files 4 /// \brief Listing information about .xz files
5 // 5 //
6 // Author: Lasse Collin 6 // Author: Lasse Collin
7 // 7 //
8 // This file has been put into the public domain. 8 // This file has been put into the public domain.
9 // You can do whatever you want with this file. 9 // You can do whatever you want with this file.
10 // 10 //
(...skipping 364 matching lines...) Expand 10 before | Expand all | Expand 10 after
375 - lzma_check_size(iter->stream.flags->check), 375 - lzma_check_size(iter->stream.flags->check),
376 LZMA_BLOCK_HEADER_SIZE_MAX); 376 LZMA_BLOCK_HEADER_SIZE_MAX);
377 io_buf buf; 377 io_buf buf;
378 if (io_pread(pair, &buf, size, iter->block.compressed_file_offset)) 378 if (io_pread(pair, &buf, size, iter->block.compressed_file_offset))
379 return true; 379 return true;
380 380
381 // Zero would mean Index Indicator and thus not a valid Block. 381 // Zero would mean Index Indicator and thus not a valid Block.
382 if (buf.u8[0] == 0) 382 if (buf.u8[0] == 0)
383 goto data_error; 383 goto data_error;
384 384
385 // Initialize the block structure and decode Block Header Size.
386 lzma_filter filters[LZMA_FILTERS_MAX + 1];
385 lzma_block block; 387 lzma_block block;
386 lzma_filter filters[LZMA_FILTERS_MAX + 1];
387
388 // Initialize the pointers so that they can be passed to free().
389 for (size_t i = 0; i < ARRAY_SIZE(filters); ++i)
390 filters[i].options = NULL;
391
392 // Initialize the block structure and decode Block Header Size.
393 block.version = 0; 388 block.version = 0;
394 block.check = iter->stream.flags->check; 389 block.check = iter->stream.flags->check;
395 block.filters = filters; 390 block.filters = filters;
396 391
397 block.header_size = lzma_block_header_size_decode(buf.u8[0]); 392 block.header_size = lzma_block_header_size_decode(buf.u8[0]);
398 if (block.header_size > size) 393 if (block.header_size > size)
399 goto data_error; 394 goto data_error;
400 395
401 // Decode the Block Header. 396 // Decode the Block Header.
402 switch (lzma_block_header_decode(&block, NULL, buf.u8)) { 397 switch (lzma_block_header_decode(&block, NULL, buf.u8)) {
(...skipping 27 matching lines...) Expand all
430 xfi->all_have_sizes &= block.compressed_size != LZMA_VLI_UNKNOWN 425 xfi->all_have_sizes &= block.compressed_size != LZMA_VLI_UNKNOWN
431 && block.uncompressed_size != LZMA_VLI_UNKNOWN; 426 && block.uncompressed_size != LZMA_VLI_UNKNOWN;
432 427
433 // Validate or set block.compressed_size. 428 // Validate or set block.compressed_size.
434 switch (lzma_block_compressed_size(&block, 429 switch (lzma_block_compressed_size(&block,
435 iter->block.unpadded_size)) { 430 iter->block.unpadded_size)) {
436 case LZMA_OK: 431 case LZMA_OK:
437 break; 432 break;
438 433
439 case LZMA_DATA_ERROR: 434 case LZMA_DATA_ERROR:
435 // Free the memory allocated by lzma_block_header_decode().
436 for (size_t i = 0; filters[i].id != LZMA_VLI_UNKNOWN; ++i)
437 free(filters[i].options);
438
440 goto data_error; 439 goto data_error;
441 440
442 default: 441 default:
443 message_bug(); 442 message_bug();
444 } 443 }
445 444
446 // Copy the known sizes. 445 // Copy the known sizes.
447 bhi->header_size = block.header_size; 446 bhi->header_size = block.header_size;
448 bhi->compressed_size = block.compressed_size; 447 bhi->compressed_size = block.compressed_size;
449 448
450 // Calculate the decoder memory usage and update the maximum 449 // Calculate the decoder memory usage and update the maximum
451 // memory usage of this Block. 450 // memory usage of this Block.
452 bhi->memusage = lzma_raw_decoder_memusage(filters); 451 bhi->memusage = lzma_raw_decoder_memusage(filters);
453 if (xfi->memusage_max < bhi->memusage) 452 if (xfi->memusage_max < bhi->memusage)
454 xfi->memusage_max = bhi->memusage; 453 xfi->memusage_max = bhi->memusage;
455 454
456 // Convert the filter chain to human readable form. 455 // Convert the filter chain to human readable form.
457 message_filters_to_str(bhi->filter_chain, filters, false); 456 message_filters_to_str(bhi->filter_chain, filters, false);
458 457
459 // Free the memory allocated by lzma_block_header_decode(). 458 // Free the memory allocated by lzma_block_header_decode().
460 for (size_t i = 0; filters[i].id != LZMA_VLI_UNKNOWN; ++i) 459 for (size_t i = 0; filters[i].id != LZMA_VLI_UNKNOWN; ++i)
461 free(filters[i].options); 460 free(filters[i].options);
462 461
463 return false; 462 return false;
464 463
465 data_error: 464 data_error:
466 // Show the error message. 465 // Show the error message.
467 message_error("%s: %s", pair->src_name, 466 message_error("%s: %s", pair->src_name,
468 message_strm(LZMA_DATA_ERROR)); 467 message_strm(LZMA_DATA_ERROR));
469
470 // Free the memory allocated by lzma_block_header_decode().
471 // This is truly needed only if we get here after a succcessful
472 // call to lzma_block_header_decode() but it doesn't hurt to
473 // always do it.
474 for (size_t i = 0; filters[i].id != LZMA_VLI_UNKNOWN; ++i)
475 free(filters[i].options);
476
477 return true; 468 return true;
478 } 469 }
479 470
480 471
481 /// \brief Parse the Check field and put it into check_value[] 472 /// \brief Parse the Check field and put it into check_value[]
482 /// 473 ///
483 /// \return False on success, true on error. 474 /// \return False on success, true on error.
484 static bool 475 static bool
485 parse_check_value(file_pair *pair, const lzma_index_iter *iter) 476 parse_check_value(file_pair *pair, const lzma_index_iter *iter)
486 { 477 {
(...skipping 622 matching lines...) Expand 10 before | Expand all | Expand 10 after
1109 // broken files. 1100 // broken files.
1110 if (!fail) 1101 if (!fail)
1111 update_totals(&xfi); 1102 update_totals(&xfi);
1112 1103
1113 lzma_index_end(xfi.idx, NULL); 1104 lzma_index_end(xfi.idx, NULL);
1114 } 1105 }
1115 1106
1116 io_close(pair, false); 1107 io_close(pair, false);
1117 return; 1108 return;
1118 } 1109 }
OLDNEW
« README.chromium ('K') | « src/xz/coder.c ('k') | src/xz/message.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698