X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/8f374b7233bc2815ccc387e448d208c5434eb961..61343b82c4f0da4c68e4c6373daafff4a81efdd1:/wp-includes/class-wp.php?ds=sidebyside diff --git a/wp-includes/class-wp.php b/wp-includes/class-wp.php index 4f8bc358..dc776886 100644 --- a/wp-includes/class-wp.php +++ b/wp-includes/class-wp.php @@ -25,7 +25,7 @@ class WP { * @since 2.0.0 * @var array */ - var $private_query_vars = array('offset', 'posts_per_page', 'posts_per_archive_page', 'showposts', 'nopaging', 'post_type', 'post_status', 'category__in', 'category__not_in', 'category__and', 'tag__in', 'tag__not_in', 'tag__and', 'tag_slug__in', 'tag_slug__and', 'tag_id', 'post_mime_type', 'perm', 'comments_per_page', 'post__in', 'post__not_in'); + var $private_query_vars = array( 'offset', 'posts_per_page', 'posts_per_archive_page', 'showposts', 'nopaging', 'post_type', 'post_status', 'category__in', 'category__not_in', 'category__and', 'tag__in', 'tag__not_in', 'tag__and', 'tag_slug__in', 'tag_slug__and', 'tag_id', 'post_mime_type', 'perm', 'comments_per_page', 'post__in', 'post__not_in', 'post_parent__in', 'post_parent__not_in' ); /** * Extra query variables set by the user. @@ -120,6 +120,9 @@ class WP { function parse_request($extra_query_vars = '') { global $wp_rewrite; + if ( ! apply_filters( 'do_parse_request', true, $this, $extra_query_vars ) ) + return; + $this->query_vars = array(); $post_type_query_vars = array(); @@ -161,13 +164,13 @@ class WP { // requested permalink. $req_uri = str_replace($pathinfo, '', $req_uri); $req_uri = trim($req_uri, '/'); - $req_uri = preg_replace("|^$home_path|", '', $req_uri); + $req_uri = preg_replace("|^$home_path|i", '', $req_uri); $req_uri = trim($req_uri, '/'); $pathinfo = trim($pathinfo, '/'); - $pathinfo = preg_replace("|^$home_path|", '', $pathinfo); + $pathinfo = preg_replace("|^$home_path|i", '', $pathinfo); $pathinfo = trim($pathinfo, '/'); $self = trim($self, '/'); - $self = preg_replace("|^$home_path|", '', $self); + $self = preg_replace("|^$home_path|i", '', $self); $self = trim($self, '/'); // The requested permalink is in $pathinfo for path info requests and @@ -192,7 +195,7 @@ class WP { $query = $rewrite['$']; $matches = array(''); } - } else if ( $req_uri != 'wp-app.php' ) { + } else { foreach ( (array) $rewrite as $match => $query ) { // If the requesting file is the anchor of the match, prepend it to the path info. if ( ! empty($req_uri) && strpos($match, $req_uri) === 0 && $req_uri != $request ) @@ -226,16 +229,14 @@ class WP { // Parse the query. parse_str($query, $perma_query_vars); - // If we're processing a 404 request, clear the error var - // since we found something. - unset( $_GET['error'] ); - unset( $error ); + // If we're processing a 404 request, clear the error var since we found something. + if ( '404' == $error ) + unset( $error, $_GET['error'] ); } // If req_uri is empty or if it is a request for ourself, unset error. if ( empty($request) || $req_uri == $self || strpos($_SERVER['PHP_SELF'], 'wp-admin/') !== false ) { - unset( $_GET['error'] ); - unset( $error ); + unset( $error, $_GET['error'] ); if ( isset($perma_query_vars) && strpos($_SERVER['PHP_SELF'], 'wp-admin/') !== false ) unset( $perma_query_vars ); @@ -322,11 +323,15 @@ class WP { if ( is_user_logged_in() ) $headers = array_merge($headers, wp_get_nocache_headers()); - if ( !empty($this->query_vars['error']) && '404' == $this->query_vars['error'] ) { - $status = 404; - if ( !is_user_logged_in() ) - $headers = array_merge($headers, wp_get_nocache_headers()); - $headers['Content-Type'] = get_option('html_type') . '; charset=' . get_option('blog_charset'); + if ( ! empty( $this->query_vars['error'] ) ) { + $status = (int) $this->query_vars['error']; + if ( 404 === $status ) { + if ( ! is_user_logged_in() ) + $headers = array_merge($headers, wp_get_nocache_headers()); + $headers['Content-Type'] = get_option('html_type') . '; charset=' . get_option('blog_charset'); + } elseif ( in_array( $status, array( 403, 500, 502, 503 ) ) ) { + $exit_required = true; + } } else if ( empty($this->query_vars['feed']) ) { $headers['Content-Type'] = get_option('html_type') . '; charset=' . get_option('blog_charset'); } else { @@ -351,7 +356,7 @@ class WP { // Support for Conditional GET if (isset($_SERVER['HTTP_IF_NONE_MATCH'])) - $client_etag = stripslashes(stripslashes($_SERVER['HTTP_IF_NONE_MATCH'])); + $client_etag = wp_unslash( $_SERVER['HTTP_IF_NONE_MATCH'] ); else $client_etag = false; $client_last_modified = empty($_SERVER['HTTP_IF_MODIFIED_SINCE']) ? '' : trim($_SERVER['HTTP_IF_MODIFIED_SINCE']); @@ -373,6 +378,26 @@ class WP { if ( ! empty( $status ) ) status_header( $status ); + + // If Last-Modified is set to false, it should not be sent (no-cache situation). + if ( isset( $headers['Last-Modified'] ) && false === $headers['Last-Modified'] ) { + unset( $headers['Last-Modified'] ); + + // In PHP 5.3+, make sure we are not sending a Last-Modified header. + if ( function_exists( 'header_remove' ) ) { + @header_remove( 'Last-Modified' ); + } else { + // In PHP 5.2, send an empty Last-Modified header, but only as a + // last resort to override a header already sent. #WP23021 + foreach ( headers_list() as $header ) { + if ( 0 === stripos( $header, 'Last-Modified' ) ) { + $headers['Last-Modified'] = ''; + break; + } + } + } + } + foreach( (array) $headers as $name => $field_value ) @header("{$name}: {$field_value}"); @@ -601,7 +626,7 @@ class WP_MatchesMapRegex { * @return string */ function _map() { - $callback = array(&$this, 'callback'); + $callback = array($this, 'callback'); return preg_replace_callback($this->_pattern, $callback, $this->_subject); }