Make WordPress Core

Changeset 51908


Ignore:
Timestamp:
10/15/2021 02:03:38 AM (3 months ago)
Author:
rachelbaker
Message:

REST API: Add text-field and textarea-field as available schema formats for string sanitization.

Props ocean90, TimothyBlynJacobs.
Fixes #49960.

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/rest-api.php

    r51657 r51908  
    26362636 * @since 5.5.0 Added the `$param` parameter.
    26372637 * @since 5.6.0 Support the "anyOf" and "oneOf" keywords.
     2638 * @since 5.9.0 Added `text-field` and `textarea-field` formats.
    26382639 *
    26392640 * @param mixed  $value The value to sanitize.
     
    27782779            case 'uuid':
    27792780                return sanitize_text_field( $value );
     2781
     2782            case 'text-field':
     2783                return sanitize_text_field( $value );
     2784
     2785            case 'textarea-field':
     2786                return sanitize_textarea_field( $value );
    27802787        }
    27812788    }
  • trunk/tests/phpunit/tests/rest-api/rest-controller.php

    r51568 r51908  
    2424            array(
    2525                'args' => array(
    26                     'someinteger' => array(
     26                    'someinteger'       => array(
    2727                        'type' => 'integer',
    2828                    ),
    29                     'someboolean' => array(
     29                    'someboolean'       => array(
    3030                        'type' => 'boolean',
    3131                    ),
    32                     'somestring'  => array(
     32                    'somestring'        => array(
    3333                        'type' => 'string',
    3434                    ),
    35                     'somehex'     => array(
     35                    'somehex'           => array(
    3636                        'type'   => 'string',
    3737                        'format' => 'hex-color',
    3838                    ),
    39                     'someenum'    => array(
     39                    'someenum'          => array(
    4040                        'type' => 'string',
    4141                        'enum' => array( 'a' ),
    4242                    ),
    43                     'somedate'    => array(
     43                    'somedate'          => array(
    4444                        'type'   => 'string',
    4545                        'format' => 'date-time',
    4646                    ),
    47                     'someemail'   => array(
     47                    'someemail'         => array(
    4848                        'type'   => 'string',
    4949                        'format' => 'email',
    5050                    ),
    51                     'someuuid'    => array(
     51                    'someuuid'          => array(
    5252                        'type'   => 'string',
    5353                        'format' => 'uuid',
     54                    ),
     55                    'sometextfield'     => array(
     56                        'type'   => 'string',
     57                        'format' => 'text-field',
     58                    ),
     59                    'sometextareafield' => array(
     60                        'type'   => 'string',
     61                        'format' => 'textarea-field',
    5462                    ),
    5563                ),
     
    217225            'rest_invalid_uuid',
    218226            rest_validate_request_arg( '123e4567-e89b-12d3-a456-426655440000X', $this->request, 'someuuid' )
     227        );
     228    }
     229
     230    /**
     231     * @ticket 49960
     232     */
     233    public function test_validate_schema_format_text_field() {
     234        $this->assertTrue(
     235            rest_validate_request_arg( 'Hello World', $this->request, 'sometextfield' )
     236        );
     237
     238        $this->assertErrorResponse(
     239            'rest_invalid_type',
     240            rest_validate_request_arg( false, $this->request, 'sometextfield' )
     241        );
     242
     243        $this->assertSame(
     244            'Hello World',
     245            rest_sanitize_request_arg( 'Hello World', $this->request, 'sometextfield' )
     246        );
     247        $this->assertSame(
     248            'Hello World',
     249            rest_sanitize_request_arg( '<p>Hello World</p>', $this->request, 'sometextfield' )
     250        );
     251    }
     252
     253    /**
     254     * @ticket 49960
     255     */
     256    public function test_validate_schema_format_textarea_field() {
     257        $this->assertTrue(
     258            rest_validate_request_arg( "Hello\nWorld", $this->request, 'sometextareafield' )
     259        );
     260
     261        $this->assertErrorResponse(
     262            'rest_invalid_type',
     263            rest_validate_request_arg( false, $this->request, 'sometextareafield' )
     264        );
     265
     266        $this->assertSame(
     267            "Hello\nWorld",
     268            rest_sanitize_request_arg( "Hello\nWorld", $this->request, 'sometextareafield' )
     269        );
     270        $this->assertSame(
     271            "Hello\nWorld",
     272            rest_sanitize_request_arg( "<p>Hello\nWorld</p>", $this->request, 'sometextareafield' )
    219273        );
    220274    }
     
    235289        $this->assertArrayHasKey( 'somehex', $args );
    236290        $this->assertArrayHasKey( 'someuuid', $args );
     291        $this->assertArrayHasKey( 'sometextfield', $args );
     292        $this->assertArrayHasKey( 'sometextareafield', $args );
    237293        $this->assertArrayHasKey( 'someenum', $args );
    238294        $this->assertArrayHasKey( 'someargoptions', $args );
     
    324380                'somehex',
    325381                'someuuid',
     382                'sometextfield',
     383                'sometextareafield',
    326384                'someenum',
    327385                'someargoptions',
     
    357415                    'somehex',
    358416                    'someuuid',
     417                    'sometextfield',
     418                    'sometextareafield',
    359419                    'someenum',
    360420                    'someargoptions',
  • trunk/tests/phpunit/tests/rest-api/rest-test-controller.php

    r49246 r51908  
    3737            'type'       => 'object',
    3838            'properties' => array(
    39                 'somestring'     => array(
     39                'somestring'        => array(
    4040                    'type'        => 'string',
    4141                    'description' => 'A pretty string.',
     
    4545                    'context'     => array( 'view' ),
    4646                ),
    47                 'someinteger'    => array(
     47                'someinteger'       => array(
    4848                    'type'             => 'integer',
    4949                    'multipleOf'       => 10,
     
    5454                    'context'          => array( 'view' ),
    5555                ),
    56                 'someboolean'    => array(
     56                'someboolean'       => array(
    5757                    'type'    => 'boolean',
    5858                    'context' => array( 'view' ),
    5959                ),
    60                 'someurl'        => array(
     60                'someurl'           => array(
    6161                    'type'    => 'string',
    6262                    'format'  => 'uri',
    6363                    'context' => array( 'view' ),
    6464                ),
    65                 'somedate'       => array(
     65                'somedate'          => array(
    6666                    'type'    => 'string',
    6767                    'format'  => 'date-time',
    6868                    'context' => array( 'view' ),
    6969                ),
    70                 'someemail'      => array(
     70                'someemail'         => array(
    7171                    'type'    => 'string',
    7272                    'format'  => 'email',
    7373                    'context' => array( 'view' ),
    7474                ),
    75                 'somehex'        => array(
     75                'somehex'           => array(
    7676                    'type'    => 'string',
    7777                    'format'  => 'hex-color',
    7878                    'context' => array( 'view' ),
    7979                ),
    80                 'someuuid'       => array(
     80                'someuuid'          => array(
    8181                    'type'    => 'string',
    8282                    'format'  => 'uuid',
    8383                    'context' => array( 'view' ),
    8484                ),
    85                 'someenum'       => array(
     85                'sometextfield'     => array(
     86                    'type'    => 'string',
     87                    'format'  => 'text-field',
     88                    'context' => array( 'view' ),
     89                ),
     90                'sometextareafield' => array(
     91                    'type'    => 'string',
     92                    'format'  => 'textarea-field',
     93                    'context' => array( 'view' ),
     94                ),
     95                'someenum'          => array(
    8696                    'type'    => 'string',
    8797                    'enum'    => array( 'a', 'b', 'c' ),
    8898                    'context' => array( 'view' ),
    8999                ),
    90                 'someargoptions' => array(
     100                'someargoptions'    => array(
    91101                    'type'        => 'integer',
    92102                    'required'    => true,
     
    96106                    ),
    97107                ),
    98                 'somedefault'    => array(
     108                'somedefault'       => array(
    99109                    'type'    => 'string',
    100110                    'enum'    => array( 'a', 'b', 'c' ),
     
    102112                    'default' => 'a',
    103113                ),
    104                 'somearray'      => array(
     114                'somearray'         => array(
    105115                    'type'        => 'array',
    106116                    'items'       => array(
     
    112122                    'context'     => array( 'view' ),
    113123                ),
    114                 'someobject'     => array(
     124                'someobject'        => array(
    115125                    'type'                 => 'object',
    116126                    'additionalProperties' => array(
Note: See TracChangeset for help on using the changeset viewer.