diff --git a/core/imageboard.pack.php b/core/imageboard.pack.php
index a11c1620..8b81812a 100644
--- a/core/imageboard.pack.php
+++ b/core/imageboard.pack.php
@@ -665,14 +665,10 @@ class Image {
}
}
else {
- $term = str_replace("*", "%", $term);
- $term = str_replace("?", "_", $term);
- if(!preg_match("/^[%_]+$/", $term)) {
- $expansions = Tag::resolve_wildcard($term);
- if($positive) $positive_tag_count++;
- foreach($expansions as $term) {
- $tag_querylets[] = new TagQuerylet($term, $positive);
- }
+ $expansions = Tag::resolve_wildcard($term);
+ if($expansions && $positive) $positive_tag_count++;
+ foreach($expansions as $term) {
+ $tag_querylets[] = new TagQuerylet($term, $positive);
}
}
}
@@ -1024,12 +1020,22 @@ class Tag {
}
public static function resolve_wildcard($tag) {
- if(strpos($tag, "%") === false && strpos($tag, "_") === false) {
+ // if there is no wildcard, return the tag
+ if(strpos($tag, "*") === false) {
return array($tag);
}
+
+ // if the whole match is wild, return null to save the database
+ else if(str_replace("*", "", $tag) == "") {
+ return array();
+ }
+
+ // else find some matches
else {
global $database;
- $newtags = $database->get_col("SELECT tag FROM tags WHERE tag LIKE ?", array($tag));
+ $db_wild_tag = str_replace("%", "\%", $tag);
+ $db_wild_tag = str_replace("*", "%", $tag);
+ $newtags = $database->get_col($database->scoreql_to_sql("SELECT tag FROM tags WHERE SCORE_STRNORM(tag) LIKE SCORE_STRNORM(?)"), array($db_wild_tag));
if(count($newtags) > 0) {
$resolved = $newtags;
} else {
diff --git a/ext/alias_editor/main.php b/ext/alias_editor/main.php
index 7ba38656..4ef4e565 100644
--- a/ext/alias_editor/main.php
+++ b/ext/alias_editor/main.php
@@ -108,6 +108,9 @@ class AliasEditor extends Extension {
if($database->get_row("SELECT * FROM aliases WHERE oldtag=:oldtag AND lower(newtag)=lower(:newtag)", $pair)) {
throw new AddAliasException("That alias already exists");
}
+ else if($database->get_row("SELECT * FROM aliases WHERE oldtag=:newtag", array("newtag" => $event->newtag))) {
+ throw new AddAliasException("{$event->newtag} is itself an alias");
+ }
else {
$database->execute("INSERT INTO aliases(oldtag, newtag) VALUES(:oldtag, :newtag)", $pair);
log_info("alias_editor", "Added alias for {$event->oldtag} -> {$event->newtag}", true);
diff --git a/ext/user/theme.php b/ext/user/theme.php
index f129d284..2f0c0363 100644
--- a/ext/user/theme.php
+++ b/ext/user/theme.php
@@ -146,7 +146,7 @@ class UserPageTheme extends Themelet {
$page->set_title(html_escape($duser->name)."'s Page");
$page->set_heading(html_escape($duser->name)."'s Page");
$page->add_block(new NavBlock());
- $page->add_block(new Block("Stats", join("
", $stats), "main", 0));
+ $page->add_block(new Block("Stats", join("
", $stats), "main", 10));
if(!$user->is_anonymous()) {
if($user->id == $duser->id || $user->can("edit_user_info")) {