Annotation of embedaddon/php/ext/mysqli/tests/mysqli_insert_packet_overflow.phpt, revision 1.1

1.1     ! misho       1: --TEST--
        !             2: INSERT and packet overflow
        !             3: --SKIPIF--
        !             4: <?php
        !             5: require_once('skipif.inc');
        !             6: require_once('skipifconnectfailure.inc');
        !             7: 
        !             8: if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
        !             9:        die(sprintf("SKIP [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()));
        !            10: 
        !            11: $max_len = pow(2, 24);
        !            12: if (!$res = mysqli_query($link, "SHOW GLOBAL VARIABLES LIKE 'max_allowed_packet'"))
        !            13:        die(sprintf("SKIP [%d] %s\n", mysqli_errno($link), mysqli_error($link)));
        !            14: 
        !            15: if (!mysqli_query($link, "SET NAMES 'latin1'"))
        !            16:        die(sprintf("SKIP [%d] %s\n", mysqli_errno($link), mysqli_error($link)));
        !            17: 
        !            18: mysqli_close($link);
        !            19: ?>
        !            20: --INI--
        !            21: memory_limit=256M
        !            22: --FILE--
        !            23: <?php
        !            24:        require('connect.inc');
        !            25:        if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
        !            26:                printf("[001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
        !            27: 
        !            28:        if (!$res = mysqli_query($link, "SHOW GLOBAL VARIABLES LIKE 'max_allowed_packet'"))
        !            29:                printf("[002] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
        !            30: 
        !            31:        if (!$row = mysqli_fetch_assoc($res))
        !            32:                printf("[003] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
        !            33: 
        !            34:        mysqli_free_result($res);
        !            35: 
        !            36:        if (0 === ($org_max_allowed_packet = (int)$row['Value']))
        !            37:                printf("[004] Cannot determine max_allowed_packet size and/or bogus max_allowed_packet setting used.\n");
        !            38: 
        !            39:        $max_len = pow(2, 24);
        !            40:        if ($org_max_allowed_packet < $max_len) {
        !            41:                if (!mysqli_query($link, "SET GLOBAL max_allowed_packet = " . ($max_len + 100))) {
        !            42:                        if (1227 == mysqli_errno($link)) {
        !            43:                                /* [1227] Access denied; you need the SUPER privilege for this operation */
        !            44:                                print "done!";
        !            45:                                exit(0);
        !            46:                        } else {
        !            47:                                printf("[005] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
        !            48:                        }
        !            49:                }
        !            50:        }
        !            51:        mysqli_close($link);
        !            52:        if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
        !            53:                printf("[006] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
        !            54: 
        !            55:        if (!mysqli_query($link, "SET NAMES 'latin1'"))
        !            56:                printf("[007] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
        !            57: 
        !            58:        if (!$res = mysqli_query($link, "SHOW GLOBAL VARIABLES LIKE 'max_allowed_packet'"))
        !            59:                printf("[008] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
        !            60: 
        !            61:        if (!$row = mysqli_fetch_assoc($res))
        !            62:                printf("[009] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
        !            63: 
        !            64:        mysqli_free_result($res);
        !            65: 
        !            66:        if (0 === ($max_allowed_packet = (int)$row['Value']))
        !            67:                printf("[010] Cannot determine max_allowed_packet size and/or bogus max_allowed_packet setting used.\n");
        !            68: 
        !            69:        $max_len = pow(2, 24);
        !            70:        if ($max_allowed_packet < $max_len) {
        !            71:                printf("[011] Failed to change max_allowed_packet");
        !            72:        }
        !            73: 
        !            74:        if (!mysqli_query($link, "CREATE TABLE test(col_blob LONGBLOB) ENGINE=" . $engine))
        !            75:                printf("[012] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
        !            76: 
        !            77:        $query_prefix = "INSERT INTO test(col_blob) VALUES ('";
        !            78:        $query_postfix = "')";
        !            79:        $query_len = strlen($query_prefix) + strlen($query_postfix);
        !            80:        $com_query_len = 2;
        !            81: 
        !            82: 
        !            83:        $blob = str_repeat('a', $max_len - $com_query_len - $query_len);
        !            84:        $query = sprintf("%s%s%s", $query_prefix, $blob, $query_postfix);
        !            85: 
        !            86:        if (!mysqli_query($link, $query))
        !            87:                printf("[013] max_allowed_packet = %d, strlen(query) = %d, [%d] %s\n", $max_allowed_packet, strlen($query), mysqli_errno($link), mysqli_error($link));
        !            88: 
        !            89:        if (!$res = mysqli_query($link, "SELECT col_blob FROM test"))
        !            90:                printf("[014] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
        !            91: 
        !            92:        if (!$row = mysqli_fetch_assoc($res)) {
        !            93:                printf("[015] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
        !            94:        } else {
        !            95:                if ($row['col_blob'] != $blob) {
        !            96:                        printf("[016] Blob seems wrong, dumping data\n");
        !            97:                        var_dump(strlen($row['col_blob']));
        !            98:                        var_dump(strlen($blob));
        !            99:                }
        !           100:                mysqli_free_result($res);
        !           101:        }
        !           102: 
        !           103:        if (!mysqli_query($link, "SET GLOBAL max_allowed_packet = " . $org_max_allowed_packet))
        !           104:                if (1227 != mysqli_errno($link))
        !           105:                        printf("[017] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
        !           106: 
        !           107:        mysqli_close($link);
        !           108: 
        !           109:        print "done!";
        !           110: ?>
        !           111: --CLEAN--
        !           112: <?php
        !           113:        require_once("clean_table.inc");
        !           114: ?>
        !           115: --EXPECTF--
        !           116: done!

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>