From 2b5149c6c24e51e99994297bc0db1055960d28aa Mon Sep 17 00:00:00 2001 From: MilhouseVH Date: Sun, 28 Aug 2016 22:24:13 +0100 Subject: [PATCH] kodi: Add PR10345 to avoid kodi crashing when loading old inputstream addons --- .../kodi/patches/kodi-999.99-PR10345.patch | 82 +++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 packages/mediacenter/kodi/patches/kodi-999.99-PR10345.patch diff --git a/packages/mediacenter/kodi/patches/kodi-999.99-PR10345.patch b/packages/mediacenter/kodi/patches/kodi-999.99-PR10345.patch new file mode 100644 index 0000000000..43b06967c6 --- /dev/null +++ b/packages/mediacenter/kodi/patches/kodi-999.99-PR10345.patch @@ -0,0 +1,82 @@ +From 11c81dbb3d0ccfbe3a4197890dea09801617eae2 Mon Sep 17 00:00:00 2001 +From: mapfau +Date: Sun, 28 Aug 2016 23:15:34 +0200 +Subject: [PATCH] check for kodi.inputstream version + +--- + xbmc/addons/InputStream.cpp | 23 +++++++++++++++++++++-- + xbmc/addons/InputStream.h | 4 +++- + 2 files changed, 24 insertions(+), 3 deletions(-) + +diff --git a/xbmc/addons/InputStream.cpp b/xbmc/addons/InputStream.cpp +index 9d6aee2..5d09a4c 100644 +--- a/xbmc/addons/InputStream.cpp ++++ b/xbmc/addons/InputStream.cpp +@@ -36,8 +36,22 @@ std::unique_ptr CInputStream::FromExtension(AddonProps props, cons + std::string extensions = CAddonMgr::GetInstance().GetExtValue(ext->configuration, "@extension"); + std::string protocols = CAddonMgr::GetInstance().GetExtValue(ext->configuration, "@protocols"); + std::string name(ext->plugin->identifier); ++ ++ bool matchAPIVersion(true); ++ for (unsigned int i(0); i < ext->plugin->num_imports; ++i) ++ if (strcmp(ext->plugin->imports[i].plugin_id, "kodi.inputstream") == 0 && strcmp(ext->plugin->imports[i].version, INPUTSTREAM_API_VERSION) != 0) ++ { ++ matchAPIVersion = false; ++ CLog::Log(LOGNOTICE, "CInputStream::FromExtension - %s (%s) not loaded due to API mismatch, has %s, wanted %s", ++ props.id.c_str(), ++ props.version.Upstream().c_str(), ++ ext->plugin->imports[i].version, ++ INPUTSTREAM_API_VERSION); ++ break; ++ } ++ + std::unique_ptr istr(new CInputStream(props, name, listitemprops, +- extensions, protocols)); ++ extensions, protocols, matchAPIVersion)); + istr->CheckConfig(); + return istr; + } +@@ -46,8 +60,10 @@ CInputStream::CInputStream(const AddonProps& props, + const std::string& name, + const std::string& listitemprops, + const std::string& extensions, +- const std::string& protocols) ++ const std::string& protocols, ++ bool matchAPIVersion) + : InputStreamDll(std::move(props)) ++, m_matchAPIVersion(matchAPIVersion) + { + m_fileItemProps = StringUtils::Tokenize(listitemprops, "|"); + for (auto &key : m_fileItemProps) +@@ -71,6 +87,9 @@ CInputStream::CInputStream(const AddonProps& props, + + bool CInputStream::CheckAPIVersion() + { ++ if (!m_matchAPIVersion) ++ return false; ++ + std::string dllVersion = m_pStruct->GetApiVersion(); + if (dllVersion.compare(INPUTSTREAM_API_VERSION) != 0) + { +diff --git a/xbmc/addons/InputStream.h b/xbmc/addons/InputStream.h +index c081472..328e036 100644 +--- a/xbmc/addons/InputStream.h ++++ b/xbmc/addons/InputStream.h +@@ -46,7 +46,8 @@ namespace ADDON + const std::string& name, + const std::string& listitemprops, + const std::string& extensions, +- const std::string& protocols); ++ const std::string& protocols, ++ bool hasAPIVersion); + virtual ~CInputStream() {} + + virtual void SaveSettings() override; +@@ -100,6 +101,7 @@ namespace ADDON + std::vector m_extensionsList; + std::vector m_protocolsList; + INPUTSTREAM_CAPABILITIES m_caps; ++ bool m_matchAPIVersion; + std::map m_streams; + + static CCriticalSection m_parentSection;