OSDN Git Service

BugTrack/84 Limit page name length: 115 bytes(soft); 125 bytes(hard)
[pukiwiki/pukiwiki.git] / lib / link.php
index 67ccd9f..8ca3088 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 // PukiWiki - Yet another WikiWikiWeb clone
-// $Id: link.php,v 1.20 2011/01/25 15:01:01 henoheno Exp $
-// Copyright (C) 2003-2007 PukiWiki Developers Team
+// link.php
+// Copyright 2003-2022 PukiWiki Development Team
 // License: GPL v2 or (at your option) any later version
 //
 // Backlinks / AutoLinks related functions
@@ -72,6 +72,11 @@ function links_update($page)
 
                if (is_a($_obj, 'Link_autolink')) { // 行儀が悪い
                        $rel_auto[] = $_obj->name;
+               } else if (is_a($_obj, 'Link_autoalias')) {
+                       $_alias = get_autoalias_right_link($_obj->name);
+                       if (is_pagename($_alias)) {
+                               $rel_auto[] = $_alias;
+                       }
                } else {
                        $rel_new[]  = $_obj->name;
                }
@@ -149,14 +154,24 @@ function links_init()
                $links = links_get_objects($page);
                foreach ($links as $_obj) {
                        if (! isset($_obj->type) || $_obj->type != 'pagename' ||
-                           $_obj->name == $page || $_obj->name == '')
+                           $_obj->name == $page || $_obj->name == '') {
                                continue;
-
-                       $rel[] = $_obj->name;
-                       if (! isset($ref[$_obj->name][$page]))
-                               $ref[$_obj->name][$page] = 1;
-                       if (! is_a($_obj, 'Link_autolink'))
-                               $ref[$_obj->name][$page] = 0;
+                       }
+                       $_name = $_obj->name;
+                       if (is_a($_obj, 'Link_autoalias')) {
+                               $_alias = get_autoalias_right_link($_name);
+                               if (! is_pagename($_alias)) {
+                                       continue;       // not PageName
+                               }
+                               $_name = $_alias;
+                       }
+                       $rel[] = $_name;
+                       if (! isset($ref[$_name][$page])) {
+                               $ref[$_name][$page] = 1;
+                       }
+                       if (! is_a($_obj, 'Link_autolink')) {
+                               $ref[$_name][$page] = 0;
+                       }
                }
                $rel = array_unique($rel);
                if (! empty($rel)) {
@@ -196,6 +211,11 @@ function links_add($page, $add, $rel_auto)
                        }
                        unlink($ref_file);
                }
+               if (! $is_page) {
+                       if (! is_pagename_bytes_within_soft_limit($_page)) {
+                               continue;
+                       }
+               }
                if ($is_page || ! $all_auto) {
                        $fp = fopen($ref_file, 'w')
                                 or die_message('cannot write ' . htmlsc($ref_file));