diff --git a/wp-admin/includes/file.php b/wp-admin/includes/file.php
index fc1d520d22..e546cda344 100644
--- a/wp-admin/includes/file.php
+++ b/wp-admin/includes/file.php
@@ -52,7 +52,7 @@ function get_file_description( $file ) {
elseif ( file_exists( WP_CONTENT_DIR . $file ) && is_file( WP_CONTENT_DIR . $file ) ) {
$template_data = implode( '', file( WP_CONTENT_DIR . $file ) );
if ( preg_match( '|Template Name:(.*)$|mi', $template_data, $name ))
- return $name[1] . ' Page Template';
+ return _cleanup_header_comment($name[1]) . ' Page Template';
}
return basename( $file );
diff --git a/wp-admin/includes/misc.php b/wp-admin/includes/misc.php
index 1479a63b66..53e2722f7f 100644
--- a/wp-admin/includes/misc.php
+++ b/wp-admin/includes/misc.php
@@ -370,3 +370,15 @@ function wp_menu_unfold() {
exit;
}
}
+
+
+/**
+ * Strip close comment and close php tags from file headers used by WP
+ * See http://core.trac.wordpress.org/ticket/8497
+ *
+ * @since 2.8
+**/
+function _cleanup_header_comment($str) {
+ return trim(preg_replace("/\s*(?:\*\/|\?>).*/", '', $str));
+}
+
diff --git a/wp-admin/includes/plugin.php b/wp-admin/includes/plugin.php
index 2de832dd72..b61e97ae67 100644
--- a/wp-admin/includes/plugin.php
+++ b/wp-admin/includes/plugin.php
@@ -86,7 +86,7 @@ function get_plugin_data( $plugin_file, $markup = true, $translate = true ) {
foreach ( array( 'name', 'uri', 'version', 'description', 'author_name', 'author_uri', 'text_domain', 'domain_path' ) as $field ) {
if ( !empty( ${$field} ) )
- ${$field} = trim(${$field}[1]);
+ ${$field} = _cleanup_header_comment(${$field}[1]);
else
${$field} = '';
}
diff --git a/wp-admin/includes/theme.php b/wp-admin/includes/theme.php
index abdd8ddd54..f6eb03df30 100644
--- a/wp-admin/includes/theme.php
+++ b/wp-admin/includes/theme.php
@@ -133,7 +133,7 @@ function get_page_templates() {
$name = '';
if ( preg_match( '|Template Name:(.*)$|mi', $template_data, $name ) )
- $name = $name[1];
+ $name = _cleanup_header_comment($name[1]);
if ( !empty( $name ) ) {
$page_templates[trim( $name )] = basename( $template );
diff --git a/wp-includes/theme.php b/wp-includes/theme.php
index ac71c4a3b9..8ed8fde4f8 100644
--- a/wp-includes/theme.php
+++ b/wp-includes/theme.php
@@ -180,50 +180,50 @@ function get_theme_data( $theme_file ) {
$theme_data = implode( '', file( $theme_file ) );
$theme_data = str_replace ( '\r', '\n', $theme_data );
if ( preg_match( '|Theme Name:(.*)$|mi', $theme_data, $theme_name ) )
- $name = $theme = wp_kses( trim( $theme_name[1] ), $themes_allowed_tags );
+ $name = $theme = wp_kses( _cleanup_header_comment($theme_name[1]), $themes_allowed_tags );
else
$name = $theme = '';
if ( preg_match( '|Theme URI:(.*)$|mi', $theme_data, $theme_uri ) )
- $theme_uri = clean_url( trim( $theme_uri[1] ) );
+ $theme_uri = clean_url( _cleanup_header_comment($theme_uri[1]) );
else
$theme_uri = '';
if ( preg_match( '|Description:(.*)$|mi', $theme_data, $description ) )
- $description = wptexturize( wp_kses( trim( $description[1] ), $themes_allowed_tags ) );
+ $description = wptexturize( wp_kses( _cleanup_header_comment($description[1]), $themes_allowed_tags ) );
else
$description = '';
if ( preg_match( '|Author URI:(.*)$|mi', $theme_data, $author_uri ) )
- $author_uri = clean_url( trim( $author_uri[1]) );
+ $author_uri = clean_url( _cleanup_header_comment($author_uri[1]) );
else
$author_uri = '';
if ( preg_match( '|Template:(.*)$|mi', $theme_data, $template ) )
- $template = wp_kses( trim( $template[1] ), $themes_allowed_tags );
+ $template = wp_kses( _cleanup_header_comment($template[1]), $themes_allowed_tags );
else
$template = '';
if ( preg_match( '|Version:(.*)|i', $theme_data, $version ) )
- $version = wp_kses( trim( $version[1] ), $themes_allowed_tags );
+ $version = wp_kses( _cleanup_header_comment($version[1]), $themes_allowed_tags );
else
$version = '';
if ( preg_match('|Status:(.*)|i', $theme_data, $status) )
- $status = wp_kses( trim( $status[1] ), $themes_allowed_tags );
+ $status = wp_kses( _cleanup_header_comment($status[1]), $themes_allowed_tags );
else
$status = 'publish';
if ( preg_match('|Tags:(.*)|i', $theme_data, $tags) )
- $tags = array_map( 'trim', explode( ',', wp_kses( trim( $tags[1] ), array() ) ) );
+ $tags = array_map( 'trim', explode( ',', wp_kses( _cleanup_header_comment($tags[1]), array() ) ) );
else
$tags = array();
if ( preg_match( '|Author:(.*)$|mi', $theme_data, $author_name ) ) {
if ( empty( $author_uri ) ) {
- $author = wp_kses( trim( $author_name[1] ), $themes_allowed_tags );
+ $author = wp_kses( _cleanup_header_comment($author_name[1]), $themes_allowed_tags );
} else {
- $author = sprintf( '%3$s', $author_uri, __( 'Visit author homepage' ), wp_kses( trim( $author_name[1] ), $themes_allowed_tags ) );
+ $author = sprintf( '%3$s', $author_uri, __( 'Visit author homepage' ), wp_kses( _cleanup_header_comment($author_name[1]), $themes_allowed_tags ) );
}
} else {
$author = __('Anonymous');