Index: /branches/version-2_12-dev/data/class/SC_FormParam.php
===================================================================
--- /branches/version-2_12-dev/data/class/SC_FormParam.php	(revision 22796)
+++ /branches/version-2_12-dev/data/class/SC_FormParam.php	(revision 22891)
@@ -277,6 +277,6 @@
             }
         } else {
-            $objErr = new SC_CheckError_Ex(array(0 => $value));
-            $objErr->doFunc(array($disp_name, 0, $length), array($func));
+            $objErr = new SC_CheckError_Ex(array(($error_last_key ? $error_last_key : $error_key) => $value));
+            $objErr->doFunc(array($disp_name, ($error_last_key ? $error_last_key : $error_key), $length), array($func));
             if (!SC_Utils_Ex::isBlank($objErr->arrErr)) {
                 foreach ($objErr->arrErr as $message) {
Index: /branches/version-2_12-dev/data/class/SC_CheckError.php
===================================================================
--- /branches/version-2_12-dev/data/class/SC_CheckError.php	(revision 22876)
+++ /branches/version-2_12-dev/data/class/SC_CheckError.php	(revision 22891)
@@ -104,5 +104,5 @@
             return;
         }
-        $this->createParam($value);
+        // $this->createParam($value);
         if (strlen($this->arrParam[$value[0]]) == 0) {
             $this->arrErr[$value[0]] = '※ ' . $value[0] . 'が入力されていません。<br />';
@@ -183,5 +183,5 @@
             return;
         }
-        $this->createParam($value);
+        // $this->createParam($value);
         // 文字数の取得
         if ($this->arrParam[$value[2]] !== $this->arrParam[$value[3]]) {
@@ -201,5 +201,5 @@
             return;
         }
-        $this->createParam($value);
+        // $this->createParam($value);
         // 文字数の取得
         if ($this->arrParam[$value[2]] == $this->arrParam[$value[3]]) {
@@ -219,5 +219,5 @@
             return;
         }
-        $this->createParam($value);
+        // $this->createParam($value);
         // 文字数の取得
         if ($this->arrParam[$value[2]] != '' && $this->arrParam[$value[3]] != '' && ($this->arrParam[$value[2]] > $this->arrParam[$value[3]])) {
@@ -930,5 +930,5 @@
             return;
         }
-        $this->createParam($value);
+        // $this->createParam($value);
         if ((strlen($this->arrParam[$value[2]]) > 0 || strlen($this->arrParam[$value[3]]) > 0 || strlen($this->arrParam[$value[4]]) > 0) && ! checkdate($this->arrParam[$value[3]], $this->arrParam[$value[4]], $this->arrParam[$value[2]])) {
             $this->arrErr[$value[2]] = '※ ' . $value[0] . 'を正しく指定してください。<br />';
@@ -980,5 +980,5 @@
             return;
         }
-        $this->createParam($value);
+        // $this->createParam($value);
         if ((strlen($this->arrParam[$value[2]]) > 0 || strlen($this->arrParam[$value[3]]) > 0 || strlen($this->arrParam[$value[4]]) > 0 || strlen($this->arrParam[$value[5]]) > 0) && ! checkdate($this->arrParam[$value[3]], $this->arrParam[$value[4]], $this->arrParam[$value[2]])) {
             $this->arrErr[$value[2]] = '※ ' . $value[0] . 'を正しく指定してください。<br />';
@@ -1023,5 +1023,5 @@
             return;
         }
-        $this->createParam($value);
+        // $this->createParam($value);
         if ((strlen($this->arrParam[$value[2]]) > 0 || strlen($this->arrParam[$value[3]]) > 0) && ! checkdate($this->arrParam[$value[3]], 1, $this->arrParam[$value[2]])) {
             $this->arrErr[$value[2]] = '※ ' . $value[0] . 'を正しく指定してください。<br />';
@@ -1135,5 +1135,5 @@
             return;
         }
-        $this->createParam($value);
+        // $this->createParam($value);
         if ($this->evalCheck($value[1]) === false) {
             $this->arrErr[$value[0]] = '※ ' . $value[0] . ' の形式が不正です。<br />';
@@ -1164,9 +1164,18 @@
      */
     function createParam($value) {
-        foreach ($value as $key) {
-            if (is_string($key) || is_int($key)) {
-                if (!isset($this->arrParam[$key]))  $this->arrParam[$key] = '';
-            }
-        }
+         foreach ($value as $val_key => $key) {
+             if ($val_key != 0 && (is_string($key) || is_int($key))) {
+                 if (!is_numeric($key) && preg_match('/^[a-z0-9_]+$/i', $key)) {
+                     if (!isset($this->arrParam[$key])) $this->arrParam[$key] = '';
+                     if (strlen($this->arrParam[$key]) > 0
+                           && (preg_match('/^[[:alnum:]\-\_]*[\.\/\\\\]*\.\.(\/|\\\\)/',$this->arrParam[$key]) || !preg_match('/\A[^\x00-\x08\x0b\x0c\x0e-\x1f\x7f]+\z/u', $this->arrParam[$key])))
+                           ) {
+                         $this->arrErr[$value[1]] = '※ ' . $value[0] . 'に禁止された記号の並びまたは制御文字が入っています。<br />';
+                     }
+                 } else if (preg_match('/[^a-z0-9_]/i', $key)) {
+                     trigger_error('', E_USER_ERROR);
+                 }
+             }
+         }
     }
 
