diff --git a/src/wp-includes/taxonomy.php b/src/wp-includes/taxonomy.php index c1c3f99679..cce486786b 100644 --- a/src/wp-includes/taxonomy.php +++ b/src/wp-includes/taxonomy.php @@ -3365,16 +3365,22 @@ function wp_unique_term_slug($slug, $term) { function wp_update_term( $term_id, $taxonomy, $args = array() ) { global $wpdb; - if ( ! taxonomy_exists($taxonomy) ) - return new WP_Error('invalid_taxonomy', __('Invalid taxonomy')); + if ( ! taxonomy_exists( $taxonomy ) ) { + return new WP_Error( 'invalid_taxonomy', __( 'Invalid taxonomy' ) ); + } $term_id = (int) $term_id; // First, get all of the original args - $term = get_term ($term_id, $taxonomy, ARRAY_A); + $term = get_term( $term_id, $taxonomy, ARRAY_A ); - if ( is_wp_error( $term ) ) + if ( is_wp_error( $term ) ) { return $term; + } + + if ( ! $term ) { + return new WP_Error( 'invalid_term', __( 'Empty Term' ) ); + } // Escape data pulled from DB. $term = wp_slash($term); diff --git a/tests/phpunit/tests/term/wpUpdateTerm.php b/tests/phpunit/tests/term/wpUpdateTerm.php index 33d579b89c..b00bd67ffe 100644 --- a/tests/phpunit/tests/term/wpUpdateTerm.php +++ b/tests/phpunit/tests/term/wpUpdateTerm.php @@ -653,4 +653,16 @@ class Tests_Term_WpUpdateTerm extends WP_UnitTestCase { _unregister_taxonomy( 'wptests_tax' ); } + + /** + * @ticket 31954 + */ + public function test_wp_update_term_with_null_get_term() { + $t = $this->factory->term->create( array( 'taxonomy' => 'category' ) ); + $found = wp_update_term( $t, 'post_tag', array( 'slug' => 'foo' ) ); + + $this->assertWPError( $found ); + $this->assertSame( 'invalid_term', $found->get_error_code() ); + } + }