[Svn-src-all:2687] [version-2_12-dev 21586] #1684 (PHPの言語特性に合わせた簡素な実装に改善する)

Seasoft admin @ mail.ec-cube.net
2012年 3月 4日 (日) 16:34:48 JST


Subversion committed to /home/svn/open 21586
http://svn.ec-cube.net/open_trac/changeset/21586
┌────────────────────────────┐
│更新者 :  Seasoft                                      │
│更新日時:  2012-03-04 16:34:48 +0900 (日, 04  3月 2012)│
└────────────────────────────┘

Log:
--------------------------------------------------------
#1684 (PHPの言語特性に合わせた簡素な実装に改善する)
#1685 (SC_CheckError#FILE_EXT_CHECK ファイル名を送出しないとすり抜けの懸念)

Changed:                      [U:修正,A:追加,D:削除]
--------------------------------------------------------
U   branches/version-2_12-dev/data/class/SC_CheckError.php
U   branches/version-2_12-dev/data/class/pages/admin/products/LC_Page_Admin_Products_ProductClass.php

変更: branches/version-2_12-dev/data/class/SC_CheckError.php
===================================================================
--- branches/version-2_12-dev/data/class/SC_CheckError.php	2012-03-04 06:15:20 UTC (rev 21585)
+++ branches/version-2_12-dev/data/class/SC_CheckError.php	2012-03-04 07:34:48 UTC (rev 21586)
@@ -718,42 +718,20 @@
         }
         $this->createParam($value);
 
-        if ($_FILES[$value[1]]['name'] != '') {
-            $errFlag = 1;
-            $array_ext = explode('.', $_FILES[$value[1]]['name']);
+        $match = false;
+        if (strlen($_FILES[$value[1]]['name']) >= 1) {
+            $filename = $_FILES[$value[1]]['name'];
 
-            $strExt = '';
-
-            foreach ($value[2] as $checkExt) {
-                $ext = '';
-
-                // チェック拡張子のピリオドの数を取得('tar.gz'の場合1個、'jpg'のように通常は0個)
-                $count_period = substr_count($checkExt, '.');
-
-                if ($count_period > 0) {
-                    for ($i = max(array_keys($array_ext)) - $count_period; $i < count($array_ext); $i++) {
-                        $ext .= $array_ext[$i] . '.';
-                    }
-                    $ext = preg_replace("/.$/", "" ,$ext);
-                } else {
-                    $ext = $array_ext[ count ($array_ext) - 1 ];
+            foreach ($value[2] as $check_ext) {
+                $match = preg_match('/' . preg_quote('.' . $check_ext) . '$/i', $filename) >= 1;
+                if ($match === true) {
+                    break 1;
                 }
-
-                $ext = strtolower($ext);
-
-                if ($ext == $checkExt) {
-                    $errFlag = 0;
-                }
-
-                if ($strExt == '') {
-                    $strExt.= $checkExt;
-                } else {
-                    $strExt.= "・$checkExt";
-                }
             }
         }
-        if ($errFlag == 1) {
-            $this->arrErr[$value[1]] = '※ ' . $value[0] . 'で許可されている形式は、' . $strExt . 'です。<br />';
+        if ($match === false) {
+            $str_ext = implode('・', $value[2]);
+            $this->arrErr[$value[1]] = '※ ' . $value[0] . 'で許可されている形式は、' . $str_ext . 'です。<br />';
         }
     }
 

変更: branches/version-2_12-dev/data/class/pages/admin/products/LC_Page_Admin_Products_ProductClass.php
===================================================================
--- branches/version-2_12-dev/data/class/pages/admin/products/LC_Page_Admin_Products_ProductClass.php	2012-03-04 06:15:20 UTC (rev 21585)
+++ branches/version-2_12-dev/data/class/pages/admin/products/LC_Page_Admin_Products_ProductClass.php	2012-03-04 07:34:48 UTC (rev 21586)
@@ -571,36 +571,29 @@
             }
             $this->arrErr['down_realfilename'][$index] = '※ ダウンロード販売用ファイル名のファイルサイズは' . $size . $byte . '以下のものを使用してください。<br />';
         } else {
-            $array_ext = explode('.', $_FILES['down_realfilename']['name'][$index]);
-            $is_error = true;
-            $strExt = '';
+            // SC_CheckError::FILE_EXT_CHECK とのソース互換を強めるための配列
+            $value = array(
+                0 => 'ダウンロード販売用ファイル名',
+                1 => 'down_realfilename',
+                2 => explode(',', DOWNLOAD_EXTENSION),
+            );
+            // ▼SC_CheckError::FILE_EXT_CHECK から移植
+            $match = false;
+            if (strlen($_FILES[$value[1]]['name'][$index]) >= 1) {
+                $filename = $_FILES[$value[1]]['name'][$index];
 
-            foreach (explode(',', DOWNLOAD_EXTENSION) as $checkExt) {
-                $ext = '';
-                // チェック拡張子のピリオドの数を取得('tar.gz'の場合1個、'jpg'のように通常は0個)
-                $count_period = substr_count($checkExt, '.');
-                if ($count_period > 0) {
-                    for ($i = max(array_keys($array_ext)) - $count_period; $i < count($array_ext); $i++) {
-                        $ext .= $array_ext[$i] . '.';
+                foreach ($value[2] as $check_ext) {
+                    $match = preg_match('/' . preg_quote('.' . $check_ext) . '$/i', $filename) >= 1;
+                    if ($match === true) {
+                        break 1;
                     }
-                    $ext = preg_replace("/.$/", "" ,$ext);
-                } else {
-                    $ext = $array_ext[ count ($array_ext) - 1 ];
                 }
-                $ext = strtolower($ext);
-
-                if ($ext == $checkExt) {
-                    $is_error = false;
-                }
-                if ($strExt == '') {
-                    $strExt .= $checkExt;
-                } else {
-                    $strExt .= "・$checkExt";
-                }
             }
-            if ($is_error) {
-                $this->arrErr['down_realfilename'][$index] = '※ ダウンロード販売用ファイル名で許可されている形式は、' . $strExt . 'です。<br />';
+            if ($match === false) {
+                $str_ext = implode('・', $value[2]);
+                $this->arrErr[$value[1]][$index] = '※ ' . $value[0] . 'で許可されている形式は、' . $str_ext . 'です。<br />';
             }
+            // ▲SC_CheckError::FILE_EXT_CHECK から移植
 
             $uniqname = date('mdHi') . '_' . uniqid('').'.';
             $temp_file = preg_replace("/^.*\./", $uniqname, $_FILES['down_realfilename']['name'][$index]);




Svn-src-all メーリングリストの案内