mirror of
https://github.com/php/php-src.git
synced 2026-04-30 03:33:17 +02:00
Merge branch 'PHP-7.0' of https://github.com/php/php-src into PHP-7.0
This commit is contained in:
@@ -3,6 +3,8 @@ PHP NEWS
|
||||
?? ??? 2016 PHP 7.0.6
|
||||
|
||||
- Core:
|
||||
. Fixed bug #71930 (_zval_dtor_func: Assertion `(arr)->gc.refcount <= 1'
|
||||
failed). (Laruence)
|
||||
. Fixed bug #71914 (Reference is lost in "switch"). (Laruence)
|
||||
. Fixed Bug #71859 (zend_objects_store_call_destructors operates on realloced
|
||||
memory, crashing). (Laruence)
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
--TEST--
|
||||
Bug #71930 (_zval_dtor_func: Assertion `(arr)->gc.refcount <= 1' failed)
|
||||
--SKIPIF--
|
||||
<?php
|
||||
if (!extension_loaded("curl")) {
|
||||
die("skip Require a resource which is able to hold a callbck");
|
||||
}
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
class A {
|
||||
public static function dummy() {
|
||||
}
|
||||
}
|
||||
|
||||
$a = array();
|
||||
$a[] = "A";
|
||||
$a[] = "dummy";
|
||||
|
||||
$ch1 = curl_init();
|
||||
curl_setopt($ch1, CURLOPT_HEADERFUNCTION, $a);
|
||||
|
||||
set_error_handler($a);
|
||||
set_error_handler(function()use($ch1){});
|
||||
set_error_handler(function(){});
|
||||
?>
|
||||
okey
|
||||
--EXPECT--
|
||||
okey
|
||||
@@ -295,8 +295,8 @@ void shutdown_executor(void) /* {{{ */
|
||||
}
|
||||
|
||||
zend_stack_clean(&EG(user_error_handlers_error_reporting), NULL, 1);
|
||||
zend_stack_clean(&EG(user_error_handlers), (void (*)(void *))ZVAL_DESTRUCTOR, 1);
|
||||
zend_stack_clean(&EG(user_exception_handlers), (void (*)(void *))ZVAL_DESTRUCTOR, 1);
|
||||
zend_stack_clean(&EG(user_error_handlers), (void (*)(void *))ZVAL_PTR_DTOR, 1);
|
||||
zend_stack_clean(&EG(user_exception_handlers), (void (*)(void *))ZVAL_PTR_DTOR, 1);
|
||||
} zend_end_try();
|
||||
|
||||
zend_try {
|
||||
|
||||
@@ -574,6 +574,24 @@ static int odbc_stmt_describe(pdo_stmt_t *stmt, int colno)
|
||||
sizeof(S->cols[colno].colname)-1, &colnamelen,
|
||||
&S->cols[colno].coltype, &colsize, NULL, NULL);
|
||||
|
||||
/* This fixes a known issue with SQL Server and (max) lengths,
|
||||
may affect others as well. If we are SQL_VARCHAR,
|
||||
SQL_VARBINARY, or SQL_WVARCHAR (or any of the long variations)
|
||||
and zero is returned from colsize then consider it long */
|
||||
if (0 == colsize &&
|
||||
(S->cols[colno].coltype == SQL_VARCHAR ||
|
||||
S->cols[colno].coltype == SQL_LONGVARCHAR ||
|
||||
#ifdef SQL_WVARCHAR
|
||||
S->cols[colno].coltype == SQL_WVARCHAR ||
|
||||
#endif
|
||||
#ifdef SQL_WLONGVARCHAR
|
||||
S->cols[colno].coltype == SQL_WLONGVARCHAR ||
|
||||
#endif
|
||||
S->cols[colno].coltype == SQL_VARBINARY ||
|
||||
S->cols[colno].coltype == SQL_LONGVARBINARY)) {
|
||||
S->going_long = 1;
|
||||
}
|
||||
|
||||
if (rc != SQL_SUCCESS) {
|
||||
pdo_odbc_stmt_error("SQLDescribeCol");
|
||||
if (rc != SQL_SUCCESS_WITH_INFO) {
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
--TEST--
|
||||
PDO ODBC varying character with max/no length
|
||||
--SKIPIF--
|
||||
<?php # vim:ft=php
|
||||
if (!extension_loaded('pdo_odbc')) print 'skip not loaded';
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
require 'ext/pdo/tests/pdo_test.inc';
|
||||
$db = PDOTest::test_factory('ext/pdo_odbc/tests/common.phpt');
|
||||
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
|
||||
|
||||
if (false === $db->exec('CREATE TABLE TEST (id INT NOT NULL PRIMARY KEY, data varchar(max))')) {
|
||||
if (false === $db->exec('CREATE TABLE TEST (id INT NOT NULL PRIMARY KEY, data longtext)')) {
|
||||
if (false === $db->exec('CREATE TABLE TEST (id INT NOT NULL PRIMARY KEY, data CLOB)')) {
|
||||
die("BORK: don't know how to create a long column here:\n" . implode(", ", $db->errorInfo()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
||||
|
||||
$sizes = array(32, 64, 128, 253, 254, 255, 256, 257, 258, 512, 1024, 2048, 3998, 3999, 4000);
|
||||
|
||||
$db->beginTransaction();
|
||||
$insert = $db->prepare('INSERT INTO TEST VALUES (?, ?)');
|
||||
foreach ($sizes as $num) {
|
||||
$insert->execute(array($num, str_repeat('i', $num)));
|
||||
}
|
||||
$insert = null;
|
||||
$db->commit();
|
||||
|
||||
foreach ($db->query('SELECT id, data from TEST') as $row) {
|
||||
$expect = str_repeat('i', $row[0]);
|
||||
if (strcmp($expect, $row[1])) {
|
||||
echo "Failed on size $row[id]:\n";
|
||||
printf("Expected %d bytes, got %d\n", strlen($expect), strlen($row['data']));
|
||||
echo bin2hex($expect) . "\n";
|
||||
echo bin2hex($row['data']) . "\n";
|
||||
}
|
||||
}
|
||||
|
||||
echo "Finished\n";
|
||||
|
||||
--EXPECT--
|
||||
Finished
|
||||
Reference in New Issue
Block a user