Introduce minimum_args() method in XML-RPC and leverage it to return errors for insufficient arguments for methods that are new in 3.4.

props maxcutler,  markoheijnen.
fixes #20394.



git-svn-id: http://svn.automattic.com/wordpress/trunk@20636 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
nacin 2012-04-28 21:25:25 +00:00
parent 1627408d5a
commit ae772d3850
1 changed files with 60 additions and 0 deletions

View File

@ -490,6 +490,24 @@ class wp_xmlrpc_server extends IXR_Server {
return $struct; return $struct;
} }
/**
* Checks if the method received at least the minimum number of arguments.
*
* @since 3.4
*
* @param string|array $args Sanitize single string or array of strings.
* @param int $count Minimum number of arguments.
* @return boolean if $args contains at least $count arguments.
*/
protected function minimum_args( $args, $count ) {
if ( count( $args ) < $count ) {
$this->error = new IXR_Error( 400, __( 'Insufficient arguments passed to this XML-RPC method.' ) );
return false;
}
return true;
}
/** /**
* Prepares taxonomy data for return in an XML-RPC object. * Prepares taxonomy data for return in an XML-RPC object.
* *
@ -766,6 +784,9 @@ class wp_xmlrpc_server extends IXR_Server {
* @return string post_id * @return string post_id
*/ */
function wp_newPost( $args ) { function wp_newPost( $args ) {
if ( ! $this->minimum_args( $args, 4 ) )
return $this->error;
$this->escape( $args ); $this->escape( $args );
$blog_id = (int) $args[0]; $blog_id = (int) $args[0];
@ -1038,6 +1059,9 @@ class wp_xmlrpc_server extends IXR_Server {
* @return true on success * @return true on success
*/ */
function wp_editPost( $args ) { function wp_editPost( $args ) {
if ( ! $this->minimum_args( $args, 5 ) )
return $this->error;
$this->escape( $args ); $this->escape( $args );
$blog_id = (int) $args[0]; $blog_id = (int) $args[0];
@ -1090,6 +1114,9 @@ class wp_xmlrpc_server extends IXR_Server {
* @return true on success * @return true on success
*/ */
function wp_deletePost( $args ) { function wp_deletePost( $args ) {
if ( ! $this->minimum_args( $args, 4 ) )
return $this->error;
$this->escape( $args ); $this->escape( $args );
$blog_id = (int) $args[0]; $blog_id = (int) $args[0];
@ -1163,6 +1190,9 @@ class wp_xmlrpc_server extends IXR_Server {
* - 'enclosure' * - 'enclosure'
*/ */
function wp_getPost( $args ) { function wp_getPost( $args ) {
if ( ! $this->minimum_args( $args, 4 ) )
return $this->error;
$this->escape( $args ); $this->escape( $args );
$blog_id = (int) $args[0]; $blog_id = (int) $args[0];
@ -1217,6 +1247,9 @@ class wp_xmlrpc_server extends IXR_Server {
* @return array contains a collection of posts. * @return array contains a collection of posts.
*/ */
function wp_getPosts( $args ) { function wp_getPosts( $args ) {
if ( ! $this->minimum_args( $args, 3 ) )
return $this->error;
$this->escape( $args ); $this->escape( $args );
$blog_id = (int) $args[0]; $blog_id = (int) $args[0];
@ -1303,6 +1336,9 @@ class wp_xmlrpc_server extends IXR_Server {
* @return string term_id * @return string term_id
*/ */
function wp_newTerm( $args ) { function wp_newTerm( $args ) {
if ( ! $this->minimum_args( $args, 4 ) )
return $this->error;
$this->escape( $args ); $this->escape( $args );
$blog_id = (int) $args[0]; $blog_id = (int) $args[0];
@ -1387,6 +1423,9 @@ class wp_xmlrpc_server extends IXR_Server {
* @return bool True, on success. * @return bool True, on success.
*/ */
function wp_editTerm( $args ) { function wp_editTerm( $args ) {
if ( ! $this->minimum_args( $args, 5 ) )
return $this->error;
$this->escape( $args ); $this->escape( $args );
$blog_id = (int) $args[0]; $blog_id = (int) $args[0];
@ -1476,6 +1515,9 @@ class wp_xmlrpc_server extends IXR_Server {
* @return boolean|IXR_Error If it suceeded true else a reason why not * @return boolean|IXR_Error If it suceeded true else a reason why not
*/ */
function wp_deleteTerm( $args ) { function wp_deleteTerm( $args ) {
if ( ! $this->minimum_args( $args, 5 ) )
return $this->error;
$this->escape( $args ); $this->escape( $args );
$blog_id = (int) $args[0]; $blog_id = (int) $args[0];
@ -1540,6 +1582,9 @@ class wp_xmlrpc_server extends IXR_Server {
* - 'count' * - 'count'
*/ */
function wp_getTerm( $args ) { function wp_getTerm( $args ) {
if ( ! $this->minimum_args( $args, 5 ) )
return $this->error;
$this->escape( $args ); $this->escape( $args );
$blog_id = (int) $args[0]; $blog_id = (int) $args[0];
@ -1590,6 +1635,9 @@ class wp_xmlrpc_server extends IXR_Server {
* @return array terms * @return array terms
*/ */
function wp_getTerms( $args ) { function wp_getTerms( $args ) {
if ( ! $this->minimum_args( $args, 4 ) )
return $this->error;
$this->escape( $args ); $this->escape( $args );
$blog_id = (int) $args[0]; $blog_id = (int) $args[0];
@ -1662,6 +1710,9 @@ class wp_xmlrpc_server extends IXR_Server {
* @return array (@see get_taxonomy()) * @return array (@see get_taxonomy())
*/ */
function wp_getTaxonomy( $args ) { function wp_getTaxonomy( $args ) {
if ( ! $this->minimum_args( $args, 4 ) )
return $this->error;
$this->escape( $args ); $this->escape( $args );
$blog_id = (int) $args[0]; $blog_id = (int) $args[0];
@ -1703,6 +1754,9 @@ class wp_xmlrpc_server extends IXR_Server {
* @return array taxonomies * @return array taxonomies
*/ */
function wp_getTaxonomies( $args ) { function wp_getTaxonomies( $args ) {
if ( ! $this->minimum_args( $args, 3 ) )
return $this->error;
$this->escape( $args ); $this->escape( $args );
$blog_id = (int) $args[0]; $blog_id = (int) $args[0];
@ -3009,6 +3063,9 @@ class wp_xmlrpc_server extends IXR_Server {
* - 'supports' * - 'supports'
*/ */
function wp_getPostType( $args ) { function wp_getPostType( $args ) {
if ( ! $this->minimum_args( $args, 4 ) )
return $this->error;
$this->escape( $args ); $this->escape( $args );
$blog_id = (int) $args[0]; $blog_id = (int) $args[0];
@ -3052,6 +3109,9 @@ class wp_xmlrpc_server extends IXR_Server {
* @return array * @return array
*/ */
function wp_getPostTypes( $args ) { function wp_getPostTypes( $args ) {
if ( ! $this->minimum_args( $args, 3 ) )
return $this->error;
$this->escape( $args ); $this->escape( $args );
$blog_id = (int) $args[0]; $blog_id = (int) $args[0];