1
0
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:
Joe Watkins
2016-04-03 12:41:23 +01:00
5 changed files with 98 additions and 2 deletions
+2
View File
@@ -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)
+30
View File
@@ -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
+2 -2
View File
@@ -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 {
+18
View File
@@ -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) {
+46
View File
@@ -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