Annotation of embedaddon/php/ext/pdo_mysql/tests/bug41125.phpt, revision 1.1

1.1     ! misho       1: --TEST--
        !             2: Bug #41125 (PDO mysql + quote() + prepare() can result in seg fault)
        !             3: --SKIPIF--
        !             4: <?php
        !             5: require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'skipif.inc');
        !             6: require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
        !             7: MySQLPDOTest::skip();
        !             8: 
        !             9: ?>
        !            10: --FILE--
        !            11: <?php
        !            12: 
        !            13: require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
        !            14: 
        !            15: $db = PDOTest::test_factory(dirname(__FILE__) . '/common.phpt');
        !            16: 
        !            17: $search = "o'";
        !            18: $sql = "SELECT 1 FROM DUAL WHERE 'o''riley' LIKE " . $db->quote('%' . $search . '%');
        !            19: $stmt = $db->prepare($sql);
        !            20: $stmt->execute();
        !            21: print implode(' - ', (($r = @$stmt->fetch(PDO::FETCH_NUM)) ? $r : array())) ."\n";
        !            22: print implode(' - ', $stmt->errorinfo()) ."\n";
        !            23: 
        !            24: print "-------------------------------------------------------\n";
        !            25: 
        !            26: $queries = array(
        !            27:        "SELECT 1 FROM DUAL WHERE 1 = '?\'\''",
        !            28:        "SELECT 'a\\'0' FROM DUAL WHERE 1 = ?",
        !            29:        "SELECT 'a', 'b\'' FROM DUAL WHERE '''' LIKE '\\'' AND ?",
        !            30:        "SELECT 'foo?bar', '', '''' FROM DUAL WHERE ?"
        !            31: );
        !            32: 
        !            33: foreach ($queries as $k => $query) {
        !            34:        $stmt = $db->prepare($query);
        !            35:        $stmt->execute(array(1));
        !            36:        printf("[%d] Query: [[%s]]\n", $k + 1, $query);
        !            37:        print implode(' - ', (($r = @$stmt->fetch(PDO::FETCH_NUM)) ? $r : array())) ."\n";
        !            38:        print implode(' - ', $stmt->errorinfo()) ."\n";
        !            39:        print "--------\n";
        !            40: }
        !            41: 
        !            42: $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1);
        !            43: $sql = "SELECT upper(:id) FROM DUAL WHERE '1'";
        !            44: $stmt = $db->prepare($sql);
        !            45: 
        !            46: $id = 'o\'\0';
        !            47: $stmt->bindParam(':id', $id);
        !            48: $stmt->execute();
        !            49: printf("Query: [[%s]]\n", $sql);
        !            50: print implode(' - ', (($r = @$stmt->fetch(PDO::FETCH_NUM)) ? $r : array())) ."\n";
        !            51: print implode(' - ', $stmt->errorinfo()) ."\n";
        !            52: 
        !            53: print "-------------------------------------------------------\n";
        !            54: 
        !            55: $queries = array(
        !            56:        "SELECT 1, 'foo' FROM DUAL WHERE 1 = :id AND '\\0' IS NULL AND  2 <> :id",
        !            57:        "SELECT 1 FROM DUAL WHERE 1 = :id AND '' AND  2 <> :id",
        !            58:        "SELECT 1 FROM DUAL WHERE 1 = :id AND '\'\'' = '''' AND  2 <> :id",
        !            59:        "SELECT 1 FROM DUAL WHERE 1 = :id AND '\'' = '''' AND  2 <> :id",
        !            60:        "SELECT 'a', 'b\'' FROM DUAL WHERE '''' LIKE '\\'' AND 1",
        !            61:        "SELECT 'a''', '\'b\'' FROM DUAL WHERE '''' LIKE '\\'' AND 1",
        !            62:        "SELECT UPPER(:id) FROM DUAL WHERE '1'",
        !            63:        "SELECT 1 FROM DUAL WHERE '\''",
        !            64:        "SELECT 1 FROM DUAL WHERE :id AND '\\0' OR :id",
        !            65:        "SELECT 1 FROM DUAL WHERE 'a\\f\\n\\0' AND 1 >= :id",
        !            66:        "SELECT 1 FROM DUAL WHERE '\'' = ''''",
        !            67:        "SELECT '\\n' '1 FROM DUAL WHERE '''' and :id'",
        !            68:        "SELECT 1 'FROM DUAL WHERE :id AND '''' = '''' OR 1 = 1 AND ':id",
        !            69: );
        !            70: 
        !            71: $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1);
        !            72: $id = 1;
        !            73: 
        !            74: foreach ($queries as $k => $query) {
        !            75:        $stmt = $db->prepare($query);
        !            76:        $stmt->bindParam(':id', $id);
        !            77:        $stmt->execute();
        !            78:        
        !            79:        printf("[%d] Query: [[%s]]\n", $k + 1, $query);
        !            80:        print implode(' - ', (($r = @$stmt->fetch(PDO::FETCH_NUM)) ? $r : array())) ."\n";
        !            81:        print implode(' - ', $stmt->errorinfo()) ."\n";
        !            82:        print "--------\n";
        !            83: }
        !            84: 
        !            85: ?>
        !            86: --EXPECT--
        !            87: 1
        !            88: 00000 -  - 
        !            89: -------------------------------------------------------
        !            90: [1] Query: [[SELECT 1 FROM DUAL WHERE 1 = '?\'\'']]
        !            91: 
        !            92: 00000 -  - 
        !            93: --------
        !            94: [2] Query: [[SELECT 'a\'0' FROM DUAL WHERE 1 = ?]]
        !            95: a'0
        !            96: 00000 -  - 
        !            97: --------
        !            98: [3] Query: [[SELECT 'a', 'b\'' FROM DUAL WHERE '''' LIKE '\'' AND ?]]
        !            99: a - b'
        !           100: 00000 -  - 
        !           101: --------
        !           102: [4] Query: [[SELECT 'foo?bar', '', '''' FROM DUAL WHERE ?]]
        !           103: foo?bar -  - '
        !           104: 00000 -  - 
        !           105: --------
        !           106: Query: [[SELECT upper(:id) FROM DUAL WHERE '1']]
        !           107: O'\0
        !           108: 00000 -  - 
        !           109: -------------------------------------------------------
        !           110: [1] Query: [[SELECT 1, 'foo' FROM DUAL WHERE 1 = :id AND '\0' IS NULL AND  2 <> :id]]
        !           111: 
        !           112: 00000 -  - 
        !           113: --------
        !           114: [2] Query: [[SELECT 1 FROM DUAL WHERE 1 = :id AND '' AND  2 <> :id]]
        !           115: 
        !           116: 00000 -  - 
        !           117: --------
        !           118: [3] Query: [[SELECT 1 FROM DUAL WHERE 1 = :id AND '\'\'' = '''' AND  2 <> :id]]
        !           119: 
        !           120: 00000 -  - 
        !           121: --------
        !           122: [4] Query: [[SELECT 1 FROM DUAL WHERE 1 = :id AND '\'' = '''' AND  2 <> :id]]
        !           123: 1
        !           124: 00000 -  - 
        !           125: --------
        !           126: [5] Query: [[SELECT 'a', 'b\'' FROM DUAL WHERE '''' LIKE '\'' AND 1]]
        !           127: a - b'
        !           128: 00000 -  - 
        !           129: --------
        !           130: [6] Query: [[SELECT 'a''', '\'b\'' FROM DUAL WHERE '''' LIKE '\'' AND 1]]
        !           131: a' - 'b'
        !           132: 00000 -  - 
        !           133: --------
        !           134: [7] Query: [[SELECT UPPER(:id) FROM DUAL WHERE '1']]
        !           135: 1
        !           136: 00000 -  - 
        !           137: --------
        !           138: [8] Query: [[SELECT 1 FROM DUAL WHERE '\'']]
        !           139: 
        !           140: 00000 -  - 
        !           141: --------
        !           142: [9] Query: [[SELECT 1 FROM DUAL WHERE :id AND '\0' OR :id]]
        !           143: 1
        !           144: 00000 -  - 
        !           145: --------
        !           146: [10] Query: [[SELECT 1 FROM DUAL WHERE 'a\f\n\0' AND 1 >= :id]]
        !           147: 
        !           148: 00000 -  - 
        !           149: --------
        !           150: [11] Query: [[SELECT 1 FROM DUAL WHERE '\'' = '''']]
        !           151: 1
        !           152: 00000 -  - 
        !           153: --------
        !           154: [12] Query: [[SELECT '\n' '1 FROM DUAL WHERE '''' and :id']]
        !           155: 
        !           156: 1 FROM DUAL WHERE '' and :id
        !           157: 00000 -  - 
        !           158: --------
        !           159: [13] Query: [[SELECT 1 'FROM DUAL WHERE :id AND '''' = '''' OR 1 = 1 AND ':id]]
        !           160: 1
        !           161: 00000 -  - 
        !           162: --------

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