diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php
index b07ced4..169a2e3 100644
--- a/src/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php
+++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php
@@ -508,16 +508,8 @@ class WP_REST_Comments_Controller extends WP_REST_Controller {
 
 		// Honor the discussion setting that requires a name and email address of the comment author.
 		if ( get_option( 'require_name_email' ) ) {
-			if ( ! isset( $prepared_comment['comment_author'] ) && ! isset( $prepared_comment['comment_author_email'] ) ) {
-				return new WP_Error( 'rest_comment_author_data_required', __( 'Creating a comment requires valid author name and email values.' ), array( 'status' => 400 ) );
-			}
-
-			if ( ! isset( $prepared_comment['comment_author'] ) ) {
-				return new WP_Error( 'rest_comment_author_required', __( 'Creating a comment requires a valid author name.' ), array( 'status' => 400 ) );
-			}
-
-			if ( ! isset( $prepared_comment['comment_author_email'] ) ) {
-				return new WP_Error( 'rest_comment_author_email_required', __( 'Creating a comment requires a valid author email.' ), array( 'status' => 400 ) );
+			if ( empty( $prepared_comment['comment_author'] ) || empty( $prepared_comment['comment_author_email'] ) ) {
+				return new WP_Error( 'rest_comment_author_required', __( 'Creating a comment requires valid author name and email values.' ), array( 'status' => 400 ) );
 			}
 		}
 
@@ -672,6 +664,20 @@ class WP_REST_Comments_Controller extends WP_REST_Controller {
 			return $prepared_args;
 		}
 
+		// Honor the discussion setting that requires a name and email address of the comment author.
+		if ( get_option( 'require_name_email' ) ) {
+			$is_valid_author_update = true;
+			if ( isset( $prepared_args['comment_author'] ) && empty( $prepared_args['comment_author'] ) ) {
+				$is_valid_author_update = false;
+			}
+			if ( isset( $prepared_args['comment_author_email'] ) && empty( $prepared_args['comment_author_email'] ) ) {
+				$is_valid_author_update = false;
+			}
+			if ( ! $is_valid_author_update ) {
+				return new WP_Error( 'rest_comment_author_required', __( 'Updating a comment\'s author requires valid author name and email values.' ), array( 'status' => 400 ) );
+			}
+		}
+
 		if ( empty( $prepared_args ) && isset( $request['status'] ) ) {
 			// Only the comment status is being changed.
 			$change = $this->handle_status_param( $request['status'], $id );
diff --git a/tests/phpunit/tests/rest-api/rest-comments-controller.php b/tests/phpunit/tests/rest-api/rest-comments-controller.php
index 112a26c..58d6b46 100644
--- a/tests/phpunit/tests/rest-api/rest-comments-controller.php
+++ b/tests/phpunit/tests/rest-api/rest-comments-controller.php
@@ -98,6 +98,10 @@ class WP_Test_REST_Comments_Controller extends WP_Test_REST_Controller_Testcase
 	}
 
 	public function tearDown() {
+		remove_filter( 'rest_allow_anonymous_comments', '__return_true' );
+		update_option( 'require_name_email', 0 );
+		update_option( 'comment_registration', 0 );
+		update_option( 'show_avatars', 1 );
 		parent::tearDown();
 	}
 
@@ -987,13 +991,14 @@ class WP_Test_REST_Comments_Controller extends WP_Test_REST_Controller_Testcase
 		$this->assertEquals( $params['content']['raw'], $new_comment->comment_content );
 	}
 
-	public function test_create_comment_missing_required_author_name_and_email_per_option_value() {
+	public function test_create_comment_missing_required_author_name() {
 		add_filter( 'rest_allow_anonymous_comments', '__return_true' );
 		update_option( 'require_name_email', 1 );
 
 		$params = array(
-			'post'    => self::$post_id,
-			'content' => 'Now, I don\'t want you to worry class. These tests will have no affect on your grades. They merely determine your future social status and financial success. If any.',
+			'post'         => self::$post_id,
+			'author_email' => 'ekrabappel@springfield-elementary.edu',
+			'content'      => 'Now, I don\'t want you to worry class. These tests will have no affect on your grades. They merely determine your future social status and financial success. If any.',
 		);
 
 		$request = new WP_REST_Request( 'POST', '/wp/v2/comments' );
@@ -1002,18 +1007,17 @@ class WP_Test_REST_Comments_Controller extends WP_Test_REST_Controller_Testcase
 
 		$response = $this->server->dispatch( $request );
 
-		$this->assertErrorResponse( 'rest_comment_author_data_required', $response, 400 );
-
-		update_option( 'require_name_email', 0 );
+		$this->assertErrorResponse( 'rest_comment_author_required', $response, 400 );
 	}
 
-	public function test_create_comment_missing_required_author_name_per_option_value() {
-		wp_set_current_user( self::$admin_id );
+	public function test_create_comment_empty_required_author_name() {
+		add_filter( 'rest_allow_anonymous_comments', '__return_true' );
 		update_option( 'require_name_email', 1 );
 
 		$params = array(
-			'post'         => self::$post_id,
+			'author_name'  => '',
 			'author_email' => 'ekrabappel@springfield-elementary.edu',
+			'post'         => self::$post_id,
 			'content'      => 'Now, I don\'t want you to worry class. These tests will have no affect on your grades. They merely determine your future social status and financial success. If any.',
 		);
 
@@ -1022,12 +1026,11 @@ class WP_Test_REST_Comments_Controller extends WP_Test_REST_Controller_Testcase
 		$request->set_body( wp_json_encode( $params ) );
 
 		$response = $this->server->dispatch( $request );
-		$this->assertErrorResponse( 'rest_comment_author_required', $response, 400 );
 
-		update_option( 'require_name_email', 0 );
+		$this->assertErrorResponse( 'rest_comment_author_required', $response, 400 );
 	}
 
-	public function test_create_comment_missing_required_author_email_per_option_value() {
+	public function test_create_comment_missing_required_author_email() {
 		wp_set_current_user( self::$admin_id );
 		update_option( 'require_name_email', 1 );
 
@@ -1042,9 +1045,29 @@ class WP_Test_REST_Comments_Controller extends WP_Test_REST_Controller_Testcase
 		$request->set_body( wp_json_encode( $params ) );
 
 		$response = $this->server->dispatch( $request );
-		$this->assertErrorResponse( 'rest_comment_author_email_required', $response, 400 );
+		$this->assertErrorResponse( 'rest_comment_author_required', $response, 400 );
+	}
 
-		update_option( 'require_name_email', 0 );
+	public function test_create_comment_empty_required_author_email() {
+		wp_set_current_user( self::$admin_id );
+		update_option( 'require_name_email', 1 );
+
+		$params = array(
+			'post'         => self::$post_id,
+			'author_name'  => 'Edna Krabappel',
+			'author_email' => '',
+			'content'      => 'Now, I don\'t want you to worry class. These tests will have no affect on your grades. They merely determine your future social status and financial success. If any.',
+		);
+
+		$request = new WP_REST_Request( 'POST', '/wp/v2/comments' );
+		$request->add_header( 'content-type', 'application/json' );
+		$request->set_body( wp_json_encode( $params ) );
+
+		$response = $this->server->dispatch( $request );
+		// Would be 'rest_comment_author_required' but this is caught by 'format' => 'email'
+		$this->assertErrorResponse( 'rest_invalid_param', $response, 400 );
+		$data = $response->get_data();
+		$this->assertArrayHasKey( 'author_email', $data['data']['params'] );
 	}
 
 	public function test_create_comment_author_email_too_short() {
@@ -1973,6 +1996,103 @@ class WP_Test_REST_Comments_Controller extends WP_Test_REST_Controller_Testcase
 		$this->assertEquals( $params['date_gmt'], mysql_to_rfc3339( $updated->comment_date_gmt ) );
 	}
 
+	public function test_update_comment_author_email_only() {
+		wp_set_current_user( self::$editor_id );
+		update_option( 'require_name_email', 1 );
+
+		$params = array(
+			'post'         => self::$post_id,
+			'author_email' => 'ekrabappel@springfield-elementary.edu',
+			'content'      => 'Now, I don\'t want you to worry class. These tests will have no affect on your grades. They merely determine your future social status and financial success. If any.',
+		);
+
+		$request = new WP_REST_Request( 'PUT', sprintf( '/wp/v2/comments/%d', self::$approved_id ) );
+		$request->add_header( 'content-type', 'application/json' );
+		$request->set_body( wp_json_encode( $params ) );
+
+		$response = $this->server->dispatch( $request );
+		$this->assertEquals( 200, $response->get_status() );
+	}
+
+	public function test_update_comment_empty_required_author_name() {
+		wp_set_current_user( self::$editor_id );
+		update_option( 'require_name_email', 1 );
+
+		$params = array(
+			'author_name'  => '',
+			'author_email' => 'ekrabappel@springfield-elementary.edu',
+			'post'         => self::$post_id,
+			'content'      => 'Now, I don\'t want you to worry class. These tests will have no affect on your grades. They merely determine your future social status and financial success. If any.',
+		);
+
+		$request = new WP_REST_Request( 'PUT', sprintf( '/wp/v2/comments/%d', self::$approved_id ) );
+		$request->add_header( 'content-type', 'application/json' );
+		$request->set_body( wp_json_encode( $params ) );
+
+		$response = $this->server->dispatch( $request );
+		$this->assertErrorResponse( 'rest_comment_author_required', $response, 400 );
+	}
+
+	public function test_update_comment_author_name_only() {
+		wp_set_current_user( self::$admin_id );
+		update_option( 'require_name_email', 1 );
+
+		$params = array(
+			'post'        => self::$post_id,
+			'author_name' => 'Edna Krabappel',
+			'content'     => 'Now, I don\'t want you to worry class. These tests will have no affect on your grades. They merely determine your future social status and financial success. If any.',
+		);
+
+		$request = new WP_REST_Request( 'PUT', sprintf( '/wp/v2/comments/%d', self::$approved_id ) );
+		$request->add_header( 'content-type', 'application/json' );
+		$request->set_body( wp_json_encode( $params ) );
+
+		$response = $this->server->dispatch( $request );
+		$this->assertEquals( 200, $response->get_status() );
+	}
+
+	public function test_update_comment_empty_required_author_email() {
+		wp_set_current_user( self::$admin_id );
+		update_option( 'require_name_email', 1 );
+
+		$params = array(
+			'post'         => self::$post_id,
+			'author_name'  => 'Edna Krabappel',
+			'author_email' => '',
+			'content'      => 'Now, I don\'t want you to worry class. These tests will have no affect on your grades. They merely determine your future social status and financial success. If any.',
+		);
+
+		$request = new WP_REST_Request( 'PUT', sprintf( '/wp/v2/comments/%d', self::$approved_id ) );
+		$request->add_header( 'content-type', 'application/json' );
+		$request->set_body( wp_json_encode( $params ) );
+
+		$response = $this->server->dispatch( $request );
+		// Would be 'rest_comment_author_required' but this is caught by 'format' => 'email'
+		$this->assertErrorResponse( 'rest_invalid_param', $response, 400 );
+		$data = $response->get_data();
+		$this->assertArrayHasKey( 'author_email', $data['data']['params'] );
+	}
+
+	public function test_update_comment_author_email_too_short() {
+		wp_set_current_user( self::$admin_id );
+
+		$params = array(
+			'post'         => self::$post_id,
+			'author_name'  => 'Homer J. Simpson',
+			'author_email' => 'a@b',
+			'content'      => 'in this house, we obey the laws of thermodynamics!',
+		);
+
+		$request = new WP_REST_Request( 'PUT', sprintf( '/wp/v2/comments/%d', self::$approved_id ) );
+		$request->add_header( 'content-type', 'application/json' );
+		$request->set_body( wp_json_encode( $params ) );
+		$response = $this->server->dispatch( $request );
+
+		$this->assertErrorResponse( 'rest_invalid_param', $response, 400 );
+		$data = $response->get_data();
+		$this->assertArrayHasKey( 'author_email', $data['data']['params'] );
+	}
+
 	public function test_update_comment_invalid_type() {
 		wp_set_current_user( self::$admin_id );
 
