diff --git a/src/zimwriterfs/zimcreatorfs.cpp b/src/zimwriterfs/zimcreatorfs.cpp index 4aef4094..0df0b031 100644 --- a/src/zimwriterfs/zimcreatorfs.cpp +++ b/src/zimwriterfs/zimcreatorfs.cpp @@ -34,7 +34,7 @@ void parse_redirectArticles(std::istream& in_stream, redirect_handler handler) { std::string line; int line_number = 1; while (std::getline(in_stream, line)) { - std::regex line_regex("(.+)\\t(.+)\\t(.+)"); + std::regex line_regex("^([^\\t]+)\\t([^\\t]+)\\t([^\\t]+)$"); std::smatch matches; if (!std::regex_search(line, matches, line_regex) || matches.size() != 4) { throw std::runtime_error( diff --git a/test/zimwriterfs-zimcreatorfs.cpp b/test/zimwriterfs-zimcreatorfs.cpp index d2622983..2fedd102 100644 --- a/test/zimwriterfs-zimcreatorfs.cpp +++ b/test/zimwriterfs-zimcreatorfs.cpp @@ -165,4 +165,16 @@ TEST(ZimCreatorFSTest, ParseRedirect) ); }, std::runtime_error); } + + { + std::stringstream ss; + ss << "A/path\ttitle\ttarget\tOups, to many tabs\n"; + EXPECT_THROW({ + parse_redirectArticles( + ss, + [&](Redirect redirect) + {} + ); + }, std::runtime_error); + } }