[MediaWiki-commits] [Gerrit] Fix issue #2 Zimdump crashes on long titles. - change (openzim)
Kelson has submitted this change and it was merged. Change subject: Fix issue #2 Zimdump crashes on long titles. .. Fix issue #2 Zimdump crashes on long titles. Most of filesystems have a filename limited to 255 bytes. If the filename is > 255 bytes truncate it. Postfix the truncated filename with a counter to avoid name collision. Change-Id: I0475aaa2d1221be46c48c5a52814ca6659cc7940 --- M zimlib/src/tools/zimDump.cpp 1 file changed, 8 insertions(+), 0 deletions(-) Approvals: Kelson: Verified; Looks good to me, approved diff --git a/zimlib/src/tools/zimDump.cpp b/zimlib/src/tools/zimDump.cpp index 65d13b8..7c0149d 100644 --- a/zimlib/src/tools/zimDump.cpp +++ b/zimlib/src/tools/zimDump.cpp @@ -394,6 +394,7 @@ void ZimDumper::dumpFiles(const std::string& directory) { + unsigned int truncatedFiles = 0; ::mkdir(directory.c_str(), 0777); std::set ns; @@ -406,6 +407,13 @@ std::string::size_type p; while ((p = t.find('/')) != std::string::npos) t.replace(p, 1, "%2f"); +if ( t.length() > 255 ) +{ + std::ostringstream sspostfix, sst; + sspostfix << (++truncatedFiles); + sst << t.substr(0, 254-sspostfix.tellp()) << "~" << sspostfix.str(); + t = sst.str(); +} std::string f = d + '/' + t; std::ofstream out(f.c_str()); out << it->getData(); -- To view, visit https://gerrit.wikimedia.org/r/296931 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I0475aaa2d1221be46c48c5a52814ca6659cc7940 Gerrit-PatchSet: 1 Gerrit-Project: openzim Gerrit-Branch: master Gerrit-Owner: Mgautierfr Gerrit-Reviewer: Kelson ___ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits
[MediaWiki-commits] [Gerrit] Fix issue #2 Zimdump crashes on long titles. - change (openzim)
Mgautierfr has uploaded a new change for review. https://gerrit.wikimedia.org/r/296931 Change subject: Fix issue #2 Zimdump crashes on long titles. .. Fix issue #2 Zimdump crashes on long titles. Most of filesystems have a filename limited to 255 bytes. If the filename is > 255 bytes truncate it. Postfix the truncated filename with a counter to avoid name collision. Change-Id: I0475aaa2d1221be46c48c5a52814ca6659cc7940 --- M zimlib/src/tools/zimDump.cpp 1 file changed, 8 insertions(+), 0 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/openzim refs/changes/31/296931/1 diff --git a/zimlib/src/tools/zimDump.cpp b/zimlib/src/tools/zimDump.cpp index 65d13b8..7c0149d 100644 --- a/zimlib/src/tools/zimDump.cpp +++ b/zimlib/src/tools/zimDump.cpp @@ -394,6 +394,7 @@ void ZimDumper::dumpFiles(const std::string& directory) { + unsigned int truncatedFiles = 0; ::mkdir(directory.c_str(), 0777); std::set ns; @@ -406,6 +407,13 @@ std::string::size_type p; while ((p = t.find('/')) != std::string::npos) t.replace(p, 1, "%2f"); +if ( t.length() > 255 ) +{ + std::ostringstream sspostfix, sst; + sspostfix << (++truncatedFiles); + sst << t.substr(0, 254-sspostfix.tellp()) << "~" << sspostfix.str(); + t = sst.str(); +} std::string f = d + '/' + t; std::ofstream out(f.c_str()); out << it->getData(); -- To view, visit https://gerrit.wikimedia.org/r/296931 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I0475aaa2d1221be46c48c5a52814ca6659cc7940 Gerrit-PatchSet: 1 Gerrit-Project: openzim Gerrit-Branch: master Gerrit-Owner: Mgautierfr ___ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits