WordPress.org

Make WordPress Core

Ticket #42634: 42634-fix-socket-parsing-ipv6.diff

File 42634-fix-socket-parsing-ipv6.diff, 1.7 KB (added by natacado, 3 years ago)

Socket parsing fix

  • src/wp-includes/wp-db.php

     
    16431643                $socket  = null;
    16441644                $is_ipv6 = false;
    16451645
     1646                // First peel off the socket parameter from the right, if it exists.
     1647                $socket_pos = strpos( $host, ':/' );
     1648                if ( $socket_pos !== false ) {
     1649                        $socket = substr( $host, $socket_pos + 1 );
     1650                        $host = substr( $host, 0, $socket_pos );
     1651                }
     1652
    16461653                // We need to check for an IPv6 address first.
    16471654                // An IPv6 address will always contain at least two colons.
    16481655                if ( substr_count( $host, ':' ) > 1 ) {
    1649                         $pattern = '#^(?:\[)?(?<host>[0-9a-fA-F:]+)(?:\]:(?<port>[\d]+))?(?:/(?<socket>.+))?#';
     1656                        $pattern = '#^(?:\[)?(?<host>[0-9a-fA-F:]+)(?:\]:(?<port>[\d]+))?#';
    16501657                        $is_ipv6 = true;
    16511658                } else {
    16521659                        // We seem to be dealing with an IPv4 address.
    1653                         $pattern = '#^(?<host>[^:/]*)(?::(?<port>[\d]+))?(?::(?<socket>.+))?#';
     1660                        $pattern = '#^(?<host>[^:/]*)(?::(?<port>[\d]+))?#';
    16541661                }
    16551662
    16561663                $matches = array();
     
    16621669                }
    16631670
    16641671                $host = '';
    1665                 foreach ( array( 'host', 'port', 'socket' ) as $component ) {
     1672                foreach ( array( 'host', 'port' ) as $component ) {
    16661673                        if ( ! empty( $matches[ $component ] ) ) {
    16671674                                $$component = $matches[ $component ];
    16681675                        }
  • tests/phpunit/tests/db.php

     
    15591559                                false,
    15601560                        ),
    15611561                        array(
     1562                                ':/tmp/mysql:with_colon.sock',
     1563                                false,
     1564                                '',
     1565                                null,
     1566                                '/tmp/mysql:with_colon.sock',
     1567                                false,
     1568                        ),
     1569                        array(
    15621570                                '127.0.0.1',
    15631571                                false,
    15641572                                '127.0.0.1',