piInfo.fiInfo.fnFileName = wxFileName(piInfo.fiInfo.szStoredName);\r
}\r
\r
+ // セキュリティチェック。\r
// ルート記号を削除。\r
wxString szPath = piInfo.fiInfo.fnFileName.GetPathWithSep(wxPATH_UNIX);\r
if (szPath.StartsWith(wxT("/")))\r
piInfo.fiInfo.fnFileName = wxFileName(szPath.AfterFirst(wxT('/')), piInfo.fiInfo.fnFileName.GetFullName(), wxPATH_DOS);\r
}\r
\r
- // ツリービューに反映。\r
- bool fDir = piInfo.fiInfo.dwAttribute & TPI_ATTRIBUTE_DIRECTORY ? true : false;\r
- TreeView_CheckNewerItem(this->tree_ctrl, idArcRoot, fDir ? piInfo.fiInfo.fnFileName.GetFullPath() : piInfo.fiInfo.fnFileName.GetPath(), true);\r
+ // 改行文字/タブ文字などを削除。\r
+ if (piInfo.fiInfo.szStoredName.Find(wxT('\r')) != wxNOT_FOUND\r
+ || piInfo.fiInfo.szStoredName.Find(wxT('\n')) != wxNOT_FOUND\r
+ || piInfo.fiInfo.szStoredName.Find(wxT('\t')) != wxNOT_FOUND)\r
+ {\r
+ wxString sz = piInfo.fiInfo.fnFileName.GetFullPath();\r
+ sz.Replace(wxT("\r"), wxT(" "));\r
+ sz.Replace(wxT("\n"), wxT(" "));\r
+ sz.Replace(wxT("\t"), wxT(" "));\r
+ piInfo.fiInfo.eDanger = TRUE;\r
+ piInfo.fiInfo.fnFileName = wxFileName(sz);\r
+ wxLogWarning(_("This archive may contain files whose name contains some special characters like CR(\\r), LF(\\n), Tab(\\t) and some problem would be happen if you extract these files. Don\'t extract these files carelessly.\nDanger file is:\n%s"), piInfo.fiInfo.fnFileName.GetFullPath().c_str());\r
+ }\r
\r
- // セキュリティチェック。\r
// DTV検査。\r
if (piInfo.fiInfo.fnFileName.GetPathWithSep(wxPATH_UNIX).Find(wxT("../")) != wxNOT_FOUND)\r
{\r
}\r
}\r
\r
+ // ツリービューに反映。\r
+ bool fDir = piInfo.fiInfo.dwAttribute & TPI_ATTRIBUTE_DIRECTORY ? true : false;\r
+ TreeView_CheckNewerItem(this->tree_ctrl, idArcRoot, fDir ? piInfo.fiInfo.fnFileName.GetFullPath() : piInfo.fiInfo.fnFileName.GetPath(), true);\r
+\r
// ディレクトリ属性を含むものについては情報を保存しない。\r
if (fDir)\r
{\r