diff options
Diffstat (limited to 'CPP/7zip/Archive/Tar/TarHandler.cpp')
-rwxr-xr-x | CPP/7zip/Archive/Tar/TarHandler.cpp | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/CPP/7zip/Archive/Tar/TarHandler.cpp b/CPP/7zip/Archive/Tar/TarHandler.cpp index 9c2cd006..f2c83caf 100755 --- a/CPP/7zip/Archive/Tar/TarHandler.cpp +++ b/CPP/7zip/Archive/Tar/TarHandler.cpp @@ -113,8 +113,22 @@ STDMETHODIMP CHandler::Open(IInStream *stream, } } if (_items.Size() == 0) - return S_FALSE; - + { + CMyComPtr<IArchiveOpenVolumeCallback> openVolumeCallback; + if (!openArchiveCallback) + return S_FALSE; + openArchiveCallback->QueryInterface(IID_IArchiveOpenVolumeCallback, (void **)&openVolumeCallback); + if (!openVolumeCallback) + return S_FALSE; + NCOM::CPropVariant propVariant; + RINOK(openVolumeCallback->GetProperty(kpidName, &propVariant)); + if (propVariant.vt != VT_BSTR) + return S_FALSE; + UString baseName = propVariant.bstrVal; + baseName = baseName.Right(4); + if (baseName.CompareNoCase(L".tar") != 0) + return S_FALSE; + } _inStream = stream; } /* |