Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/kornelski/7z.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgor Pavlov <ipavlov@users.sourceforge.net>2015-06-15 03:00:00 +0300
committerKornel LesiƄski <kornel@geekhood.net>2016-05-28 02:16:54 +0300
commit54490d51d5c6b0d794dcbad2d634d4c95fc25b6c (patch)
treec3c413656432c0ef87b2841c80e42b55ad17d4e8 /CPP/7zip/Archive/Udf
parent0713a3ab803e57401f18432148b4139e5fe6e5dd (diff)
15.0515.05
Diffstat (limited to 'CPP/7zip/Archive/Udf')
-rw-r--r--CPP/7zip/Archive/Udf/UdfHandler.cpp26
-rw-r--r--CPP/7zip/Archive/Udf/UdfIn.cpp26
-rw-r--r--CPP/7zip/Archive/Udf/UdfRegister.cpp7
3 files changed, 23 insertions, 36 deletions
diff --git a/CPP/7zip/Archive/Udf/UdfHandler.cpp b/CPP/7zip/Archive/Udf/UdfHandler.cpp
index 6aa53ea9..d35db9fb 100644
--- a/CPP/7zip/Archive/Udf/UdfHandler.cpp
+++ b/CPP/7zip/Archive/Udf/UdfHandler.cpp
@@ -26,7 +26,7 @@ static void UdfTimeToFileTime(const CTime &t, NWindows::NCOM::CPropVariant &prop
if (!NWindows::NTime::GetSecondsSince1601(t.GetYear(), d[4], d[5], d[6], d[7], d[8], numSecs))
return;
if (t.IsLocal())
- numSecs -= t.GetMinutesOffset() * 60;
+ numSecs -= (Int64)((Int32)t.GetMinutesOffset() * 60);
FILETIME ft;
UInt64 v = (((numSecs * 100 + d[9]) * 100 + d[10]) * 100 + d[11]) * 10;
ft.dwLowDateTime = (UInt32)v;
@@ -227,13 +227,7 @@ STDMETHODIMP CHandler::GetStream(UInt32 index, ISequentialInStream **stream)
if (item.IsInline)
{
- CBufInStream *inStreamSpec = new CBufInStream;
- CMyComPtr<ISequentialInStream> inStream = inStreamSpec;
- CReferenceBuf *referenceBuf = new CReferenceBuf;
- CMyComPtr<IUnknown> ref = referenceBuf;
- referenceBuf->Buf = item.InlineData;
- inStreamSpec->Init(referenceBuf);
- *stream = inStream.Detach();
+ Create_BufInStream_WithNewBuffer(item.InlineData, stream);
return S_OK;
}
@@ -366,18 +360,16 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems,
COM_TRY_END
}
-IMP_CreateArcIn
-
static const UInt32 kIsoStartPos = 0x8000;
-static CArcInfo g_ArcInfo =
- { "Udf", "udf iso img", 0, 0xE0,
- // 5, { 0, 'N', 'S', 'R', '0' },
- 6, { 1, 'C', 'D', '0', '0', '1' },
+// 5, { 0, 'N', 'S', 'R', '0' },
+static const Byte k_Signature[] = { 1, 'C', 'D', '0', '0', '1' };
+
+REGISTER_ARC_I(
+ "Udf", "udf iso img", 0, 0xE0,
+ k_Signature,
kIsoStartPos,
NArcInfoFlags::kStartOpen,
- CreateArc, NULL, IsArc_Udf };
-
-REGISTER_ARC(Udf)
+ IsArc_Udf)
}}
diff --git a/CPP/7zip/Archive/Udf/UdfIn.cpp b/CPP/7zip/Archive/Udf/UdfIn.cpp
index 3053a0c1..62df64dc 100644
--- a/CPP/7zip/Archive/Udf/UdfIn.cpp
+++ b/CPP/7zip/Archive/Udf/UdfIn.cpp
@@ -82,13 +82,13 @@ void CDString::Parse(const Byte *p, unsigned size)
static UString ParseDString(const Byte *data, unsigned size)
{
UString res;
- wchar_t *p;
if (size > 0)
{
+ wchar_t *p;
Byte type = data[0];
if (type == 8)
{
- p = res.GetBuffer(size);
+ p = res.GetBuf(size);
for (unsigned i = 1; i < size; i++)
{
wchar_t c = data[i];
@@ -99,7 +99,7 @@ static UString ParseDString(const Byte *data, unsigned size)
}
else if (type == 16)
{
- p = res.GetBuffer(size / 2);
+ p = res.GetBuf(size / 2);
for (unsigned i = 1; i + 2 <= size; i += 2)
{
wchar_t c = GetBe16(data + i);
@@ -110,8 +110,8 @@ static UString ParseDString(const Byte *data, unsigned size)
}
else
return L"[unknow]";
- *p++ = 0;
- res.ReleaseBuffer();
+ *p = 0;
+ res.ReleaseBuf_SetLen((unsigned)(p - (const wchar_t *)res));
}
return res;
}
@@ -432,6 +432,8 @@ HRESULT CInArchive::ReadItem(int volIndex, int fsIndex, const CLongAllocDesc &la
CTag tag;
const Byte *p = buf;
RINOK(tag.Parse(p, size));
+ if (size < 176)
+ return S_FALSE;
if (tag.Id != DESC_TYPE_File)
return S_FALSE;
@@ -449,7 +451,7 @@ HRESULT CInArchive::ReadItem(int volIndex, int fsIndex, const CLongAllocDesc &la
if ((extendedAttrLen & 3) != 0)
return S_FALSE;
- int pos = 176;
+ size_t pos = 176;
if (extendedAttrLen > size - pos)
return S_FALSE;
/*
@@ -595,7 +597,7 @@ API_FUNC_IsArc IsArc_Udf(const Byte *p, size_t size)
if (SecLogSize < 8)
return res;
UInt32 offset = (UInt32)256 << SecLogSize;
- size_t bufSize = 1 << SecLogSize;
+ size_t bufSize = (UInt32)1 << SecLogSize;
if (offset + bufSize > size)
res = k_IsArc_Res_NEED_MORE;
else
@@ -652,7 +654,7 @@ HRESULT CInArchive::Open2()
if (offset >= fileSize)
continue;
RINOK(_stream->Seek(offset, STREAM_SEEK_SET, NULL));
- size_t bufSize = 1 << SecLogSize;
+ size_t bufSize = (UInt32)1 << SecLogSize;
size_t readSize = bufSize;
RINOK(ReadStream(_stream, buf, &readSize));
if (readSize == bufSize)
@@ -677,7 +679,7 @@ HRESULT CInArchive::Open2()
for (UInt32 location = 0; ; location++)
{
- size_t bufSize = 1 << SecLogSize;
+ size_t bufSize = (UInt32)1 << SecLogSize;
size_t pos = 0;
if (((UInt64)(location + 1) << SecLogSize) > extentVDS.Len)
return S_FALSE;
@@ -950,7 +952,7 @@ HRESULT CInArchive::Open2()
if (PhySize < fileSize)
{
RINOK(_stream->Seek(PhySize, STREAM_SEEK_SET, NULL));
- size_t bufSize = 1 << SecLogSize;
+ size_t bufSize = (UInt32)1 << SecLogSize;
size_t readSize = bufSize;
RINOK(ReadStream(_stream, buf, &readSize));
if (readSize == bufSize)
@@ -1018,8 +1020,8 @@ UString CInArchive::GetComment() const
UString res;
FOR_VECTOR (i, LogVols)
{
- if (i > 0)
- res += L" ";
+ if (i != 0)
+ res.Add_Space();
res += LogVols[i].GetName();
}
return res;
diff --git a/CPP/7zip/Archive/Udf/UdfRegister.cpp b/CPP/7zip/Archive/Udf/UdfRegister.cpp
deleted file mode 100644
index ed32f12e..00000000
--- a/CPP/7zip/Archive/Udf/UdfRegister.cpp
+++ /dev/null
@@ -1,7 +0,0 @@
-// UdfRegister.cpp
-
-#include "StdAfx.h"
-
-#include "../../Common/RegisterArc.h"
-
-#include "UdfHandler.h"