r2559 - commitReplaceFile(): use $sic, hence a prepared statement is employed
authorDenis Ovsienko <infrastation@yandex.ru>
Thu, 19 Mar 2009 14:15:42 +0000 (14:15 +0000)
committerDenis Ovsienko <infrastation@yandex.ru>
Thu, 19 Mar 2009 14:15:42 +0000 (14:15 +0000)
 - updateFileText(): use commitReplaceFile()
 - replaceFile(): idem
 - drop temp function commitUpdateFileText()
 - dos2unix(): introduce and use new helper
 - $sic: always translate newlines
 - deleteFile(): fetch deleted file name from DB, not from URL
 - employ htmlspecialchars() in functions, which display data returned by getFileInfo() and getFile()

inc/database.php
inc/functions.php
inc/init.php
inc/interface.php
inc/ophandlers.php
inc/pagetitles.php

index 47f1cf8e74cc990f1f6957eedd5648b508438a29..ec7a4e9a043396c23052f02d28eeaffcb84e4176 100644 (file)
@@ -3797,21 +3797,18 @@ function commitLinkFile ($file_id, $entity_type, $entity_id)
                return 'commitLinkFile: SQL query failed';
 }
 
-function commitReplaceFile ($file_id = 0, $size, $contents)
+function commitReplaceFile ($file_id = 0, $contents)
 {
        if ($file_id == 0)
        {
                showError ('Not all required args are present.', __FUNCTION__);
                return FALSE;
        }
-       $now = date('YmdHis');
 
        global $dbxlink;
-       $query = $dbxlink->prepare('UPDATE File SET size= ?, mtime = ?, contents = ? WHERE id = ?');
-       $query->bindParam(1, $size);
-       $query->bindParam(2, $now);
-       $query->bindParam(3, $contents, PDO::PARAM_LOB);
-       $query->bindParam(4, $file_id);
+       $query = $dbxlink->prepare('UPDATE File SET mtime = NOW(), contents = ?, size = LENGTH(contents) WHERE id = ?');
+       $query->bindParam(1, $contents, PDO::PARAM_LOB);
+       $query->bindParam(2, $file_id);
 
        $result = $query->execute();
        if (!$result)
@@ -3842,17 +3839,6 @@ function commitUpdateFile ($file_id = 0, $new_name = '', $new_type = '', $new_co
        return '';
 }
 
-// This is a temporary copy of commitReplaceFile() to work around escaping issues.
-function commitUpdateFileText ($file_id = 0, $newtext = '')
-{
-       if ($file_id <= 0)
-               return 'Invalid key in ' . __FUNCTION__;
-
-       global $dbxlink;
-       $query = "UPDATE File SET mtime = NOW(), contents = '${newtext}', size = LENGTH(contents) WHERE id = ${file_id} limit 1";
-       return (FALSE === $dbxlink->exec ($query)) ? ('SQL query failed in ' . __FUNCTION__) : '';
-}
-
 function commitUnlinkFile ($link_id)
 {
        if (useDeleteBlade ('FileLink', 'id', $link_id) != TRUE)
index 854f360311012030a200b76b148762a3a38cd48c..dabddbb8310fbcc5eeeff059a92d9b5b47831475 100644 (file)
@@ -1914,4 +1914,9 @@ function cookOptgroups ($recordList, $object_type_id = 0, $existing_value = 0)
        return $ret;
 }
 
+function dos2unix ($text)
+{
+       return str_replace ("\r\n", "\n", $text);
+}
+
 ?>
index 9336c5b3a3678f628539c10d24e8cdf1f4de3f8e..a9e93235dbf41382569a75c05974791c43ab5f79 100644 (file)
@@ -62,10 +62,13 @@ if (!set_magic_quotes_runtime (0))
 }
 
 // Escape any globals before we ever try to use them, but keep a copy of originals.
-$sic = $_REQUEST;
+$sic = array();
 foreach ($_REQUEST as $key => $value)
+{
+       $sic[$key] = dos2unix ($value);
        if (gettype ($value) == 'string')
-               $_REQUEST[$key] = escapeString ($value);
+               $_REQUEST[$key] = escapeString (dos2unix ($value));
+}
 
 if (isset ($_SERVER['PHP_AUTH_USER']))
        $_SERVER['PHP_AUTH_USER'] = escapeString ($_SERVER['PHP_AUTH_USER']);
index cdb929f03c2799bf22364338817efd21a4c89a34..81d232b6db63033a474eac361cc37153cd2f9beb 100644 (file)
@@ -5504,12 +5504,12 @@ function renderFile ($file_id = 0)
                return;
        }
        echo "<table border=0 class=objectview cellspacing=0 cellpadding=0>";
-       echo "<tr><td colspan=2 align=center><h1>${file['name']}</h1></td></tr>\n";
+       echo "<tr><td colspan=2 align=center><h1>" . htmlspecialchars ($file['name']) . "</h1></td></tr>\n";
        echo "<tr><td class=pcleft>";
        startPortlet ('summary');
        echo "<table border=0 cellspacing=0 cellpadding=3 width='100%'>\n";
        echo "<tr><th width='50%' class=tdright>Type:</th>";
-       printf("<td class=tdleft>%s</td></tr>", $file['type']);
+       printf("<td class=tdleft>%s</td></tr>", htmlspecialchars ($file['type']));
        echo "<tr><th width='50%' class=tdright>Size:</th>";
        printf("<td class=tdleft>%s</td></tr>", formatFileSize($file['size']));
        echo "<tr><th width='50%' class=tdright>Created:</th>";
@@ -5534,7 +5534,7 @@ function renderFile ($file_id = 0)
        if (!empty ($file['comment']))
        {
                echo '<tr><th class=slbconf>Comment:</th><td>&nbsp;</td></tr>';
-               echo '<tr><td colspan=2 class="dashed slbconf">' . string_insert_hrefs ($file['comment']) . '</td></tr>';
+               echo '<tr><td colspan=2 class="dashed slbconf">' . string_insert_hrefs (htmlspecialchars ($file['comment'])) . '</td></tr>';
        }
        echo "</table><br>\n";
        finishPortlet();
@@ -5596,9 +5596,12 @@ function renderFileProperties ($file_id = 0)
        showMessageOrError();
        echo '<table border=0 align=center>';
        printOpFormIntro ('updateFile');
-       echo "<tr><th class=tdright>MIME-type:</th><td class=tdleft><input tabindex=101 type=text name=file_type value='${file['type']}'></td></tr>";
-       echo "<tr><th class=tdright>Filename:</th><td class=tdleft><input tabindex=102 type=text name=file_name value='${file['name']}'></td></tr>\n";
-       echo "<tr><th class=tdright>Comment:</th><td class=tdleft><textarea tabindex=103 name=file_comment rows=10 cols=80>${file['comment']}</textarea></td></tr>\n";
+       echo "<tr><th class=tdright>MIME-type:</th><td class=tdleft><input tabindex=101 type=text name=file_type value='";
+       echo htmlspecialchars ($file['type']) . "'></td></tr>";
+       echo "<tr><th class=tdright>Filename:</th><td class=tdleft><input tabindex=102 type=text name=file_name value='";
+       echo htmlspecialchars ($file['name']) . "'></td></tr>\n";
+       echo "<tr><th class=tdright>Comment:</th><td class=tdleft><textarea tabindex=103 name=file_comment rows=10 cols=80>\n";
+       echo htmlspecialchars ($file['comment']) . "</textarea></td></tr>\n";
        echo "<tr><th class=submit colspan=2>";
        printImageHREF ('SAVE', 'Save changes', TRUE, 102);
        echo '</th></tr></form></table>';
@@ -5778,7 +5781,7 @@ function renderFilesForEntity ($entity_id = 0)
                        echo "</td><td class=tdleft>${file['comment']}</td><td class=tdleft>";
                        echo "<a href='".makeHrefProcess(array('op'=>'unlinkFile', 'link_id'=>$file['link_id'], $id_name=>$entity_id, 'name'=>$file['name']))."'>";
                        printImageHREF ('CUT', 'Unlink file');
-                       echo "</a> <a href='".makeHrefProcess(array('op'=>'deleteFile', 'file_id'=>$file_id, $id_name=>$entity_id, 'name'=>$file['name']))."'>";
+                       echo "</a> <a href='".makeHrefProcess(array('op'=>'deleteFile', 'file_id'=>$file_id, $id_name=>$entity_id))."'>";
                        printImageHREF ('DESTROY', 'Unlink and delete file');
                        echo "</a></td></tr>\n";
                }
@@ -6038,7 +6041,7 @@ function getFilePreviewCode ($file)
                                $file = getFile ($file['id']);
                                $ret .= '<textarea readonly rows=' . getConfigVar ('PREVIEW_TEXT_ROWS');
                                $ret .= ' cols=' . getConfigVar ('PREVIEW_TEXT_COLS') . '>';
-                               $ret .= $file['contents'];
+                               $ret .= htmlspecialchars ($file['contents']);
                                $ret .= '</textarea>';
                        }
                        break;
@@ -6061,7 +6064,7 @@ function renderTextEditor ($file_id)
                $syntax = "text";
        echo '<table border=0 align=center>';
        echo "<tr><td><textarea rows=45 cols=180 id=file_text name=file_text tabindex=101 class='codepress " . $syntax . "'>\n";
-       echo $fullInfo['contents'] . '</textarea></td></tr>';
+       echo htmlspecialchars ($fullInfo['contents']) . '</textarea></td></tr>';
        echo "<tr><td class=submit><input type=submit value='Save' onclick='file_text.toggleEditor();'>";
        echo "</td></tr>\n</table></form>\n";
 }
index aa6347ebfcb77c2473f661bd238a8ad411c051d5..40aa1fa53a466a1bbf041c7169b86d38d597fcca 100644 (file)
@@ -1692,7 +1692,8 @@ function replaceFile ()
                return buildRedirectURL (__FUNCTION__, 'ERR', array ("file uploads not allowed, change 'file_uploads' parameter in php.ini"));
 
        $fp = fopen($_FILES['file']['tmp_name'], 'rb');
-       $error = commitReplaceFile ($_REQUEST['file_id'], $_FILES['file']['size'], $fp);
+       global $sic;
+       $error = commitReplaceFile ($sic['file_id'], $fp);
        if ($error != '')
                return buildRedirectURL (__FUNCTION__, 'ERR', array ($error));
 
@@ -1728,12 +1729,13 @@ function unlinkFile ()
 function deleteFile ()
 {
        assertUIntArg ('file_id', __FUNCTION__);
+       $shortInfo = getFileInfo ($_REQUEST['file_id']);
        $error = commitDeleteFile ($_REQUEST['file_id']);
 
        if ($error != '')
                return buildRedirectURL (__FUNCTION__, 'ERR', array ($error));
 
-       return buildRedirectURL (__FUNCTION__, 'OK', array ($_REQUEST['name']));
+       return buildRedirectURL (__FUNCTION__, 'OK', array (htmlspecialchars ($shortInfo['name'])));
 }
 
 function updateFileText ()
@@ -1744,9 +1746,10 @@ function updateFileText ()
        $shortInfo = getFileInfo ($_REQUEST['file_id']);
        if ($shortInfo['mtime'] != $_REQUEST['mtime_copy'])
                return buildRedirectURL (__FUNCTION__, 'ERR1');
-       $error = commitUpdateFileText ($_REQUEST['file_id'], $_REQUEST['file_text']);
+       global $sic;
+       $error = commitReplaceFile ($sic['file_id'], $sic['file_text']);
        if ($error == '')
-               return buildRedirectURL (__FUNCTION__, 'OK', array ($shortInfo['name']));
+               return buildRedirectURL (__FUNCTION__, 'OK', array (htmlspecialchars ($shortInfo['name'])));
        return buildRedirectURL (__FUNCTION__, 'ERR2');
 }
 
index d5461951ebf0d36ae2d42fe52e4e4ec350786abc..74044362a3eec232d5921b32d2dd9968decc2350 100644 (file)
@@ -208,7 +208,7 @@ function dynamic_title_file ()
                                showError ('getFileInfo() failed', __FUNCTION__);
                                return NULL;
                        }
-                       $ret['name'] = $file['name'];
+                       $ret['name'] = htmlspecialchars ($file['name']);
                        $ret['params']['file_id'] = $_REQUEST['file_id'];
                        break;
                case 'filesbylink':