Kelson has submitted this change and it was merged. ( 
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(-)

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<char> 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 <mgaut...@kymeria.fr>
Gerrit-Reviewer: Kelson <kel...@kiwix.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to