WordPress.org

Make WordPress Core

Ticket #3495: pingback.diff

File pingback.diff, 2.4 KB (added by ruckus, 7 years ago)

Patch against 2.0.6-RC1

  • xmlrpc.php

     
    11761176                $linea = strip_tags( $linea, '<a>' ); // just keep the tag we need 
    11771177 
    11781178                $p = explode( "\n\n", $linea ); 
    1179                  
    1180                 $sem_regexp_pb = "/(\\/|\\\|\*|\?|\+|\.|\^|\\$|\(|\)|\[|\]|\||\{|\})/"; 
    1181                 $sem_regexp_fix = "\\\\$1"; 
    1182                 $link = preg_replace( $sem_regexp_pb, $sem_regexp_fix, $pagelinkedfrom ); 
    1183                  
    1184                 $finished = false; 
     1179 
     1180                $preg_target = preg_quote($pagelinkedto); 
     1181 
    11851182                foreach ( $p as $para ) { 
    1186                         if ( $finished ) 
    1187                                 continue; 
    1188                         if ( strstr( $para, $pagelinkedto ) ) { 
    1189                                 $context = preg_replace( "/.*<a[^>]+".$link."[^>]*>([^>]+)<\/a>.*/", "$1", $para ); 
    1190                                 $excerpt = strip_tags( $para ); 
    1191                                 $excerpt = trim( $excerpt ); 
    1192                                 $use     = preg_quote( $context ); 
    1193                                 $excerpt = preg_replace("|.*?\s(.{0,100}$use.{0,100})\s|s", "$1", $excerpt); 
    1194                                 $finished = true; 
     1183                        if ( strpos($para, $pagelinkedto) !== false ) { // it exists, but is it a link? 
     1184                                preg_match("|<a[^>]+?".$preg_target."[^>]*>([^>]+?)</a>|", $para, $context); 
     1185 
     1186                                // If the URL isn't in a link context, keep looking 
     1187                                if ( empty($context) ) 
     1188                                        continue; 
     1189 
     1190                                // We're going to use this fake tag to mark the context in a bit 
     1191                                // the marker is needed in case the link text appears more than once in the paragraph 
     1192                                $excerpt = preg_replace('|\</?wpcontext\>|', '', $para); 
     1193 
     1194                                // prevent really long link text 
     1195                                if ( strlen($context[1]) > 100 ) 
     1196                                        $context[1] = substr($context[1], 0, 100) . '...'; 
     1197 
     1198                                $marker = '<wpcontext>'.$context[1].'</wpcontext>';    // set up our marker 
     1199                                $excerpt= str_replace($context[0], $marker, $excerpt); // swap out the link for our marker 
     1200                                $excerpt = strip_tags($excerpt, '<wpcontext>');        // strip all tags but our context marker 
     1201                                $excerpt = trim($excerpt); 
     1202                                $preg_marker = preg_quote($marker); 
     1203                                $excerpt = preg_replace("|.*?\s(.{0,100}$preg_marker.{0,100})\s.*|s", '$1', $excerpt); 
     1204                                $excerpt = strip_tags($excerpt); // YES, again, to remove the marker wrapper 
     1205                                break; 
    11951206                        } 
    11961207                } 
    11971208 
    1198                 if ( empty($context) ) // URL pattern not found 
     1209                if ( empty($context) ) // Link to target not found 
    11991210                        return new IXR_Error(17, 'The source URI does not contain a link to the target URI, and so cannot be used as a source.'); 
    12001211 
    12011212                $pagelinkedfrom = preg_replace('#&([^amp\;])#is', '&amp;$1', $pagelinkedfrom);