バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

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

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
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/

red
投稿日時: 2014/2/14 15:53
対応状況: −−−
登録日: 2010/2/15
居住地: 東京都
投稿: 1427
Re: 管理画面でファイル名を入力した際に警告がエラーログに記録される
ありがとうございます
テストを追加してコミットしました
Warningが問題ということだったので、PHPUnit_Framework_Error_Warningをつけておきました
http://svn.ec-cube.net/open_trac/changeset/23347

修正内容で間違いないことが確認出来ましたら、本体にコミットします


非公式にgithubにリポジトリを置いてますのでプルリクエストして頂ければそちらからも取り込めると思います
https://github.com/nobuhiko/EC-CUBE


----------------
EC-CUBEのカスタマイズ、トラブル解決承ります
お気軽にお問い合わせ下さい
https://www.ec-cube.net/integrate/partner/partner.php?partner_id=690

snitta
投稿日時: 2014/2/14 17:46
対応状況: −−−
一人前
登録日: 2013/10/3
居住地: 島根県
投稿: 100
Re: 管理画面でファイル名を入力した際に警告がエラーログに記録される
red様、早速のご対応大変ありがとうございます。

引用:
テストを追加してコミットしました
Warningが問題ということだったので、PHPUnit_Framework_Error_Warningをつけておきました
http://svn.ec-cube.net/open_trac/changeset/23347


チェックアウトして確認させて頂きました。
2点ほど修正orご確認をお願いいたします。

1. SC_CheckError::FILE_NAME_CHECK_BY_NOUPLOAD() に対するパッチが含まれていません(こっちがメインですw)。
2. 出るべきではない警告の修正が目的ですので @expectedException は不要ではないでしょうか?

引用:
非公式にgithubにリポジトリを置いてますのでプルリクエストして頂ければそちらからも取り込めると思います
https://github.com/nobuhiko/EC-CUBE

おお、次から利用させて頂きます!
今までnanasess様のリポジトリしか知りませんでしたが結構な方が自前で用意されてるんですね


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

red
投稿日時: 2014/2/14 18:45
対応状況: −−−
登録日: 2010/2/15
居住地: 東京都
投稿: 1427
Re: 管理画面でファイル名を入力した際に警告がエラーログに記録される
出るべきではない警告が出ていることをテストで明示したかったのですが、warningが出てなくてもテストが落ちてしまいますね
書き方を考えます
Failed asserting that exception of type "PHPUnit_Framework_Error_Warning" is thrown.


1. SC_CheckError::FILE_NAME_CHECK_BY_NOUPLOAD() に対するパッチが含まれていません(こっちがメインですw)。

こちらですが、下記が省略されているからなんでだろうな?という部分と、このテストだけだとファイル名に日本語やスペースが含まれている事がテストされていないと思うのでそこを確認してからコミットしますね
strlen($this->arrParam [$value[1]]) > 0



非公式は2人だけらしいです
もうsvnなんて使ってられないので。。


----------------
EC-CUBEのカスタマイズ、トラブル解決承ります
お気軽にお問い合わせ下さい
https://www.ec-cube.net/integrate/partner/partner.php?partner_id=690

snitta
投稿日時: 2014/2/14 20:13
対応状況: −−−
一人前
登録日: 2013/10/3
居住地: 島根県
投稿: 100
Re: 管理画面でファイル名を入力した際に警告がエラーログに記録される
ご確認ありがとうございます。
ご指摘いただいたテスト項目と省略部分を修正したパッチを用意いたしました。
こんな感じでどうでしょうか?
r23289ベース:
https://gist.github.com/zenith6/8999302
r23348ベース:
https://gist.github.com/zenith6/8999156

引用:
出るべきではない警告が出ていることをテストで明示したかったのですが、warningが出てなくてもテストが落ちてしまいますね
書き方を考えます
Failed asserting that exception of type "PHPUnit_Framework_Error_Warning" is thrown.

テスト対象の仕様として警告を出さないのであるならば、@expectedException PHPUnit_Framework_Error_Warning は指定すべきではないと思います。
E_WARNING が出た時は本来PHPUnitが教えてくれるのですがそれをEC-CUBEがハンドリングしているのが問題のような…?

引用:
もうsvnなんて使ってられないので。。

自分も3年ぶりに触ってパッチの作り方も忘れていました


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

red
投稿日時: 2014/2/14 22:28
対応状況: −−−
登録日: 2010/2/15
居住地: 東京都
投稿: 1427
Re: 管理画面でファイル名を入力した際に警告がエラーログに記録される
ありがとうございます
修正をコミットしました
http://svn.ec-cube.net/open_trac/changeset/23349

warningはPHPUnitに任せればやってくれるんですね、書き直したら上手く行きました〜


----------------
EC-CUBEのカスタマイズ、トラブル解決承ります
お気軽にお問い合わせ下さい
https://www.ec-cube.net/integrate/partner/partner.php?partner_id=690

snitta
投稿日時: 2014/2/14 22:50
対応状況: 解決済
一人前
登録日: 2013/10/3
居住地: 島根県
投稿: 100
Re: 管理画面でファイル名を入力した際に警告がエラーログに記録される
コミットありがとうございます。
テストが通り、警告も出ない事を確認できました。
これにて解決済みにマークさせて頂きます。

お時間を割いて頂き重ねてありがとうございました!


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

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBEペイメント

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

統計情報

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

投稿数ランキング

1
seasoft
7333
2
AMUAMU
2712
3
468
2696
4
nanasess
2116
5
umebius
1792
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.