MCPcopy Create free account
hub / github.com/abbeycode/UnrarKit / ReadSubData

Method ReadSubData

Libraries/unrar/arcread.cpp:1419–1485  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1417
1418
1419bool Archive::ReadSubData(Array<byte> *UnpData,File *DestFile,bool TestMode)
1420{
1421 if (BrokenHeader)
1422 {
1423 uiMsg(UIERROR_SUBHEADERBROKEN,FileName);
1424 ErrHandler.SetErrorCode(RARX_CRC);
1425 return false;
1426 }
1427 if (SubHead.Method>5 || SubHead.UnpVer>(Format==RARFMT50 ? VER_UNPACK5:VER_UNPACK))
1428 {
1429 uiMsg(UIERROR_SUBHEADERUNKNOWN,FileName);
1430 return false;
1431 }
1432
1433 if (SubHead.PackSize==0 && !SubHead.SplitAfter)
1434 return true;
1435
1436 SubDataIO.Init();
1437 Unpack Unpack(&SubDataIO);
1438 Unpack.Init(SubHead.WinSize,false);
1439
1440 if (DestFile==NULL)
1441 {
1442 if (SubHead.UnpSize>0x1000000)
1443 {
1444 // So huge allocation must never happen in valid archives.
1445 uiMsg(UIERROR_SUBHEADERUNKNOWN,FileName);
1446 return false;
1447 }
1448 if (UnpData==NULL)
1449 SubDataIO.SetTestMode(true);
1450 else
1451 {
1452 UnpData->Alloc((size_t)SubHead.UnpSize);
1453 SubDataIO.SetUnpackToMemory(&(*UnpData)[0],(uint)SubHead.UnpSize);
1454 }
1455 }
1456 if (SubHead.Encrypted)
1457 if (Cmd->Password.IsSet())
1458 SubDataIO.SetEncryption(false,SubHead.CryptMethod,&Cmd->Password,
1459 SubHead.SaltSet ? SubHead.Salt:NULL,SubHead.InitV,
1460 SubHead.Lg2Count,SubHead.HashKey,SubHead.PswCheck);
1461 else
1462 return false;
1463 SubDataIO.UnpHash.Init(SubHead.FileHash.Type,1);
1464 SubDataIO.SetPackedSizeToRead(SubHead.PackSize);
1465 SubDataIO.EnableShowProgress(false);
1466 SubDataIO.SetFiles(this,DestFile);
1467 SubDataIO.SetTestMode(TestMode);
1468 SubDataIO.UnpVolume=SubHead.SplitAfter;
1469 SubDataIO.SetSubHeader(&SubHead,NULL);
1470 Unpack.SetDestSize(SubHead.UnpSize);
1471 if (SubHead.Method==0)
1472 CmdExtract::UnstoreFile(SubDataIO,SubHead.UnpSize);
1473 else
1474 Unpack.DoUnpack(SubHead.UnpVer,false);
1475
1476 if (!SubDataIO.UnpHash.Cmp(&SubHead.FileHash,SubHead.UseHashKey ? SubHead.HashKey:NULL))

Callers 2

ExtractACLFunction · 0.80
ExtractStreamsFunction · 0.80

Calls 15

uiMsgFunction · 0.85
SetErrorCodeMethod · 0.80
SetTestModeMethod · 0.80
AllocMethod · 0.80
SetUnpackToMemoryMethod · 0.80
SetEncryptionMethod · 0.80
SetPackedSizeToReadMethod · 0.80
EnableShowProgressMethod · 0.80
SetFilesMethod · 0.80
SetSubHeaderMethod · 0.80
SetDestSizeMethod · 0.80
DoUnpackMethod · 0.80

Tested by

no test coverage detected