diff options
author | Igor Pavlov <ipavlov@users.sourceforge.net> | 2015-06-15 03:00:00 +0300 |
---|---|---|
committer | Kornel LesiĆski <kornel@geekhood.net> | 2016-05-28 02:16:54 +0300 |
commit | 54490d51d5c6b0d794dcbad2d634d4c95fc25b6c (patch) | |
tree | c3c413656432c0ef87b2841c80e42b55ad17d4e8 /CPP/7zip/Archive/Udf | |
parent | 0713a3ab803e57401f18432148b4139e5fe6e5dd (diff) |
15.0515.05
Diffstat (limited to 'CPP/7zip/Archive/Udf')
-rw-r--r-- | CPP/7zip/Archive/Udf/UdfHandler.cpp | 26 | ||||
-rw-r--r-- | CPP/7zip/Archive/Udf/UdfIn.cpp | 26 | ||||
-rw-r--r-- | CPP/7zip/Archive/Udf/UdfRegister.cpp | 7 |
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" |