diff options
author | Chris Browet <koying@users.noreply.github.com> | 2017-10-29 14:15:30 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-10-29 14:15:30 +0100 |
commit | cbd11f10db2c1d5ef694d9439ede43092c564825 (patch) | |
tree | 8c802ffea6c14446e361acfd3a168e36138a857d | |
parent | e46d91849a9065036096dbaa67b28c14b9bf4e34 (diff) | |
parent | 03c421d8e2ca845d22332bfa277e38b03ce2779c (diff) |
Merge pull request #12962 from koying/fix17627
FIX: Only remove options for actual URL in URIUtils::Split (fixes #17627)
-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()); } |