Make WordPress Core

Changeset 59411


Ignore:
Timestamp:
11/18/2024 01:37:52 PM (3 months ago)
Author:
cbravobernal
Message:

HTML API: Fix normalized doctype pub/sys identifier quotes.

Changeset [59399] fixed missing DOCTYPEs in normalized HTML output. It missed an edge case where public and system identifiers may contain double quotes, in which case they must be quoted with single quotes.

This commit addresses that issue and adds tests.

Follow-up to [59399].

Reviewed by cbravobernal.
Merges [59410] to the 6.7 branch.

Props jonsurrell, luisherranz, apermo.
Fixes #62396.

Location:
branches/6.7
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/6.7

  • branches/6.7/src/wp-includes/html-api/class-wp-html-processor.php

    r59401 r59411  
    11711171
    11721172                if ( null !== $doctype->public_identifier ) {
    1173                     $html .= " PUBLIC \"{$doctype->public_identifier}\"";
     1173                    $quote = str_contains( $doctype->public_identifier, '"' ) ? "'" : '"';
     1174                    $html .= " PUBLIC {$quote}{$doctype->public_identifier}{$quote}";
    11741175                }
    11751176                if ( null !== $doctype->system_identifier ) {
     
    11771178                        $html .= ' SYSTEM';
    11781179                    }
    1179                     $html .= " \"{$doctype->system_identifier}\"";
    1180                 }
     1180                    $quote = str_contains( $doctype->system_identifier, '"' ) ? "'" : '"';
     1181                    $html .= " {$quote}{$doctype->system_identifier}{$quote}";
     1182                }
     1183
    11811184                $html .= '>';
    11821185                break;
  • branches/6.7/tests/phpunit/tests/html-api/wpHtmlProcessor-serialize.php

    r59401 r59411  
    308308    public static function data_provider_serialize_doctype() {
    309309        return array(
    310             'None'                   => array( '', '' ),
    311             'Empty'                  => array( '<!DOCTYPE>', '<!DOCTYPE>' ),
    312             'HTML5'                  => array( '<!DOCTYPE html>', '<!DOCTYPE html>' ),
    313             'Strange name'           => array( '<!DOCTYPE WordPress>', '<!DOCTYPE wordpress>' ),
    314             'With public'            => array( '<!DOCTYPE html PUBLIC "x">', '<!DOCTYPE html PUBLIC "x">' ),
    315             'With system'            => array( '<!DOCTYPE html SYSTEM "y">', '<!DOCTYPE html SYSTEM "y">' ),
    316             'With public and system' => array( '<!DOCTYPE html PUBLIC "x" "y">', '<!DOCTYPE html PUBLIC "x" "y">' ),
    317             'Weird casing'           => array( '<!docType HtmL pubLIc\'xxx\'"yyy" all this is ignored>', '<!DOCTYPE html PUBLIC "xxx" "yyy">' ),
     310            'None'                       => array( '', '' ),
     311            'Empty'                      => array( '<!DOCTYPE>', '<!DOCTYPE>' ),
     312            'HTML5'                      => array( '<!DOCTYPE html>', '<!DOCTYPE html>' ),
     313            'Strange name'               => array( '<!DOCTYPE WordPress>', '<!DOCTYPE wordpress>' ),
     314            'With public'                => array( '<!DOCTYPE html PUBLIC "x">', '<!DOCTYPE html PUBLIC "x">' ),
     315            'With system'                => array( '<!DOCTYPE html SYSTEM "y">', '<!DOCTYPE html SYSTEM "y">' ),
     316            'With public and system'     => array( '<!DOCTYPE html PUBLIC "x" "y">', '<!DOCTYPE html PUBLIC "x" "y">' ),
     317            'Weird casing'               => array( '<!docType HtmL pubLIc\'xxx\'"yyy" all this is ignored>', '<!DOCTYPE html PUBLIC "xxx" "yyy">' ),
     318            'Single quotes in public ID' => array( '<!DOCTYPE html PUBLIC "\'quoted\'">', '<!DOCTYPE html PUBLIC "\'quoted\'">' ),
     319            'Double quotes in public ID' => array( '<!DOCTYPE html PUBLIC \'"quoted"\'\>', '<!DOCTYPE html PUBLIC \'"quoted"\'>' ),
     320            'Single quotes in system ID' => array( '<!DOCTYPE html SYSTEM "\'quoted\'">', '<!DOCTYPE html SYSTEM "\'quoted\'">' ),
     321            'Double quotes in system ID' => array( '<!DOCTYPE html SYSTEM \'"quoted"\'\>', '<!DOCTYPE html SYSTEM \'"quoted"\'>' ),
    318322        );
    319323    }
Note: See TracChangeset for help on using the changeset viewer.