OSDN Git Service

BugTrack/84 Limit page name length: 115 bytes(soft); 125 bytes(hard)
[pukiwiki/pukiwiki.git] / plugin / edit.inc.php
index 2a9559c..7021728 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 // PukiWiki - Yet another WikiWikiWeb clone.
 // edit.inc.php
-// Copyright 2001-2019 PukiWiki Development Team
+// Copyright 2001-2022 PukiWiki Development Team
 // License: GPL v2 or (at your option) any later version
 //
 // Edit plugin (cmd=edit)
@@ -31,13 +31,36 @@ function plugin_edit_action()
        } else if (isset($vars['cancel'])) {
                return plugin_edit_cancel();
        }
-
+       ensure_valid_page_name_length($page);
        $postdata = @join('', get_source($page));
        if ($postdata === '') $postdata = auto_template($page);
        $postdata = remove_author_info($postdata);
        return array('msg'=>$_title_edit, 'body'=>edit_form($page, $postdata));
 }
 
+function ensure_valid_page_name_length($page)
+{
+       if (is_page($page)) {
+               // Continue
+       } else {
+               if (is_pagename_bytes_within_soft_limit($page)) {
+                       // Continue
+               } else {
+                       if (page_exists_in_history($page)) {
+                               if (is_pagename_bytes_within_hard_limit($page)) {
+                                       // Continue
+                               } else {
+                                       die_message('Page name too long (hard limit): ' . htmlsc($page));
+                                       exit;
+                               }
+                       } else {
+                               die_message('Page name too long: ' . htmlsc($page));
+                               exit;
+                       }
+               }
+       }
+}
+
 /**
  * Preview with template
  */
@@ -203,6 +226,7 @@ function plugin_edit_write()
        $add    = isset($vars['add'])    ? $vars['add']    : '';
        $digest = isset($vars['digest']) ? $vars['digest'] : '';
 
+       ensure_valid_page_name_length($page);
        $vars['msg'] = preg_replace(PLUGIN_EDIT_FREEZE_REGEX, '', $vars['msg']);
        $msg = & $vars['msg']; // Reference