バージョン選択

フォーラム

メニュー

オンライン状況

29 人のユーザが現在オンラインです。 (14 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 29
もっと...

サイト内検索

バグ報告 > 管理機能 > 管理画面でファイル名を入力した際に警告がエラーログに記録される

管理機能

新規スレッドを追加する

フラット表示 前のトピック | 次のトピック
投稿者 スレッド
snitta
投稿日時: 2014/2/13 22:36
対応状況: −−−
一人前
登録日: 2013/10/3
居住地: 島根県
投稿: 100
管理画面でファイル名を入力した際に警告がエラーログに記録される
------------------------------------------------------------------------------------------
[EC-CUBE] 2.13.1
[レンタルサーバ] ローカルサーバー
[OS] Windows 8.1
[PHP] PHP 5.5.9
[データベース] MySQL 5.6.14
[WEBサーバ] Apache 2.4.7
[ブラウザ] Firefox 27.0
[現象] 管理画面の各所フォームでファイル名を入力した際に警告がエラーログに記録される。
------------------------------------------------------------------------------------------
いつもお世話になっております。

管理画面の「コンテンツ管理>ファイル管理」でフォルダ作成を作成する際に、ファイル名を指定して送信すると以下の警告が data/logs/error.log に記録されます。

2014/02/13 21:11:39 [/dev/eccube-2.13.1/html/admin/contents/file_manager.php] Warning(E_WARNING): preg_match(): Compilation failed: missing terminating ] for character class at offset 3 on [E:\Www\dev\eccube-2.13.1\data\class\SC_CheckError.php(854)] from ::1


原因は SC_CheckError::FILE_NAME_CHECK_BY_NOUPLOAD() 内で使われている '/[\\]/' という正規表現だと考えます。

この問題に対する修正パッチを作成致しましたので、
よろしければ取り込んで頂けないでしょうか?
お手数をおかけしますがご検討のほどよろしくお願いいたします。
Index: data/class/SC_CheckError.php
===================================================================
--- data/class/SC_CheckError.php	(リビジョン 23289)
+++ data/class/SC_CheckError.php	(作業コピー)
@@ -851,7 +851,7 @@
             return;
         }
         $this->createParam($value);
-        if (strlen($this->arrParam[$value[1]]) > 0 && !preg_match("/^[[:alnum:]_\.-]+$/i", $this->arrParam[$value[1]]) || preg_match('/[\\]/' ,$this->arrParam[$value[1]])) {
+        if (preg_match("/[^[:alnum:]_.\\-]/", $this->arrParam[$value[1]])) {
             $this->arrErr[$value[1]] = '※ ' . $value[0] . 'のファイル名に日本語やスペースは使用しないで下さい。<br />';
         }
     }


※追記
該当箇所の単体テストがありませんでしたので用意致しました。
Index: tests/class/SC_CheckError/SC_CheckError_FILE_NAME_CHECK_BY_NOUPLOADTest.php
===================================================================
--- tests/class/SC_CheckError/SC_CheckError_FILE_NAME_CHECK_BY_NOUPLOADTest.php	(revision 0)
+++ tests/class/SC_CheckError/SC_CheckError_FILE_NAME_CHECK_BY_NOUPLOADTest.php	(revision 0)
@@ -0,0 +1,76 @@
+<?php
+/*
+ * This file is part of EC-CUBE
+ *
+ * Copyright(c) 2000-2013 LOCKON CO.,LTD. All Rights Reserved.
+ *
+ * http://www.lockon.co.jp/
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+$HOME = realpath(dirname(__FILE__)) . "/../../..";
+require_once($HOME . "/tests/class/Common_TestCase.php");
+
+class SC_CheckError_FILE_NAME_CHECK_BY_NOUPLOADTest extends Common_TestCase
+{
+    public function testFILE_NAME_CHECK_BY_NOUPLOAD_空文字列の場合_エラーをセットしない()
+    {
+        $arrForm = array('file' => '');
+        $objErr = new SC_CheckError_Ex($arrForm);
+        $objErr->doFunc(array('label', 'file') ,array('FILE_NAME_CHECK_BY_NOUPLOAD'));
+
+        $this->expected = false;
+        $this->actual = isset($objErr->arrErr['file']);
+        $this->verify();
+    }
+
+    public function testFILE_NAME_CHECK_BY_NOUPLOAD_使用できない文字が含まれていない場合_エラーをセットしない()
+    {
+        $arrForm = array('file' => 'a_b-c.Z');
+        $objErr = new SC_CheckError_Ex($arrForm);
+        $objErr->doFunc(array('label', 'file') ,array('FILE_NAME_CHECK_BY_NOUPLOAD'));
+
+        $this->expected = false;
+        $this->actual = isset($objErr->arrErr['file']);
+        $this->verify();
+    }
+
+    public function testFILE_NAME_CHECK_BY_NOUPLOAD_使用できない文字が含まれている場合_エラーをセットする()
+    {
+        $arrForm = array('file' => 'a/b');
+        $objErr = new SC_CheckError_Ex($arrForm);
+        $objErr->doFunc(array('label', 'file') ,array('FILE_NAME_CHECK_BY_NOUPLOAD'));
+
+        $this->expected = '※ labelのファイル名に日本語やスペースは使用しないで下さい。<br />';
+        $this->actual = $objErr->arrErr['file'];
+        $this->verify();
+    }
+
+    /**
+     * @depends testFILE_NAME_CHECK_BY_NOUPLOAD_使用できない文字が含まれている場合_エラーをセットする
+     */
+    public function testFILE_NAME_CHECK_BY_NOUPLOAD_他のエラーが既にセットされている場合_エラーを上書きしない()
+    {
+        $arrForm = array('file' => 'a/b');
+        $objErr = new SC_CheckError_Ex($arrForm);
+        $objErr->arrErr['file'] = $other_error = 'Unknown error.';
+        $objErr->doFunc(array('label', 'file') ,array('FILE_NAME_CHECK_BY_NOUPLOAD'));
+
+        $this->expected = $other_error;
+        $this->actual = $objErr->arrErr['file'];
+        $this->verify();
+    }
+}


----------------
Seiji Nitta
zenith6@gmail.com
https://github.com/zenith6/

フラット表示 前のトピック | 次のトピック


題名 投稿者 日時
 » 管理画面でファイル名を入力した際に警告がエラーログに記録される snitta 2014/2/13 22:36
     Re: 管理画面でファイル名を入力した際に警告がエラーログに記録される red 2014/2/14 15:53
       Re: 管理画面でファイル名を入力した際に警告がエラーログに記録される snitta 2014/2/14 17:46
         Re: 管理画面でファイル名を入力した際に警告がエラーログに記録される red 2014/2/14 18:45
           Re: 管理画面でファイル名を入力した際に警告がエラーログに記録される snitta 2014/2/14 20:13
             Re: 管理画面でファイル名を入力した際に警告がエラーログに記録される red 2014/2/14 22:28
               Re: 管理画面でファイル名を入力した際に警告がエラーログに記録される snitta 2014/2/14 22:50

 



ログイン


EC-CUBEペイメント

公式ストアEC-CUBE4系デザインテンプレート続々リリース中

統計情報

総メンバー数は67,411名です
総投稿数は98,779件です

投稿数ランキング

1
seasoft
7333
2
AMUAMU
2712
3
468
2692
4
nanasess
2115
5
umebius
1788
6
yuh
1612
7
red
1427
8
h_tanaka
1051
9
fukap
907
10
tsuji
863
11
shutta
835
12
tao_s
792
13 ramrun 789
14 karin 657
15 sumida 641
16
homan
633
17 DELIGHT 571
18
patapata
502
19
flealog
485
20 tonton 437


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.