WordPress.org

Make WordPress Core

Ticket #10656: wordpress_xmlrpc_custom_serialized.patch

File wordpress_xmlrpc_custom_serialized.patch, 2.4 KB (added by JonathanRogers, 6 years ago)

Prevents XML-RPC server from re-serializing custom field values that are already serialized.

  • wp-admin/includes/post.php

    === modified file 'wp-admin/includes/post.php'
     
    554554 * @param unknown_type $post_ID 
    555555 * @return unknown 
    556556 */ 
    557 function add_meta( $post_ID ) { 
     557function add_meta( $post_ID, $serialize=true ) { 
    558558        global $wpdb; 
    559559        $post_ID = (int) $post_ID; 
    560560 
     
    562562 
    563563        $metakeyselect = isset($_POST['metakeyselect']) ? stripslashes( trim( $_POST['metakeyselect'] ) ) : ''; 
    564564        $metakeyinput = isset($_POST['metakeyinput']) ? stripslashes( trim( $_POST['metakeyinput'] ) ) : ''; 
    565         $metavalue = isset($_POST['metavalue']) ? maybe_serialize( stripslashes( trim( $_POST['metavalue'] ) ) ) : ''; 
     565        if (isset($_POST['metavalue'])) { 
     566          $v=stripslashes( trim( $_POST['metavalue'] ) ); 
     567          if ($serialize) { $v = maybe_serialize( $v  ); } 
     568          $metavalue = $v; 
     569        } else { 
     570          $metavalue = ''; 
     571        } 
    566572 
    567573        if ( ('0' === $metavalue || !empty ( $metavalue ) ) && ((('#NONE#' != $metakeyselect) && !empty ( $metakeyselect) ) || !empty ( $metakeyinput) ) ) { 
    568574                // We have a key/value pair. If both the select and the 
     
    669675 * @param unknown_type $meta_value 
    670676 * @return unknown 
    671677 */ 
    672 function update_meta( $meta_id, $meta_key, $meta_value ) { 
     678function update_meta( $meta_id, $meta_key, $meta_value, $serialize=true ) { 
    673679        global $wpdb; 
    674680 
    675681        $protected = array( '_wp_attached_file', '_wp_attachment_metadata', '_wp_old_slug', '_wp_page_template' ); 
     
    682688 
    683689        $post_id = $wpdb->get_var( $wpdb->prepare("SELECT post_id FROM $wpdb->postmeta WHERE meta_id = %d", $meta_id) ); 
    684690        wp_cache_delete($post_id, 'post_meta'); 
    685  
    686         $meta_value = maybe_serialize( stripslashes( $meta_value ) ); 
     691         
     692        $meta_value = stripslashes( $meta_value ); 
     693        if ($serialize) { 
     694          $meta_value = maybe_serialize( $meta_value ); 
     695        } 
    687696        $meta_id = (int) $meta_id; 
    688697 
    689698        $data  = compact( 'meta_key', 'meta_value' ); 
  • xmlrpc.php

    === modified file 'xmlrpc.php'
     
    352352                                $meta['id'] = (int) $meta['id']; 
    353353 
    354354                                if ( isset($meta['key']) ) { 
    355                                         update_meta($meta['id'], $meta['key'], $meta['value']); 
     355                                  update_meta($meta['id'], $meta['key'], $meta['value'], false); 
    356356                                } 
    357357                                else { 
    358358                                        delete_meta($meta['id']); 
     
    361361                        else { 
    362362                                $_POST['metakeyinput'] = $meta['key']; 
    363363                                $_POST['metavalue'] = $meta['value']; 
    364                                 add_meta($post_id); 
     364                                add_meta($post_id, false); 
    365365                        } 
    366366                } 
    367367        }