diff options
author | Chris Koying Browet <cbro@semperpax.com> | 2017-10-26 08:52:38 +0200 |
---|---|---|
committer | Chris Koying Browet <cbro@semperpax.com> | 2017-10-28 10:53:44 +0200 |
commit | 03c421d8e2ca845d22332bfa277e38b03ce2779c (patch) | |
tree | d2132ac65775b4400219d824e38a7641495d4bab | |
parent | e3d2cb558373b0a02526956ba65335bc37949418 (diff) |
FIX: Only remove options for actual URL in URIUtils::Split (fixes #17627)
It occurs that URIUtils::Split is not only used for URI
-rw-r--r-- | xbmc/utils/URIUtils.cpp | 19 | ||||
-rw-r--r-- | xbmc/utils/test/TestURIUtils.cpp | 10 |
2 files changed, 20 insertions, 9 deletions
diff --git a/xbmc/utils/URIUtils.cpp b/xbmc/utils/URIUtils.cpp index 7153beb719..faefd5d38c 100644 --- a/xbmc/utils/URIUtils.cpp +++ b/xbmc/utils/URIUtils.cpp @@ -218,16 +218,19 @@ void URIUtils::Split(const std::string& strFileNameAndPath, // everything to the right of the directory separator strFileName = strFileNameAndPath.substr(i+1); - // ignore options - i = strFileName.size() - 1; - while (i > 0) + // if actual uri, ignore options + if (IsURL(strFileNameAndPath)) { - char ch = strFileName[i]; - if (ch == '?') break; - else i--; + i = strFileName.size() - 1; + while (i > 0) + { + char ch = strFileName[i]; + if (ch == '?') break; + else i--; + } + if (i > 0) + strFileName = strFileName.substr(0, i); } - if (i > 0) - strFileName = strFileName.substr(0, i); } std::vector<std::string> URIUtils::SplitPath(const std::string& strPath) diff --git a/xbmc/utils/test/TestURIUtils.cpp b/xbmc/utils/test/TestURIUtils.cpp index 72be4563f4..7902aa108b 100644 --- a/xbmc/utils/test/TestURIUtils.cpp +++ b/xbmc/utils/test/TestURIUtils.cpp @@ -124,7 +124,15 @@ TEST_F(TestURIUtils, Split) std::string varpathOptional, varfileOptional; - URIUtils::Split("/path/to/movie.avi?showinfo=true", varpathOptional, varfileOptional); + refpath = "/path/to/"; + reffile = "movie?movie.avi"; + URIUtils::Split("/path/to/movie?movie.avi", varpathOptional, varfileOptional); + EXPECT_STREQ(refpath.c_str(), varpathOptional.c_str()); + EXPECT_STREQ(reffile.c_str(), varfileOptional.c_str()); + + refpath = "file:///path/to/"; + reffile = "movie.avi"; + URIUtils::Split("file:///path/to/movie.avi?showinfo=true", varpathOptional, varfileOptional); EXPECT_STREQ(refpath.c_str(), varpathOptional.c_str()); EXPECT_STREQ(reffile.c_str(), varfileOptional.c_str()); } |