Version in base suite: 3.9-2 Base version: lgogdownloader_3.9-2 Target version: lgogdownloader_3.9-2+deb12u1 Base file: /srv/ftp-master.debian.org/ftp/pool/main/l/lgogdownloader/lgogdownloader_3.9-2.dsc Target file: /srv/ftp-master.debian.org/policy/pool/main/l/lgogdownloader/lgogdownloader_3.9-2+deb12u1.dsc changelog | 6 +++ patches/galaxy-urls-1.patch | 24 ++++++++++++ patches/galaxy-urls-2.patch | 88 ++++++++++++++++++++++++++++++++++++++++++++ patches/series | 2 + 4 files changed, 120 insertions(+) diff -Nru lgogdownloader-3.9/debian/changelog lgogdownloader-3.9/debian/changelog --- lgogdownloader-3.9/debian/changelog 2023-02-27 07:42:04.000000000 +0000 +++ lgogdownloader-3.9/debian/changelog 2024-10-20 19:39:20.000000000 +0000 @@ -1,3 +1,9 @@ +lgogdownloader (3.9-2+deb12u1) bookworm; urgency=medium + + * Apply upstream fixes for parsing Galaxy URLs. Closes: #1085527. + + -- Stephen Kitt Sun, 20 Oct 2024 21:39:20 +0200 + lgogdownloader (3.9-2) unstable; urgency=medium * qtwebengine5-dev is now available on mips64el, use it there. Thanks diff -Nru lgogdownloader-3.9/debian/patches/galaxy-urls-1.patch lgogdownloader-3.9/debian/patches/galaxy-urls-1.patch --- lgogdownloader-3.9/debian/patches/galaxy-urls-1.patch 1970-01-01 00:00:00.000000000 +0000 +++ lgogdownloader-3.9/debian/patches/galaxy-urls-1.patch 2024-10-20 19:39:20.000000000 +0000 @@ -0,0 +1,24 @@ +commit 52b8bdc8fa0028bcb875c6a723c6e04deeecbcb8 +Author: Sude +Date: Thu Aug 22 18:13:44 2024 +0300 + + Fix galaxyAPI::getPathFromDownlinkUrl with Fastly CDN urls + + Fastly CDN urls don't contain query strings + +diff --git a/src/galaxyapi.cpp b/src/galaxyapi.cpp +index 56d5745..7699d69 100644 +--- a/src/galaxyapi.cpp ++++ b/src/galaxyapi.cpp +@@ -567,6 +567,11 @@ std::string galaxyAPI::getPathFromDownlinkUrl(const std::string& downlink_url, c + else + filename_end_pos = downlink_url_unescaped.find_first_of("?"); + ++ // Downlink doesn't contain "?path=" or "?" ++ // Set end pos to length ++ if (filename_end_pos == std::string::npos) ++ filename_end_pos = downlink_url_unescaped.length(); ++ + if (downlink_url_unescaped.find("/" + gamename + "/") != std::string::npos) + { + path.assign(downlink_url_unescaped.begin()+downlink_url_unescaped.find("/" + gamename + "/"), downlink_url_unescaped.begin()+filename_end_pos); diff -Nru lgogdownloader-3.9/debian/patches/galaxy-urls-2.patch lgogdownloader-3.9/debian/patches/galaxy-urls-2.patch --- lgogdownloader-3.9/debian/patches/galaxy-urls-2.patch 1970-01-01 00:00:00.000000000 +0000 +++ lgogdownloader-3.9/debian/patches/galaxy-urls-2.patch 2024-10-20 19:39:20.000000000 +0000 @@ -0,0 +1,88 @@ +commit 6556dc6a82b4e3d64ef1a7940736be3a7b2ac956 +Author: Sude +Date: Thu Aug 22 21:50:23 2024 +0300 + + Add more checks to galaxyAPI::getPathFromDownlinkUrl + +diff --git a/src/galaxyapi.cpp b/src/galaxyapi.cpp +index 7699d69..716ebdd 100644 +--- a/src/galaxyapi.cpp ++++ b/src/galaxyapi.cpp +@@ -547,40 +547,51 @@ std::string galaxyAPI::getPathFromDownlinkUrl(const std::string& downlink_url, c + { + std::string path; + std::string downlink_url_unescaped = (std::string)curl_easy_unescape(curlhandle, downlink_url.c_str(), downlink_url.size(), NULL); ++ size_t filename_start_pos = 0; + +- // GOG has changed the url formatting few times between 2 different formats. +- // Try to get proper file name in both cases. +- size_t filename_end_pos; +- if (downlink_url_unescaped.find("?path=") != std::string::npos) ++ // If url ends in "/" then remove it ++ if (downlink_url_unescaped.back() == '/') ++ downlink_url_unescaped.assign(downlink_url_unescaped.begin(), downlink_url_unescaped.end()-1); ++ ++ // Assume that filename starts after last "/" in url ++ if (downlink_url_unescaped.find_last_of("/") != std::string::npos) ++ filename_start_pos = downlink_url_unescaped.find_last_of("/") + 1; ++ ++ // Url contains "/gamename/" ++ if (downlink_url_unescaped.find("/" + gamename + "/") != std::string::npos) ++ filename_start_pos = downlink_url_unescaped.find("/" + gamename + "/"); ++ ++ // Assume that filename ends at the end of url ++ size_t filename_end_pos = downlink_url_unescaped.length(); ++ ++ // Check to see if url has any query strings ++ if (downlink_url_unescaped.find("?") != std::string::npos) + { +- size_t token_pos = downlink_url_unescaped.find("&token="); +- size_t access_token_pos = downlink_url_unescaped.find("&access_token="); +- if ((token_pos != std::string::npos) && (access_token_pos != std::string::npos)) +- { +- filename_end_pos = std::min(token_pos, access_token_pos); +- } +- else ++ // Assume that filename ends at first "?" ++ filename_end_pos = downlink_url_unescaped.find_first_of("?"); ++ ++ // Check for "?path=" ++ if (downlink_url_unescaped.find("?path=") != std::string::npos) + { +- filename_end_pos = downlink_url_unescaped.find_first_of("&"); ++ size_t token_pos = downlink_url_unescaped.find("&token="); ++ size_t access_token_pos = downlink_url_unescaped.find("&access_token="); ++ if ((token_pos != std::string::npos) && (access_token_pos != std::string::npos)) ++ { ++ filename_end_pos = std::min(token_pos, access_token_pos); ++ } ++ else ++ { ++ if (downlink_url_unescaped.find_first_of("&") != std::string::npos) ++ filename_end_pos = downlink_url_unescaped.find_first_of("&"); ++ } + } + } +- else +- filename_end_pos = downlink_url_unescaped.find_first_of("?"); + +- // Downlink doesn't contain "?path=" or "?" +- // Set end pos to length +- if (filename_end_pos == std::string::npos) +- filename_end_pos = downlink_url_unescaped.length(); ++ path.assign(downlink_url_unescaped.begin()+filename_start_pos, downlink_url_unescaped.begin()+filename_end_pos); + +- if (downlink_url_unescaped.find("/" + gamename + "/") != std::string::npos) +- { +- path.assign(downlink_url_unescaped.begin()+downlink_url_unescaped.find("/" + gamename + "/"), downlink_url_unescaped.begin()+filename_end_pos); +- } +- else +- { +- path.assign(downlink_url_unescaped.begin()+downlink_url_unescaped.find_last_of("/")+1, downlink_url_unescaped.begin()+filename_end_pos); ++ // Make sure that path contains "/gamename/" ++ if (path.find("/" + gamename + "/") == std::string::npos) + path = "/" + gamename + "/" + path; +- } + + // Workaround for filename issue caused by different (currently unknown) url formatting scheme + // https://github.com/Sude-/lgogdownloader/issues/126 diff -Nru lgogdownloader-3.9/debian/patches/series lgogdownloader-3.9/debian/patches/series --- lgogdownloader-3.9/debian/patches/series 2020-08-31 12:01:34.000000000 +0000 +++ lgogdownloader-3.9/debian/patches/series 2024-10-20 19:39:20.000000000 +0000 @@ -1,2 +1,4 @@ manpage-whatis.patch reproducible.patch +galaxy-urls-1.patch +galaxy-urls-2.patch