Index: src/wp-includes/class-IXR.php
===================================================================
--- src/wp-includes/class-IXR.php	(revision 36115)
+++ src/wp-includes/class-IXR.php	(working copy)
@@ -296,31 +296,31 @@ class IXR_Message
                 break;
             }
         } while (true);
         xml_parser_free($this->_parser);
 
         // Grab the error messages, if any
         if ($this->messageType == 'fault') {
             $this->faultCode = $this->params[0]['faultCode'];
             $this->faultString = $this->params[0]['faultString'];
         }
         return true;
     }
 
     function tag_open($parser, $tag, $attr)
     {
-        $this->_currentTagContents = '';
+        $this->_currentTagContents = null;
         $this->currentTag = $tag;
         switch($tag) {
             case 'methodCall':
             case 'methodResponse':
             case 'fault':
                 $this->messageType = $tag;
                 break;
                 /* Deal with stacks of arrays and structs */
             case 'data':    // data is to all intents and puposes more interesting than array
                 $this->_arraystructstypes[] = 'array';
                 $this->_arraystructs[] = array();
                 break;
             case 'struct':
                 $this->_arraystructstypes[] = 'struct';
                 $this->_arraystructs[] = array();
@@ -347,31 +347,31 @@ class IXR_Message
             case 'double':
                 $value = (double)trim($this->_currentTagContents);
                 $valueFlag = true;
                 break;
             case 'string':
                 $value = (string)trim($this->_currentTagContents);
                 $valueFlag = true;
                 break;
             case 'dateTime.iso8601':
                 $value = new IXR_Date(trim($this->_currentTagContents));
                 $valueFlag = true;
                 break;
             case 'value':
                 // "If no type is indicated, the type is string."
                 if ( !$this->_valueHasType ) {
-                    $value = trim( $this->_currentTagContents );
+                    $value = is_null( $this->_currentTagContents ) ? null : trim( $this->_currentTagContents );
                     $valueFlag = true;
                 }
                 break;
             case 'boolean':
                 $value = (boolean)trim($this->_currentTagContents);
                 $valueFlag = true;
                 break;
             case 'base64':
                 $value = base64_decode($this->_currentTagContents);
                 $valueFlag = true;
                 break;
                 /* Deal with stacks of arrays and structs */
             case 'data':
             case 'struct':
                 $value = array_pop($this->_arraystructs);
Index: src/wp-includes/class-wp-xmlrpc-server.php
===================================================================
--- src/wp-includes/class-wp-xmlrpc-server.php	(revision 36115)
+++ src/wp-includes/class-wp-xmlrpc-server.php	(working copy)
@@ -4912,31 +4912,31 @@ class wp_xmlrpc_server extends IXR_Serve
 				case 'draft':
 				case 'pending':
 				case 'private':
 				case 'publish':
 					$post_status = $content_struct["{$post_type}_status"];
 					break;
 				default:
 					$post_status = $publish ? 'publish' : 'draft';
 					break;
 			}
 		}
 
 		$post_excerpt = isset($content_struct['mt_excerpt']) ? $content_struct['mt_excerpt'] : null;
 		$post_more = isset($content_struct['mt_text_more']) ? $content_struct['mt_text_more'] : null;
 
-		$tags_input = isset($content_struct['mt_keywords']) ? $content_struct['mt_keywords'] : null;
+		$tags_input = array_key_exists( 'mt_keywords', $content_struct ) ? $content_struct['mt_keywords'] : null;
 
 		if ( isset($content_struct['mt_allow_comments']) ) {
 			if ( !is_numeric($content_struct['mt_allow_comments']) ) {
 				switch ( $content_struct['mt_allow_comments'] ) {
 					case 'closed':
 						$comment_status = 'closed';
 						break;
 					case 'open':
 						$comment_status = 'open';
 						break;
 					default:
 						$comment_status = get_default_comment_status( $post_type );
 						break;
 				}
 			} else {
@@ -5323,31 +5323,31 @@ class wp_xmlrpc_server extends IXR_Serve
 		$post_status = $publish ? 'publish' : 'draft';
 		if ( isset( $content_struct["{$post_type}_status"] ) ) {
 			switch( $content_struct["{$post_type}_status"] ) {
 				case 'draft':
 				case 'pending':
 				case 'private':
 				case 'publish':
 					$post_status = $content_struct["{$post_type}_status"];
 					break;
 				default:
 					$post_status = $publish ? 'publish' : 'draft';
 					break;
 			}
 		}
 
-		$tags_input = isset( $content_struct['mt_keywords'] ) ? $content_struct['mt_keywords'] : null;
+		$tags_input = array_key_exists( 'mt_keywords', $content_struct ) ? $content_struct['mt_keywords'] : null;
 
 		if ( 'publish' == $post_status || 'private' == $post_status ) {
 			if ( 'page' == $post_type && ! current_user_can( 'publish_pages' ) ) {
 				return new IXR_Error( 401, __( 'Sorry, you do not have the right to publish this page.' ) );
 			} elseif ( ! current_user_can( 'publish_posts' ) ) {
 				return new IXR_Error( 401, __( 'Sorry, you do not have the right to publish this post.' ) );
 			}
 		}
 
 		if ( $post_more )
 			$post_content = $post_content . "<!--more-->" . $post_more;
 
 		$to_ping = null;
 		if ( isset( $content_struct['mt_tb_ping_urls'] ) ) {
 			$to_ping = $content_struct['mt_tb_ping_urls'];
