User:Jiangxin/BugFix

From Meta, a Wikimedia project coordination wiki
Jump to: navigation, search

Contents

 __NUMBERHEADINGS__

Bug 361: URL inside a URL breaks parsing [edit]

Bug 361: URL inside a URL breaks parsing

This testcase in parserTests.txt not passed in MediaWiki 1.5.2:


!! test
External links: old URL-in-URL bug, mixed protocols
!! input
And again with mixed protocols: [ftp://example.com?url=http://example.com link]
!! result
<p>And again with mixed protocols: <a href="ftp://example.com?url=http://example.com" class='external text' title="ftp://example.com?url=http://example.com" rel="nofollow">link</a>
</p>
!!end

Fixed like this:


--- mediawiki-1.5.2/includes/Parser.php 2005-11-14 00:14:23.171875000 +0800
+++ mediawiki/includes/Parser.php       2005-11-13 17:32:23.562500000 +0800
@@ -1157,6 +1164,17 @@
                while ( $i < count( $bits ) ){
                        $protocol = $bits[$i++];
                        $remainder = $bits[$i++];
+                       /* Fix BUG 361: URL within URL. (by johnson@worldhello.net) */
+                       while ( !preg_match('/[\s]+$/', $remainder) ) {
+                               if( $i < count( $bits) )
+                               {
+                                       $remainder .= $bits[$i++];
+                               }
+                               else
+                               {
+                                       break;
+                               }                               
+                       }
 
                        if ( preg_match( '/^('.EXT_LINK_URL_CLASS.'+)(.*)$/s', $remainder, $m ) ) {
                                # Found some characters after the protocol that look promising

table_with_no_data [edit]

This testcase in parserTests.txt not passed in MediaWiki 1.5.2:


# This should not produce <table></table> as <table><tr><td></td></tr></table>
# is the bare minimun required by the spec, see:
# http://www.w3.org/TR/xhtml-modularization/dtd_module_defs.html#a_module_Basic_Tables
!! test
A table with no data.
!! input
{||}
!! result
!! end

Fixed like this:


--- mediawiki-1.5.2/includes/Parser.php 2005-11-14 00:16:44.359375000 +0800
+++ mediawiki/includes/Parser.php       2005-11-13 17:32:23.562500000 +0800
@@ -767,7 +767,14 @@
                {
                        if ( array_pop ( $td ) ) $t[] = '</td>' ;
                        if ( array_pop ( $tr ) ) $t[] = '</tr>' ;
-                       $t[] = '</table>' ;
+                       if ( stristr($t[count($t)-1], "<table") )
+                       {
+                               array_pop($t);
+                       }
+                       else
+                       {
+                               $t[] = '</table>' ;
+                       }
                }
 
                $t = implode ( "\n" , $t ) ;

Texvc works under Windows [edit]

for MediaWiki 1.6.x [edit]


Index: includes/Math.php
===================================================================
--- includes/Math.php   (revision 51)
+++ includes/Math.php   (working copy)
@@ -53,16 +53,35 @@
                        if( function_exists( 'is_executable' ) && !is_executable( $wgTexvc ) ) {
                                return $this->_error( 'math_notexvc' );
                        }
-                       $cmd = $wgTexvc . ' ' .
-                                       escapeshellarg( $wgTmpDirectory ).' '.
-                                       escapeshellarg( $wgTmpDirectory ).' '.
-                                       escapeshellarg( $this->tex ).' '.
+                       
+                       if ( wfIsWindows() ) {
+                               $dict_dir_from = array("\\");
+                               $dict_dir_to   = array("/");
+                               # NOTICE: escapeshellarg does not work in Windows/DOS prompt enviroment;
+                               # DOS escape char is ^. Command "echo |" should write as "echo ^|", and "echo ^" should be "echo ^^"
+                               $dict_math_from = array("^");
+                               $dict_math_to   = array("^^");
+                               
+                               $cmd = str_replace( $dict_dir_from, $dict_dir_to, $wgTexvc) . ' ' . 
+                                       escapeshellarg( str_replace( $dict_dir_from, $dict_dir_to, $wgTmpDirectory ) ).' '.
+                                       escapeshellarg( str_replace( $dict_dir_from, $dict_dir_to, $wgTmpDirectory ) ).' '.
+                                       escapeshellarg( str_replace( $dict_math_from,$dict_math_to,$this->tex ) ).' '.
                                        escapeshellarg( $wgInputEncoding );
 
-                       if ( wfIsWindows() ) {
                                # Invoke it within cygwin sh, because texvc expects sh features in its default shell
-                               $cmd = 'sh -c ' . wfEscapeShellArg( $cmd );
+                               # Windows has a command convert.exe which conflict with ImageMagick's. So add a PATH definition before $cmd;
+                               $cmd = "PATH=\"/sbin:/usr/sbin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:\$PATH\"; "
+                                       .$cmd;
+                               $cmd = 'sh -c ' . wfEscapeShellArg( $cmd );
                        }
+                       else
+                       {
+                               $cmd = $wgTexvc . ' ' .
+                                       escapeshellarg( $wgTmpDirectory ).' '.
+                                       escapeshellarg( $wgTmpDirectory ).' '.
+                                       escapeshellarg( $this->tex ).' '.
+                                       escapeshellarg( $wgInputEncoding );                                     
+                       } 
 
                        wfDebug( "TeX: $cmd\n" );
                        $contents = `$cmd`;

for MediaWiki 1.5.x [edit]


--- mediawiki-1.5.2/includes/Math.php   2005-11-13 17:00:37.234375000 +0800
+++ mediawiki/includes/Math.php 2005-11-13 17:32:23.328125000 +0800
@@ -60,15 +60,34 @@
                        if( function_exists( 'is_executable' ) && !is_executable( $wgTexvc ) ) {
                                return $this->_error( 'math_notexvc' );
                        }
-                       $cmd = $wgTexvc . ' ' . 
+                       
+                       if ( wfIsWindows() ) {
+                               $dict_dir_from = array("\\");
+                               $dict_dir_to   = array("/");
+                               # NOTICE: escapeshellarg does not work in Windows/DOS prompt enviroment;
+                               # DOS escape char is ^. Command "echo |" should write as "echo ^|", and "echo ^" should be "echo ^^"
+                               $dict_math_from = array("^");
+                               $dict_math_to   = array("^^");
+                               
+                               $cmd = str_replace( $dict_dir_from, $dict_dir_to, $wgTexvc) . ' ' . 
+                                       escapeshellarg( str_replace( $dict_dir_from, $dict_dir_to, $wgTmpDirectory ) ).' '.
+                                       escapeshellarg( str_replace( $dict_dir_from, $dict_dir_to, $wgMathDirectory ) ).' '.
+                                       escapeshellarg( str_replace( $dict_math_from,$dict_math_to,$this->tex ) ).' '.
+                                       escapeshellarg( $wgInputEncoding );
+
+                               # Invoke it within cygwin sh, because texvc expects sh features in its default shell
+                               # Windows has a command convert.exe which conflict with ImageMagick's. So add a PATH definition before $cmd;
+                               $cmd = "PATH=\"/sbin:/usr/sbin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:\$PATH\"; "
+                                       .$cmd;
+                               $cmd = 'sh -c ' . wfEscapeShellArg( $cmd );
+                       }
+                       else
+                       {
+                               $cmd = $wgTexvc . ' ' . 
                                        escapeshellarg( $wgTmpDirectory ).' '.
                                        escapeshellarg( $wgMathDirectory ).' '.
                                        escapeshellarg( $this->tex ).' '.
-                                       escapeshellarg( $wgInputEncoding );
-                                       
-                       if ( wfIsWindows() ) {
-                               # Invoke it within cygwin sh, because texvc expects sh features in its default shell
-                               $cmd = 'sh -c ' . wfEscapeShellArg( $cmd );
+                                       escapeshellarg( $wgInputEncoding );                                     
                        } 
 
                        wfDebug( "TeX: $cmd\n" );

SpecialPage order by key [edit]

In my chinese translation wiki, I don't like the way what SpecialSpecialpage shows.


--- mediawiki-1.5.2/includes/SpecialSpecialpages.php    2005-11-13 17:00:37.937500000 +0800
+++ mediawiki/includes/SpecialSpecialpages.php  2005-11-13 17:32:24.234375000 +0800
@@ -58,7 +58,7 @@
        
        /** Sort */
        if ( $wgSortSpecialPages ) {
-               ksort( $sortedPages );
+               asort( $sortedPages );
        }
 
        /** Now output the HTML */

list without listitems [edit]

Synopsis List without real content means a line begins with "*","#",":", but nothing else. like

*subitem has no content
*****

It will be badly rendered.

  • subitem has no content

Bugfix:


Index: maintenance/parserTests.txt
===================================================================
RCS file: /user/jiangxin/project/wiki/mediawiki/src/maintenance/parserTests.txt,v
retrieving revision 1.11
diff -u -r1.11 parserTests.txt
--- maintenance/parserTests.txt 17 Nov 2005 08:51:25 -0000      1.11
+++ maintenance/parserTests.txt 26 Nov 2005 14:37:39 -0000
@@ -35,6 +35,63 @@
 ###
 
 !! test
+list without title, 1
+!! input
+#item
+##subitem1
+##
+##subitem3
+######
+!! result
+<ol><li>item
+<ol><li>subitem1
+</li><li>subitem3
+</li></ol>
+</li></ol>
+
+!! end
+
+!! test
+list without title, 2
+!! input
+######
+!! result
+!! end
+
+
+!! test
+list without title, 3
+!! input
+*item
+**
+**subitem2
+**subitem3
+*******
+
+#item
+##subitem1
+##
+##subitem3
+######
+
+end.
+!! result
+<ul><li>item
+<ul><li>subitem2
+</li><li>subitem3
+</li></ul>
+</li></ul>
+<ol><li>item
+<ol><li>subitem1
+</li><li>subitem3
+</li></ol>
+</li></ol>
+<p>end.
+</p>
+!! end
+
+
+!! test
 indent <pre> block test
 !! input
 #indent <pre> block
Index: includes/Parser.php
===================================================================
RCS file: /user/jiangxin/project/wiki/mediawiki/src/includes/Parser.php,v
retrieving revision 1.17
diff -u -r1.17 Parser.php
--- includes/Parser.php 25 Nov 2005 14:48:11 -0000      1.17
+++ includes/Parser.php 26 Nov 2005 14:38:20 -0000
@@ -1754,6 +1754,10 @@
 
                                # Bugfix 1115, 1581(3989): Newline as list item terminator is troublesome, by JiangXin (http://www.worldhello.net).
                                if ( $prefixLength > 0 ) {
+                                       if ( strlen($oLine) == $prefixLength ) {
+                                               $prefixLength = isset($pref2)? strlen($pref2) : 0;
+                                               continue;
+                                       }
                                        $firstline = true;
                                        $in_pre = false;
                                        for($i++; $oLine2 = $textLines[$i], $i < count($textLines); $i++) {



add default parameter support for Template (Mediawiki 1.6 may already support) [edit]

usage: See test cases in Index: maintenance/parserTests.txt in the following differs.

code:


Index: includes/Parser.php
===================================================================
RCS file: /user/jiangxin/project/wiki/mediawiki/src/includes/Parser.php,v
retrieving revision 1.19
diff -u -r1.19 Parser.php
--- includes/Parser.php 26 Nov 2005 14:40:35 -0000      1.19
+++ includes/Parser.php 27 Nov 2005 06:44:27 -0000
@@ -2092,7 +2092,7 @@
 
                if ( $this->mOutputType == OT_HTML || $this->mOutputType == OT_WIKI ) {
                        # Argument substitution
-                       $text = preg_replace_callback( "/{{{([$titleChars]*?)}}}/", array( &$this, 'argSubstitution' ), $text );
+                       $text = preg_replace_callback( "/{{{([$titleChars]*?)(?:(?:\|)([$titleChars]*))?}}}/", array( &$this, 'argSubstitution' ), $text );
                }
                # Template substitution
                $regex = '/(\\n|{)?{{(['.$titleChars.']*)(\\|.*?|)}}/s';
@@ -2534,7 +2534,16 @@
                $inputArgs = end( $this->mArgStack );
 
                if ( array_key_exists( $arg, $inputArgs ) ) {
-                       $text = $inputArgs[$arg];
+                       if ( empty($inputArgs[$arg]) )
+                       {
+                               if ( isset($matches[2]) ) {
+                                       $text = $matches[2];
+                               } else {
+                                       $text = $inputArgs[$arg];
+                               }
+                       } else {
+                               $text = $inputArgs[$arg];
+                       }
                }
 
                return $text;
Index: maintenance/parserTests.txt
===================================================================
RCS file: /user/jiangxin/project/wiki/mediawiki/src/maintenance/parserTests.txt,v
retrieving revision 1.12
diff -u -r1.12 parserTests.txt
--- maintenance/parserTests.txt 26 Nov 2005 14:40:35 -0000      1.12
+++ maintenance/parserTests.txt 27 Nov 2005 06:44:32 -0000
@@ -443,6 +443,40 @@
 </p>
 !! end
 
+!! article
+Template:param_with_default_test
+!! text
+This is a test template with parameter.
+* arg1: {{{1}}}
+* arg2: {{{2|arg2 has this default value}}}
+* arg3: {{{3|arg3 has this default value}}}
+* name: {{{name|r u jiangxin?}}}
+* gender:  {{{gender|girl or boy?}}}
+* age:  {{{age|put your age here...}}}
+* job:  {{{job}}}
+* salary:  {{{salary}}}
+
+!! endarticle
+
+!! test
+Template param_with_default_test
+!! input
+{{param_with_default_test|hi|2=|name=|age=MyAge|salary=Not tell you}}
+!! result
+<p>This is a test template with parameter.
+</p>
+<ul><li> arg1: hi
+</li><li> arg2: arg2 has this default value
+</li><li> arg3: {{{3|arg3 has this default value}}}
+</li><li> name: r u jiangxin?
+</li><li> gender:  {{{gender|girl or boy?}}}
+</li><li> age:  MyAge
+</li><li> job:  {{{job}}}
+</li><li> salary:  Not tell you
+</li></ul>
+
+!! end
+
 
 ###
 ### Basic tests

others [edit]