Skip to content

Commit

Permalink
fixed: We must exact match addon extensions/mimetypes/protocols (should
Browse files Browse the repository at this point in the history
fix #16652)
  • Loading branch information
arnova committed Sep 22, 2019
1 parent 2bfbe71 commit 8f66eff
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 33 deletions.
6 changes: 4 additions & 2 deletions xbmc/cores/paplayer/CodecFactory.cpp
Expand Up @@ -26,7 +26,8 @@ ICodec* CodecFactory::CreateCodec(const std::string &strFileType)
CServiceBroker::GetBinaryAddonManager().GetAddonInfos(addonInfos, true, ADDON_AUDIODECODER);
for (const auto& addonInfo : addonInfos)
{
if (CAudioDecoder::GetExtensions(addonInfo).find("."+fileType) != std::string::npos)
auto exts = StringUtils::Split(CAudioDecoder::GetExtensions(addonInfo), "|");
if (std::find(exts.begin(), exts.end(), "." + fileType) != exts.end())
{
CAudioDecoder* result = new CAudioDecoder(addonInfo);
if (!result->CreateDecoder())
Expand All @@ -53,7 +54,8 @@ ICodec* CodecFactory::CreateCodecDemux(const CFileItem& file, unsigned int filec
CServiceBroker::GetBinaryAddonManager().GetAddonInfos(addonInfos, true, ADDON_AUDIODECODER);
for (const auto& addonInfo : addonInfos)
{
if (CAudioDecoder::GetMimetypes(addonInfo).find(content) != std::string::npos)
auto types = StringUtils::Split(CAudioDecoder::GetMimetypes(addonInfo), "|");
if (std::find(types.begin(), types.end(), content) != types.end())
{
CAudioDecoder* result = new CAudioDecoder(addonInfo);
if (!result->CreateDecoder())
Expand Down
54 changes: 30 additions & 24 deletions xbmc/filesystem/FileDirectoryFactory.cpp
Expand Up @@ -43,24 +43,27 @@ IFileDirectory* CFileDirectoryFactory::Create(const CURL& url, CFileItem* pItem,
if (url.IsProtocol("stack")) // disqualify stack as we need to work with each of the parts instead
return NULL;

std::string strExtension=URIUtils::GetExtension(url);
std::string strExtension = URIUtils::GetExtension(url);
StringUtils::ToLower(strExtension);
if (!strExtension.empty() && CServiceBroker::IsBinaryAddonCacheUp())
{
BinaryAddonBaseList addonInfos;
CServiceBroker::GetBinaryAddonManager().GetAddonInfos(addonInfos, true, ADDON_AUDIODECODER);
for (const auto& addonInfo : addonInfos)
{
if (CAudioDecoder::HasTracks(addonInfo) &&
CAudioDecoder::GetExtensions(addonInfo).find(strExtension) != std::string::npos)
if (CAudioDecoder::HasTracks(addonInfo))
{
CAudioDecoder* result = new CAudioDecoder(addonInfo);
if (!result->CreateDecoder() || !result->ContainsFiles(url))
auto exts = StringUtils::Split(CAudioDecoder::GetExtensions(addonInfo), "|");
if (std::find(exts.begin(), exts.end(), "." + strExtension) != exts.end())
{
delete result;
return nullptr;
CAudioDecoder* result = new CAudioDecoder(addonInfo);
if (!result->CreateDecoder() || !result->ContainsFiles(url))
{
delete result;
return nullptr;
}
return result;
}
return result;
}
}
}
Expand All @@ -69,28 +72,31 @@ IFileDirectory* CFileDirectoryFactory::Create(const CURL& url, CFileItem* pItem,
{
for (const auto& vfsAddon : CServiceBroker::GetVFSAddonCache().GetAddonInstances())
{
if (vfsAddon->HasFileDirectories() &&
vfsAddon->GetExtensions().find(strExtension) != std::string::npos)
if (vfsAddon->HasFileDirectories())
{
CVFSEntryIFileDirectoryWrapper* wrap = new CVFSEntryIFileDirectoryWrapper(vfsAddon);
if (wrap->ContainsFiles(url))
auto exts = StringUtils::Split(vfsAddon->GetExtensions(), "|");
if (std::find(exts.begin(), exts.end(), "." + strExtension) != exts.end())
{
if (wrap->m_items.Size() == 1)
CVFSEntryIFileDirectoryWrapper* wrap = new CVFSEntryIFileDirectoryWrapper(vfsAddon);
if (wrap->ContainsFiles(url))
{
// one STORED file - collapse it down
*pItem = *wrap->m_items[0];
if (wrap->m_items.Size() == 1)
{
// one STORED file - collapse it down
*pItem = *wrap->m_items[0];
}
else
{ // compressed or more than one file -> create a dir
pItem->SetPath(wrap->m_items.GetPath());
return wrap;
}
}
else
{ // compressed or more than one file -> create a dir
pItem->SetPath(wrap->m_items.GetPath());
return wrap;
}
}
else
pItem->m_bIsFolder = true;
pItem->m_bIsFolder = true;

delete wrap;
return nullptr;
delete wrap;
return nullptr;
}
}
}
}
Expand Down
17 changes: 10 additions & 7 deletions xbmc/music/tags/MusicInfoTagLoaderFactory.cpp
Expand Up @@ -48,16 +48,19 @@ IMusicInfoTagLoader* CMusicInfoTagLoaderFactory::CreateLoader(const CFileItem& i
CServiceBroker::GetBinaryAddonManager().GetAddonInfos(addonInfos, true, ADDON_AUDIODECODER);
for (const auto& addonInfo : addonInfos)
{
if (CAudioDecoder::HasTags(addonInfo) &&
CAudioDecoder::GetExtensions(addonInfo).find("."+strExtension) != std::string::npos)
if (CAudioDecoder::HasTags(addonInfo))
{
CAudioDecoder* result = new CAudioDecoder(addonInfo);
if (!result->CreateDecoder())
auto exts = StringUtils::Split(CAudioDecoder::GetExtensions(addonInfo), "|");
if (std::find(exts.begin(), exts.end(), "." + strExtension) != exts.end())
{
delete result;
return nullptr;
CAudioDecoder* result = new CAudioDecoder(addonInfo);
if (!result->CreateDecoder())
{
delete result;
return nullptr;
}
return result;
}
return result;
}
}

Expand Down

0 comments on commit 8f66eff

Please sign in to comment.