[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 メーリングリストの案内