From 9cc7660c53f95b561e9b46d4902b5fa5509ced46 Mon Sep 17 00:00:00 2001 From: Boone Gorges Date: Mon, 19 Oct 2015 03:12:24 +0000 Subject: [PATCH] Don't store `data` as a property on `WP_Term` objects. `wp_ajax_add_term()` fetches a term using `get_term()`, and passes the term to `WP_Ajax_Response`, which expects each of the term's properties to be scalar. Having `$data` as a `stdClass` (meant to mimic `WP_User::data`, populated by a `get_row()` database query) violated this expectation, causing fatal string conversion errors. As a workaround, `$term->data` is converted so that it is no longer an actual property of the term object, but is assembled only when requested in the magic `__get()` method. Fixes #34348. Built from https://develop.svn.wordpress.org/trunk@35269 git-svn-id: http://core.svn.wordpress.org/trunk@35235 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-includes/class-wp-term.php | 19 +++++++------------ wp-includes/version.php | 2 +- 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/wp-includes/class-wp-term.php b/wp-includes/class-wp-term.php index 9403641e03..857d5fc7f0 100644 --- a/wp-includes/class-wp-term.php +++ b/wp-includes/class-wp-term.php @@ -95,15 +95,6 @@ final class WP_Term { */ public $count = 0; - /** - * Info about the term, as stored in the database. - * - * @since 4.4.0 - * @access protected - * @var array - */ - protected $data = array(); - /** * Stores the term object's sanitization level. * @@ -166,8 +157,6 @@ final class WP_Term { foreach ( get_object_vars( $term ) as $key => $value ) { $this->$key = $value; } - - $this->data = sanitize_term( $term, $this->taxonomy, $this->filter ); } /** @@ -205,7 +194,13 @@ final class WP_Term { public function __get( $key ) { switch ( $key ) { case 'data' : - return sanitize_term( $this->{$key}, $this->data->taxonomy, 'raw' ); + $data = new stdClass(); + $columns = array( 'term_id', 'name', 'slug', 'term_group', 'term_taxonomy_id', 'taxonomy', 'description', 'parent', 'count' ); + foreach ( $columns as $column ) { + $data->{$column} = isset( $this->{$column} ) ? $this->{$column} : null; + } + + return sanitize_term( $data, $data->taxonomy, 'raw' ); break; } } diff --git a/wp-includes/version.php b/wp-includes/version.php index c0f141e0c7..0df5a40656 100644 --- a/wp-includes/version.php +++ b/wp-includes/version.php @@ -4,7 +4,7 @@ * * @global string $wp_version */ -$wp_version = '4.4-alpha-35268'; +$wp_version = '4.4-alpha-35269'; /** * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.