Make WordPress Core

Changeset 42226


Ignore:
Timestamp:
11/24/2017 05:51:31 AM (9 years ago)
Author:
dd32
Message:

WPDB: Fix the parsing of sockets which contain colons within the socket name (used on some cloud providers).

Props natacado.
Fixes #42634 for trunk.

Location:
trunk
Files:
2 edited

Legend:

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

    r42201 r42226  
    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
     
    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 ];
  • trunk/tests/phpunit/tests/db.php

    r42056 r42226  
    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,
     
    15761584                        ),
    15771585                        array(
     1586                                '127.0.0.1:3306:/tmp/mysql:with_colon.sock',
     1587                                false,
     1588                                '127.0.0.1',
     1589                                '3306',
     1590                                '/tmp/mysql:with_colon.sock',
     1591                                false,
     1592                        ),
     1593                        array(
    15781594                                'example.com',
    15791595                                false,
     
    16081624                        ),
    16091625                        array(
     1626                                'localhost:/tmp/mysql:with_colon.sock',
     1627                                false,
     1628                                'localhost',
     1629                                null,
     1630                                '/tmp/mysql:with_colon.sock',
     1631                                false,
     1632                        ),
     1633                        array(
    16101634                                '0000:0000:0000:0000:0000:0000:0000:0001',
    16111635                                false,
     
    16401664                        ),
    16411665                        array(
     1666                                '[::1]:3306:/tmp/mysql:with_colon.sock',
     1667                                false,
     1668                                '::1',
     1669                                '3306',
     1670                                '/tmp/mysql:with_colon.sock',
     1671                                true,
     1672                        ),
     1673                        array(
    16421674                                '2001:0db8:0000:0000:0000:ff00:0042:8329',
    16431675                                false,
Note: See TracChangeset for help on using the changeset viewer.