WordPress.org

Make WordPress Core

Ticket #10656: wordpress_xmlrpc_custom_serialized.patch

File wordpress_xmlrpc_custom_serialized.patch, 2.4 KB (added by JonathanRogers, 9 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        }