Make WordPress Core

Changeset 51908


Ignore:
Timestamp:
10/15/2021 02:03:38 AM (5 years 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.