r2030 + bugfix: escape encoded log message array properly
authorDenis Ovsienko <infrastation@yandex.ru>
Sat, 5 Jul 2008 14:22:46 +0000 (14:22 +0000)
committerDenis Ovsienko <infrastation@yandex.ru>
Sat, 5 Jul 2008 14:22:46 +0000 (14:22 +0000)
+ tilde is now a legal separator in tag name
+ don't allow creating tags with lettercase-wise same names

inc/code.php
inc/config.php
inc/database.php
inc/functions.php
inc/ophandlers.php

index 124a254300db194f2edcbe5aed26f472065e62a8..c841c91d297ec8ca9a480b49db3cf5011319cd3f 100644 (file)
@@ -154,7 +154,7 @@ function getLexemsFromRackCode ($text)
                                                $ret[] = array ('type' => 'LEX_TAG', 'load' => $buffer);
                                                $newstate = 'ESOTSM';
                                                break;
-                                       case (mb_ereg ('[[:alnum:]\. _-]', $char) > 0):
+                                       case (mb_ereg ('[[:alnum:]\. _-~]', $char) > 0):
                                                $buffer .= $char;
                                                break;
                                        default:
@@ -185,7 +185,7 @@ function getLexemsFromRackCode ($text)
                                                $ret[] = array ('type' => 'LEX_PREDICATE', 'load' => $buffer);
                                                $newstate = 'ESOTSM';
                                                break;
-                                       case (mb_ereg ('[[:alnum:]\. _-]', $char) > 0):
+                                       case (mb_ereg ('[[:alnum:]\. _-~]', $char) > 0):
                                                $buffer .= $char;
                                                break;
                                        default:
index 03ce4e1781e17dbbf88f9bd0f4bc110a5f712670..99e287e458713eb2ca06f53a472455a2f6364022 100644 (file)
@@ -17,8 +17,8 @@ define ('CODE_VERSION', '0.16.0');
 // in the database. I think, we are happy with this one forever.
 define ('PASSWORD_HASH', 'sha1');
 
-define ('TAGNAME_REGEXP', '^[[:alnum:]]([\. _-]?[[:alnum:]])*$');
-define ('AUTOTAGNAME_REGEXP', '^\$[[:alnum:]]([\. _-]?[[:alnum:]])*$');
+define ('TAGNAME_REGEXP', '^[[:alnum:]]([\. _-~]?[[:alnum:]])*$');
+define ('AUTOTAGNAME_REGEXP', '^\$[[:alnum:]]([\. _-~]?[[:alnum:]])*$');
 
 function getConfigVar ($varname = '')
 {
index 2806e536e7fe93cba32c524cc2d2cfe0abf2bb97..b4c298f2bf7ac61f1e0ff49668cff97f7e84a3a4 100644 (file)
@@ -2818,4 +2818,14 @@ function objectIsPortless ($id = 0)
        return $count === '0';
 }
 
+function tagExistsInDatabase ($tname)
+{
+       $result = useSelectBlade ("select count(*) from TagTree where lower(tag) = lower('${tname}')");
+       $row = $result->fetch (PDO::FETCH_NUM);
+       $count = $row[0];
+       $result->closeCursor();
+       unset ($result);
+       return $count !== '0';
+}
+
 ?>
index 64fceb59ee0373f8b307e47e029c00e17f48feab..288c3c1295854444958c337432954b1c60a28915 100644 (file)
@@ -1552,7 +1552,7 @@ function buildWideRedirectURL ($log, $p = NULL, $t = NULL)
        $url = "${root}?page=${pageno}&tab=${tabno}";
        if (isset ($page[$pageno]['bypass']))
                $url .= '&' . $page[$pageno]['bypass'] . '=' . $_REQUEST[$page[$pageno]['bypass']];
-       $url .= "&log=" . base64_encode (serialize ($log));
+       $url .= "&log=" . urlencode (base64_encode (serialize ($log)));
        return $url;
 }
 
index 30ab603d9beb3291c663c3583aeea8a912277c00..f986ac0853dcec31bd90f29c4612fd7d70af2fa2 100644 (file)
@@ -1268,6 +1268,8 @@ function createTag ()
        $tagname = trim ($_REQUEST['tag_name']);
        if (!validTagName ($tagname))
                return buildRedirectURL_ERR ("Invalid tag name '${tagname}'");
+       if (tagExistsInDatabase ($tagname))
+               return buildRedirectURL_ERR ("Tag '${tagname}' (or similar name) already exists");
        if (($parent_id = $_REQUEST['parent_id']) <= 0)
                $parent_id = 'NULL';
        if (($ret = commitCreateTag ($tagname, $parent_id)) == '')