mirror of
https://github.com/bdnugget/php-src.git
synced 2026-11-09 02:00:49 +00:00
Compare commits
191
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
197a7083df | ||
|
|
13389613fa | ||
|
|
f98f4875df | ||
|
|
b1680c5fe3 | ||
|
|
8cb114413f | ||
|
|
1e0f53278d | ||
|
|
d4f7e8cedc | ||
|
|
a1fdfa700b | ||
|
|
0a36d417e8 | ||
|
|
a04fac84e7 | ||
|
|
600402d986 | ||
|
|
340a06778c | ||
|
|
da3a807f22 | ||
|
|
454d297564 | ||
|
|
7a8ffcec7d | ||
|
|
29fa4d203a | ||
|
|
0826a54836 | ||
|
|
25f5a1b2e1 | ||
|
|
eebcfeb68e | ||
|
|
0a181ca27a | ||
|
|
9688071679 | ||
|
|
50f476591f | ||
|
|
39d8fc1edc | ||
|
|
206fd35a98 | ||
|
|
75cb678206 | ||
|
|
498eb8e052 | ||
|
|
688e56d0ac | ||
|
|
838951c2d6 | ||
|
|
bc7ea73da5 | ||
|
|
538f95b1b7 | ||
|
|
c483b59124 | ||
|
|
06bfada99b | ||
|
|
bccca0b53a | ||
|
|
4be867e910 | ||
|
|
a08847ab39 | ||
|
|
4adc08a403 | ||
|
|
5e4ee3d0bd | ||
|
|
eb1d1fe373 | ||
|
|
f448b0e6dd | ||
|
|
282355efd5 | ||
|
|
c93b461ad7 | ||
|
|
fc4cd598a2 | ||
|
|
703bbf5210 | ||
|
|
f901bec494 | ||
|
|
5787f91c55 | ||
|
|
8fc0bdfb0a | ||
|
|
797edd6211 | ||
|
|
e0e167e581 | ||
|
|
51e2015af3 | ||
|
|
71297a254b | ||
|
|
2c508c4d40 | ||
|
|
e857936518 | ||
|
|
988c3f9659 | ||
|
|
ae0585c98e | ||
|
|
a480bf8093 | ||
|
|
8309c04464 | ||
|
|
766f827e26 | ||
|
|
3ec37a74a2 | ||
|
|
78b0a85de6 | ||
|
|
67bb06cc9b | ||
|
|
729cd8bacd | ||
|
|
81396ea890 | ||
|
|
963e50c8c4 | ||
|
|
073b6ea818 | ||
|
|
d7c98ca1ac | ||
|
|
6dd85f83f7 | ||
|
|
84b6152842 | ||
|
|
9552cf6b84 | ||
|
|
2d858fbfb1 | ||
|
|
6d3d9104e6 | ||
|
|
7566742754 | ||
|
|
64b1085464 | ||
|
|
7b7d99839c | ||
|
|
3646604203 | ||
|
|
44a80b64b9 | ||
|
|
c34c523467 | ||
|
|
4f508003a9 | ||
|
|
03713ace23 | ||
|
|
ca7547c9e2 | ||
|
|
4ff2665509 | ||
|
|
3f8d21b922 | ||
|
|
8b7aaad7d6 | ||
|
|
958e3b93c3 | ||
|
|
06c9633b43 | ||
|
|
1bb2a4f91c | ||
|
|
3d09626f0d | ||
|
|
039ca4e219 | ||
|
|
8c04944b66 | ||
|
|
54fa0a69f8 | ||
|
|
51d76c346e | ||
|
|
675a9b2831 | ||
|
|
57257a4335 | ||
|
|
7e9479083d | ||
|
|
217b9e7b41 | ||
|
|
ab8177de2c | ||
|
|
86de4d7af6 | ||
|
|
3c939e3f69 | ||
|
|
aeb4f21549 | ||
|
|
067f7e4150 | ||
|
|
21f861225a | ||
|
|
9c673083cd | ||
|
|
fbf8c758fe | ||
|
|
4a89e726bd | ||
|
|
6a0b889f57 | ||
|
|
94af11d5e1 | ||
|
|
61ed904cec | ||
|
|
3f183bbcf8 | ||
|
|
072cfef1d5 | ||
|
|
491488d217 | ||
|
|
edb389730d | ||
|
|
6adfb8c962 | ||
|
|
4c1b3e3036 | ||
|
|
a33d0c3aae | ||
|
|
e8a89c49db | ||
|
|
5d31ee302d | ||
|
|
68f5289e9e | ||
|
|
38ad37ad43 | ||
|
|
25103c37aa | ||
|
|
9450893dc6 | ||
|
|
d1b1c04398 | ||
|
|
5c963731e2 | ||
|
|
6b631f073d | ||
|
|
46d6daea7a | ||
|
|
e65932060a | ||
|
|
ec589a27da | ||
|
|
65d7ade684 | ||
|
|
2498385dd9 | ||
|
|
8967e66559 | ||
|
|
434c2b1bdb | ||
|
|
128fca4037 | ||
|
|
2d3d72412a | ||
|
|
0db6f5267c | ||
|
|
70dfbe0068 | ||
|
|
b043759cb4 | ||
|
|
bc166844e3 | ||
|
|
315f3f8dc9 | ||
|
|
118ff03335 | ||
|
|
078cdd8f76 | ||
|
|
a53d67ceac | ||
|
|
c0a1c2c5ee | ||
|
|
40d9e3ab86 | ||
|
|
54248b18fe | ||
|
|
10c9d615de | ||
|
|
a221e17b41 | ||
|
|
e450621f5e | ||
|
|
4922049213 | ||
|
|
f3d5877845 | ||
|
|
44b234a9bc | ||
|
|
20e75329f2 | ||
|
|
65f5573bc8 | ||
|
|
bd093ad861 | ||
|
|
a83cc03c13 | ||
|
|
8588ae7215 | ||
|
|
8f8e6f95af | ||
|
|
0f6c41c6f8 | ||
|
|
0697a64f7e | ||
|
|
5d5c1cea5f | ||
|
|
d386ed1e6b | ||
|
|
f2833ca1be | ||
|
|
d6fcaf5da4 | ||
|
|
c283f53b24 | ||
|
|
ecee3f1209 | ||
|
|
5e15c9c41f | ||
|
|
b855907f54 | ||
|
|
685708160e | ||
|
|
3430d856ac | ||
|
|
4e30ab33d8 | ||
|
|
07c5efbd76 | ||
|
|
4a10037cb4 | ||
|
|
0f579fd7c8 | ||
|
|
5240f8391f | ||
|
|
ea372e7463 | ||
|
|
2fb12be84c | ||
|
|
233f507fe6 | ||
|
|
e3e67b721f | ||
|
|
97d192b444 | ||
|
|
706241f82d | ||
|
|
d016434ad3 | ||
|
|
39f95f5614 | ||
|
|
5f9c82d514 | ||
|
|
fa713ec17b | ||
|
|
221345a013 | ||
|
|
ed949a1973 | ||
|
|
881e43a03c | ||
|
|
c2b1182879 | ||
|
|
99a8ec6e24 | ||
|
|
79a606bd95 | ||
|
|
df7417d127 | ||
|
|
78773890f6 | ||
|
|
eda7492604 | ||
|
|
c1f8dd4a33 |
No files matched your search
@@ -11,9 +11,7 @@ end
|
||||
|
||||
define ____executor_globals
|
||||
if basic_functions_module.zts
|
||||
if !$tsrm_ls
|
||||
set $tsrm_ls = ts_resource_ex(0, 0)
|
||||
end
|
||||
set $tsrm_ls = _tsrm_ls_cache
|
||||
set $eg = ((zend_executor_globals*) (*((void ***) $tsrm_ls))[executor_globals_id-1])
|
||||
set $cg = ((zend_compiler_globals*) (*((void ***) $tsrm_ls))[compiler_globals_id-1])
|
||||
set $eg_ptr = $eg
|
||||
@@ -352,7 +350,8 @@ define ____print_ht
|
||||
end
|
||||
printf "[%d] ", $i
|
||||
if $p->key
|
||||
printf "%s => ", $p->key->val
|
||||
____print_str $p->key->val $p->key->len
|
||||
printf " => "
|
||||
else
|
||||
printf "%d => ", $p->h
|
||||
end
|
||||
|
||||
@@ -70,10 +70,13 @@ jobs:
|
||||
include:
|
||||
- env: ENABLE_MAINTAINER_ZTS=0 ENABLE_DEBUG=0
|
||||
arch: amd64
|
||||
if: type = cron
|
||||
- env: ENABLE_MAINTAINER_ZTS=1 ENABLE_DEBUG=1
|
||||
arch: amd64
|
||||
if: type = cron
|
||||
- env: ENABLE_MAINTAINER_ZTS=1 ENABLE_DEBUG=1 SKIP_IO_CAPTURE_TESTS=1 ARM64=1
|
||||
arch: arm64
|
||||
if: type = cron
|
||||
|
||||
before_script:
|
||||
- ccache --version
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
--------------------------------------------------------------------
|
||||
The PHP License, version 3.01
|
||||
Copyright (c) 1999 - 2019 The PHP Group. All rights reserved.
|
||||
Copyright (c) 1999 - 2021 The PHP Group. All rights reserved.
|
||||
--------------------------------------------------------------------
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
|
||||
@@ -1,5 +1,210 @@
|
||||
PHP NEWS
|
||||
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||
29 Apr 2021, PHP 7.4.18
|
||||
|
||||
- Core:
|
||||
. Fixed bug #80781 (Error handler that throws ErrorException infinite loop).
|
||||
(Nikita)
|
||||
. Fixed bug #75776 (Flushing streams with compression filter is broken). (cmb)
|
||||
|
||||
- Dba:
|
||||
. Fixed bug #80817 (dba_popen() may cause segfault during RSHUTDOWN). (cmb)
|
||||
|
||||
- DOM:
|
||||
. Fixed bug #66783 (UAF when appending DOMDocument to element). (cmb)
|
||||
|
||||
- FPM:
|
||||
. Fixed bug #80024 (Duplication of info about inherited socket after pool
|
||||
removing). (Jakub Zelenka)
|
||||
|
||||
- FTP:
|
||||
. Fixed bug #80880 (SSL_read on shutdown, ftp/proc_open). (cmb, Jakub
|
||||
Zelenka)
|
||||
|
||||
- Imap:
|
||||
. Fixed bug #80710 (imap_mail_compose() header injection). (cmb, Stas)
|
||||
|
||||
- Intl:
|
||||
. Fixed bug #80763 (msgfmt_format() does not accept DateTime references).
|
||||
(cmb)
|
||||
|
||||
- LibXML:
|
||||
. Fixed bug #51903 (simplexml_load_file() doesn't use HTTP headers). (cmb)
|
||||
. Fixed bug #73533 (Invalid memory access in php_libxml_xmlCheckUTF8). (cmb)
|
||||
|
||||
- MySQLnd:
|
||||
. Fixed bug #80713 (SegFault when disabling ATTR_EMULATE_PREPARES and
|
||||
MySQL 8.0). (Nikita)
|
||||
. Fixed bug #80837 (Calling stmt_store_result after fetch doesn't throw an
|
||||
error). (Kamil Tekiela)
|
||||
|
||||
- Opcache:
|
||||
. Fixed bug #80805 (create simple class and get error in opcache.so). (Nikita)
|
||||
. Fixed bug #80950 (Variables become null in if statements). (Nikita)
|
||||
|
||||
- Pcntl:
|
||||
. Fixed bug #79812 (Potential integer overflow in pcntl_exec()). (cmb)
|
||||
|
||||
- PCRE:
|
||||
. Fixed bug #80866 (preg_split ignores limit flag when pattern with \K has
|
||||
0-width fullstring match). (Kamil Tekiela)
|
||||
|
||||
- PDO_ODBC:
|
||||
. Fixed bug #80783 (PDO ODBC truncates BLOB records at every 256th byte).
|
||||
(cmb)
|
||||
|
||||
- PDO_pgsql:
|
||||
. Fixed bug #80892 (PDO::PARAM_INT is treated the same as PDO::PARAM_STR).
|
||||
(Matteo)
|
||||
|
||||
- phpdbg:
|
||||
. Fixed bug #80757 (Exit code is 0 when could not open file). (Felipe)
|
||||
|
||||
- Session:
|
||||
. Fixed bug #80774 (session_name() problem with backslash). (cmb)
|
||||
. Fixed bug #80889 (Cannot set save handler when save_handler is invalid).
|
||||
(cmb)
|
||||
|
||||
- SOAP:
|
||||
. Fixed bug #69668 (SOAP special XML characters in namespace URIs not
|
||||
encoded). (cmb)
|
||||
|
||||
- Standard:
|
||||
. Fixed bug #78719 (http wrapper silently ignores long Location headers).
|
||||
(cmb)
|
||||
. Fixed bug #80771 (phpinfo(INFO_CREDITS) displays nothing in CLI). (cmb)
|
||||
. Fixed bug #80838 (HTTP wrapper waits for HTTP 1 response after HTTP 101).
|
||||
(manuelm)
|
||||
. Fixed bug #80915 (Taking a reference to $_SERVER hides its values from
|
||||
phpinfo()). (Rowan Tommins)
|
||||
|
||||
04 Mar 2021, php 7.4.16
|
||||
|
||||
- Core:
|
||||
. Fixed #80706 (mail(): Headers after Bcc headers may be ignored). (cmb)
|
||||
|
||||
- MySQLnd:
|
||||
. Fixed bug #78680 (mysqlnd's mysql_clear_password does not transmit
|
||||
null-terminated password). (Daniel Black)
|
||||
|
||||
- MySQLi:
|
||||
. Fixed bug #74779 (x() and y() truncating floats to integers). (cmb)
|
||||
|
||||
- OPcache:
|
||||
. Fixed bug #80682 (opcache doesn't honour pcre.jit option). (Remi)
|
||||
|
||||
- OpenSSL:
|
||||
. Fixed bug #80747 (Providing RSA key size < 512 generates key that crash
|
||||
PHP). (Nikita)
|
||||
|
||||
- Phar:
|
||||
. Fixed bug #75850 (Unclear error message wrt. __halt_compiler() w/o
|
||||
semicolon) (cmb)
|
||||
. Fixed bug #70091 (Phar does not mark UTF-8 filenames in ZIP archives). (cmb)
|
||||
. Fixed bug #53467 (Phar cannot compress large archives). (cmb, lserni)
|
||||
|
||||
- SPL:
|
||||
. Fixed bug#80719 (Iterating after failed ArrayObject::setIteratorClass()
|
||||
causes Segmentation fault). (Nikita)
|
||||
|
||||
- Standard:
|
||||
. Fixed bug #80654 (file_get_contents() maxlen fails above (2**31)-1 bytes).
|
||||
(cmb)
|
||||
|
||||
- Zip:
|
||||
. Fixed bug #80648 (Fix for bug 79296 should be based on runtime version).
|
||||
(cmb, Remi)
|
||||
|
||||
04 Feb 2021, PHP 7.4.15
|
||||
|
||||
- Core:
|
||||
. Fixed bug #80523 (bogus parse error on >4GB source code). (Nikita)
|
||||
. Fixed bug #80384 (filter buffers entire read until file closed). (Adam
|
||||
Seitz, cmb)
|
||||
|
||||
- Curl:
|
||||
. Fixed bug #80595 (Resetting POSTFIELDS to empty array breaks request). (cmb)
|
||||
|
||||
- Date:
|
||||
. Fixed bug #80376 (last day of the month causes runway cpu usage. (Derick)
|
||||
|
||||
- MySQLi:
|
||||
. Fixed bug #67983 (mysqlnd with MYSQLI_OPT_INT_AND_FLOAT_NATIVE fails to
|
||||
interpret bit columns). (Nikita)
|
||||
. Fixed bug #64638 (Fetching resultsets from stored procedure with cursor
|
||||
fails). (Nikita)
|
||||
. Fixed bug #72862 (segfault using prepared statements on stored procedures
|
||||
that use a cursor). (Nikita)
|
||||
. Fixed bug #77935 (Crash in mysqlnd_fetch_stmt_row_cursor when calling an SP
|
||||
with a cursor). (Nikita)
|
||||
|
||||
- Phar:
|
||||
. Fixed bug #77565 (Incorrect locator detection in ZIP-based phars). (cmb)
|
||||
. Fixed bug #69279 (Compressed ZIP Phar extractTo() creates garbage files).
|
||||
(cmb)
|
||||
|
||||
07 Jan 2021, PHP 7.4.14
|
||||
|
||||
- Core:
|
||||
. Fixed bug #74558 (Can't rebind closure returned by Closure::fromCallable()).
|
||||
(cmb)
|
||||
. Fixed bug #80345 (PHPIZE configuration has outdated PHP_RELEASE_VERSION).
|
||||
(cmb)
|
||||
. Fixed bug #72964 (White space not unfolded for CC/Bcc headers). (cmb)
|
||||
. Fixed bug #80362 (Running dtrace scripts can cause php to crash).
|
||||
(al at coralnet dot name)
|
||||
. Fixed bug #80393 (Build of PHP extension fails due to configuration gap
|
||||
with libtool). (kir dot morozov at gmail dot com)
|
||||
. Fixed bug #80402 (configure filtering out -lpthread). (Nikita)
|
||||
. Fixed bug #77069 (stream filter loses final block of data). (cmb)
|
||||
|
||||
- Fileinfo:
|
||||
. Fixed bug #77961 (finfo_open crafted magic parsing SIGABRT). (cmb)
|
||||
|
||||
- FPM:
|
||||
. Fixed bug #69625 (FPM returns 200 status on request without
|
||||
SCRIPT_FILENAME env). (Jakub Zelenka)
|
||||
|
||||
- Intl:
|
||||
. Fixed bug #80425 (MessageFormatAdapter::getArgTypeList redefined). (Nikita)
|
||||
|
||||
- OpenSSL:
|
||||
. Fixed bug #80368 (OpenSSL extension fails to build against LibreSSL due to
|
||||
lack of OCB support). (Nikita)
|
||||
|
||||
- Phar:
|
||||
. Fixed bug #73809 (Phar Zip parse crash - mmap fail). (cmb)
|
||||
. Fixed bug #75102 (`PharData` says invalid checksum for valid tar). (cmb)
|
||||
. Fixed bug #77322 (PharData::addEmptyDir('/') Possible integer overflow).
|
||||
(cmb)
|
||||
|
||||
- PDO MySQL:
|
||||
. Fixed bug #80458 (PDOStatement::fetchAll() throws for upsert queries).
|
||||
(Kamil Tekiela)
|
||||
. Fixed bug #63185 (nextRowset() ignores MySQL errors with native prepared
|
||||
statements). (Nikita)
|
||||
. Fixed bug #78152 (PDO::exec() - Bad error handling with multiple commands).
|
||||
(Nikita)
|
||||
. Fixed bug #70066 (Unexpected "Cannot execute queries while other unbuffered
|
||||
queries"). (Nikita)
|
||||
. Fixed bug #71145 (Multiple statements in init command triggers unbuffered
|
||||
query error). (Nikita)
|
||||
. Fixed bug #76815 (PDOStatement cannot be GCed/closeCursor-ed when a
|
||||
PROCEDURE resultset SIGNAL). (Nikita)
|
||||
|
||||
- Standard:
|
||||
. Fixed bug #77423 (FILTER_VALIDATE_URL accepts URLs with invalid userinfo).
|
||||
(CVE-2020-7071) (cmb)
|
||||
. Fixed bug #80366 (Return Value of zend_fstat() not Checked). (sagpant, cmb)
|
||||
. Fixed bug #80411 (References to null-serialized object break serialize()).
|
||||
(Nikita)
|
||||
|
||||
- Tidy:
|
||||
. Fixed bug #77594 (ob_tidyhandler is never reset). (cmb)
|
||||
|
||||
- Zlib:
|
||||
. Fixed #48725 (Support for flushing in zlib stream). (cmb)
|
||||
|
||||
26 Nov 2020, PHP 7.4.13
|
||||
|
||||
- Core:
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
--TEST--
|
||||
HT iterator should be destroyed if array becomes empty during array_splice
|
||||
--FILE--
|
||||
<?php
|
||||
$a=[4];
|
||||
$i = 0;
|
||||
foreach ($a as &$r) {
|
||||
var_dump($r);
|
||||
$a = array_splice($a, 0);
|
||||
if (++$i == 2) break;
|
||||
}
|
||||
?>
|
||||
--EXPECT--
|
||||
int(4)
|
||||
int(4)
|
||||
@@ -7,4 +7,4 @@ $x = (new ReflectionFunction("substr"))->getClosure();
|
||||
$x->call(new a);
|
||||
?>
|
||||
--EXPECTF--
|
||||
Warning: Cannot rebind scope of closure created by ReflectionFunctionAbstract::getClosure() in %s on line %d
|
||||
Warning: Cannot rebind scope of closure created from function in %s on line %d
|
||||
@@ -18,5 +18,5 @@ var_dump($c);
|
||||
Warning: Cannot bind method SplDoublyLinkedList::count() to object of class cls in %s on line %d
|
||||
NULL
|
||||
|
||||
Warning: Cannot rebind scope of closure created by ReflectionFunctionAbstract::getClosure() in %s on line %d
|
||||
Warning: Cannot rebind scope of closure created from method in %s on line %d
|
||||
NULL
|
||||
@@ -0,0 +1,32 @@
|
||||
--TEST--
|
||||
Bug #80781: Error handler that throws ErrorException infinite loop
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
function handle(int $severity, string $message, string $file, int $line): bool {
|
||||
if((error_reporting() & $severity) !== 0) {
|
||||
throw new \ErrorException($message, 0, $severity, $file, $line);
|
||||
}
|
||||
|
||||
return true; // stfu operator
|
||||
}
|
||||
|
||||
set_error_handler('handle');
|
||||
|
||||
function getPlugin(string $plugin) : bool{
|
||||
return false;
|
||||
}
|
||||
|
||||
$data = [];
|
||||
$array = [];
|
||||
if (isset($array[$data]) or getPlugin($data)) {
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
--EXPECTF--
|
||||
Fatal error: Uncaught ErrorException: Illegal offset type in isset or empty in %s:%d
|
||||
Stack trace:
|
||||
#0 %s(%d): handle(2, 'Illegal offset ...', %s, %d, Array)
|
||||
#1 {main}
|
||||
thrown in %s on line %d
|
||||
+12
-12
@@ -118,10 +118,10 @@ bindTo(new Cls, null):
|
||||
Success!
|
||||
|
||||
bindTo(new Cls, Cls::class):
|
||||
Cannot rebind scope of closure created by ReflectionFunctionAbstract::getClosure()
|
||||
Cannot rebind scope of closure created from function
|
||||
|
||||
bindTo(null, Cls::class):
|
||||
Cannot rebind scope of closure created by ReflectionFunctionAbstract::getClosure()
|
||||
Cannot rebind scope of closure created from function
|
||||
|
||||
bindTo(null, stdClass::class):
|
||||
Cannot bind closure to scope of internal class stdClass
|
||||
@@ -139,10 +139,10 @@ bindTo(new Cls, null):
|
||||
Success!
|
||||
|
||||
bindTo(new Cls, Cls::class):
|
||||
Cannot rebind scope of closure created by ReflectionFunctionAbstract::getClosure()
|
||||
Cannot rebind scope of closure created from function
|
||||
|
||||
bindTo(null, Cls::class):
|
||||
Cannot rebind scope of closure created by ReflectionFunctionAbstract::getClosure()
|
||||
Cannot rebind scope of closure created from function
|
||||
|
||||
bindTo(null, stdClass::class):
|
||||
Cannot bind closure to scope of internal class stdClass
|
||||
@@ -163,13 +163,13 @@ bindTo(new Cls, Cls::class):
|
||||
Cannot bind an instance to a static closure
|
||||
|
||||
bindTo(null, null):
|
||||
Cannot rebind scope of closure created by ReflectionFunctionAbstract::getClosure()
|
||||
Cannot rebind scope of closure created from method
|
||||
|
||||
bindTo(null, ClsChild::class):
|
||||
Cannot rebind scope of closure created by ReflectionFunctionAbstract::getClosure()
|
||||
Cannot rebind scope of closure created from method
|
||||
|
||||
bindTo(null, ClsUnrelated::class):
|
||||
Cannot rebind scope of closure created by ReflectionFunctionAbstract::getClosure()
|
||||
Cannot rebind scope of closure created from method
|
||||
|
||||
(new Cls)->method()
|
||||
-------------------
|
||||
@@ -189,13 +189,13 @@ bindTo(new ClsUnrelated, Cls::class):
|
||||
Cannot bind method Cls::method() to object of class ClsUnrelated
|
||||
|
||||
bindTo(new Cls, null):
|
||||
Cannot rebind scope of closure created by ReflectionFunctionAbstract::getClosure()
|
||||
Cannot rebind scope of closure created from method
|
||||
|
||||
bindTo(new Cls, ClsUnrelated::class):
|
||||
Cannot rebind scope of closure created by ReflectionFunctionAbstract::getClosure()
|
||||
Cannot rebind scope of closure created from method
|
||||
|
||||
bindTo(new Cls, ClsChild::class):
|
||||
Cannot rebind scope of closure created by ReflectionFunctionAbstract::getClosure()
|
||||
Cannot rebind scope of closure created from method
|
||||
|
||||
(new SplDoublyLinkedList)->count()
|
||||
----------------------------------
|
||||
@@ -216,10 +216,10 @@ bindTo(null, SplDoublyLinkedList::class):
|
||||
Cannot unbind $this of internal method
|
||||
|
||||
bindTo(new SplDoublyLinkedList, null):
|
||||
Cannot rebind scope of closure created by ReflectionFunctionAbstract::getClosure()
|
||||
Cannot rebind scope of closure created from method
|
||||
|
||||
bindTo(new SplDoublyLinkedList, ClsUnrelated::class):
|
||||
Cannot rebind scope of closure created by ReflectionFunctionAbstract::getClosure()
|
||||
Cannot rebind scope of closure created from method
|
||||
|
||||
(function() {})()
|
||||
-----------------
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
--TEST--
|
||||
GC on running generator
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
function gen() {
|
||||
yield;
|
||||
// Trigger GC while $v is being reassigned.
|
||||
$ary = [new stdClass, new stdClass, new stdClass];
|
||||
$ary[0]->foo = $ary;
|
||||
foreach ($ary as &$v) { }
|
||||
}
|
||||
|
||||
for ($i = 0; $i < 10000; $i++) {
|
||||
// Make sure gen is registered as a GC root.
|
||||
$gen = gen();
|
||||
$gen2 = $gen;
|
||||
unset($gen);
|
||||
foreach ($gen2 as $v) {}
|
||||
}
|
||||
|
||||
?>
|
||||
===DONE===
|
||||
--EXPECT--
|
||||
===DONE===
|
||||
@@ -0,0 +1,19 @@
|
||||
--TEST--
|
||||
Missing live range if part of phi
|
||||
--FILE--
|
||||
<?php
|
||||
function doThrow() {
|
||||
throw new Exception("Test");
|
||||
}
|
||||
function test($k) {
|
||||
// The 0 gives the QM_ASSIGN a non-refcounted type.
|
||||
$res[$k ? $k : 0] = doThrow();
|
||||
}
|
||||
try {
|
||||
test(new stdClass);
|
||||
} catch (Exception $e) {
|
||||
echo $e->getMessage(), "\n";
|
||||
}
|
||||
?>
|
||||
--EXPECT--
|
||||
Test
|
||||
@@ -0,0 +1,19 @@
|
||||
--TEST--
|
||||
Symtable cache slots may be acquired while cleaning symtable
|
||||
--FILE--
|
||||
<?php
|
||||
class A {
|
||||
// Must be larger than the symtable cache.
|
||||
static $max = 40;
|
||||
function __destruct() {
|
||||
if (self::$max-- < 0) return;
|
||||
$x = 'y';
|
||||
$$x = new a;
|
||||
}
|
||||
}
|
||||
new A;
|
||||
|
||||
?>
|
||||
===DONE===
|
||||
--EXPECT--
|
||||
===DONE===
|
||||
+3
-1
@@ -1309,7 +1309,9 @@ static ZEND_COLD void zend_error_va_list(
|
||||
#ifdef HAVE_DTRACE
|
||||
if (DTRACE_ERROR_ENABLED()) {
|
||||
char *dtrace_error_buffer;
|
||||
zend_vspprintf(&dtrace_error_buffer, 0, format, args);
|
||||
va_copy(usr_copy, args);
|
||||
zend_vspprintf(&dtrace_error_buffer, 0, format, usr_copy);
|
||||
va_end(usr_copy);
|
||||
DTRACE_ERROR(dtrace_error_buffer, (char *)error_filename, error_lineno);
|
||||
efree(dtrace_error_buffer);
|
||||
}
|
||||
|
||||
+1
-1
@@ -1099,7 +1099,7 @@ static zend_always_inline void zend_mm_free_pages_ex(zend_mm_heap *heap, zend_mm
|
||||
/* this setting may be not accurate */
|
||||
chunk->free_tail = page_num;
|
||||
}
|
||||
if (free_chunk && chunk->free_pages == ZEND_MM_PAGES - ZEND_MM_FIRST_PAGE) {
|
||||
if (free_chunk && chunk != heap->main_chunk && chunk->free_pages == ZEND_MM_PAGES - ZEND_MM_FIRST_PAGE) {
|
||||
zend_mm_delete_chunk(heap, chunk);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -104,7 +104,11 @@ static zend_bool zend_valid_closure_binding(
|
||||
}
|
||||
|
||||
if (is_fake_closure && scope != func->common.scope) {
|
||||
zend_error(E_WARNING, "Cannot rebind scope of closure created by ReflectionFunctionAbstract::getClosure()");
|
||||
if (func->common.scope == NULL) {
|
||||
zend_error(E_WARNING, "Cannot rebind scope of closure created from function");
|
||||
} else {
|
||||
zend_error(E_WARNING, "Cannot rebind scope of closure created from method");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -73,6 +73,44 @@ static void __zend_cpuid(uint32_t func, uint32_t subfunc, zend_cpu_info *cpuinfo
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(__i386__) || defined(__x86_64__)
|
||||
/* Function based on compiler-rt implementation. */
|
||||
static unsigned get_xcr0_eax() {
|
||||
# if defined(__GNUC__) || defined(__clang__)
|
||||
// Check xgetbv; this uses a .byte sequence instead of the instruction
|
||||
// directly because older assemblers do not include support for xgetbv and
|
||||
// there is no easy way to conditionally compile based on the assembler used.
|
||||
unsigned eax, edx;
|
||||
__asm__(".byte 0x0f, 0x01, 0xd0" : "=a"(eax), "=d"(edx) : "c"(0));
|
||||
return eax;
|
||||
# elif defined(ZEND_WIN32) && defined(_XCR_XFEATURE_ENABLED_MASK)
|
||||
return _xgetbv(_XCR_XFEATURE_ENABLED_MASK);
|
||||
# else
|
||||
return 0;
|
||||
# endif
|
||||
}
|
||||
|
||||
static zend_bool is_avx_supported() {
|
||||
if (!(cpuinfo.ecx & ZEND_CPU_FEATURE_AVX)) {
|
||||
/* No support for AVX */
|
||||
return 0;
|
||||
}
|
||||
if (!(cpuinfo.ecx & ZEND_CPU_FEATURE_OSXSAVE)) {
|
||||
/* The operating system does not support XSAVE. */
|
||||
return 0;
|
||||
}
|
||||
if ((get_xcr0_eax() & 0x6) != 0x6) {
|
||||
/* XCR0 SSE and AVX bits must be set. */
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
#else
|
||||
static zend_bool is_avx_supported() {
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
void zend_cpu_startup(void)
|
||||
{
|
||||
if (!cpuinfo.initialized) {
|
||||
@@ -95,6 +133,11 @@ void zend_cpu_startup(void)
|
||||
} else {
|
||||
cpuinfo.ebx = 0;
|
||||
}
|
||||
|
||||
if (!is_avx_supported()) {
|
||||
cpuinfo.edx &= ~ZEND_CPU_FEATURE_AVX;
|
||||
cpuinfo.ebx &= ~(ZEND_CPU_FEATURE_AVX2 & ~ZEND_CPU_EBX_MASK);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+9
-7
@@ -51,11 +51,11 @@
|
||||
# define ZEND_VM_FP_GLOBAL_REG "%r14"
|
||||
# define ZEND_VM_IP_GLOBAL_REG "%r15"
|
||||
# elif defined(__GNUC__) && ZEND_GCC_VERSION >= 4008 && defined(__powerpc64__)
|
||||
# define ZEND_VM_FP_GLOBAL_REG "r28"
|
||||
# define ZEND_VM_IP_GLOBAL_REG "r29"
|
||||
# define ZEND_VM_FP_GLOBAL_REG "r14"
|
||||
# define ZEND_VM_IP_GLOBAL_REG "r15"
|
||||
# elif defined(__IBMC__) && ZEND_GCC_VERSION >= 4002 && defined(__powerpc64__)
|
||||
# define ZEND_VM_FP_GLOBAL_REG "r28"
|
||||
# define ZEND_VM_IP_GLOBAL_REG "r29"
|
||||
# define ZEND_VM_FP_GLOBAL_REG "r14"
|
||||
# define ZEND_VM_IP_GLOBAL_REG "r15"
|
||||
# elif defined(__GNUC__) && ZEND_GCC_VERSION >= 4008 && defined(__aarch64__)
|
||||
# define ZEND_VM_FP_GLOBAL_REG "x27"
|
||||
# define ZEND_VM_IP_GLOBAL_REG "x28"
|
||||
@@ -3437,12 +3437,13 @@ ZEND_API void execute_internal(zend_execute_data *execute_data, zval *return_val
|
||||
|
||||
ZEND_API void zend_clean_and_cache_symbol_table(zend_array *symbol_table) /* {{{ */
|
||||
{
|
||||
/* Clean before putting into the cache, since clean could call dtors,
|
||||
* which could use the cached hash. Also do this before the check for
|
||||
* available cache slots, as those may be used by a dtor as well. */
|
||||
zend_symtable_clean(symbol_table);
|
||||
if (EG(symtable_cache_ptr) >= EG(symtable_cache_limit)) {
|
||||
zend_array_destroy(symbol_table);
|
||||
} else {
|
||||
/* clean before putting into the cache, since clean
|
||||
could call dtors, which could use cached hash */
|
||||
zend_symtable_clean(symbol_table);
|
||||
*(EG(symtable_cache_ptr)++) = symbol_table;
|
||||
}
|
||||
}
|
||||
@@ -4554,6 +4555,7 @@ static zend_always_inline zend_execute_data *_zend_vm_stack_push_call_frame(uint
|
||||
if (check_exception) { \
|
||||
OPLINE = EX(opline) + (skip); \
|
||||
} else { \
|
||||
ZEND_ASSERT(!EG(exception)); \
|
||||
OPLINE = opline + (skip); \
|
||||
} \
|
||||
ZEND_VM_CONTINUE()
|
||||
|
||||
@@ -1294,7 +1294,7 @@ static void zend_set_timeout_ex(zend_long seconds, int reset_signals) /* {{{ */
|
||||
t_r.it_value.tv_sec = seconds;
|
||||
t_r.it_value.tv_usec = t_r.it_interval.tv_sec = t_r.it_interval.tv_usec = 0;
|
||||
|
||||
# ifdef __CYGWIN__
|
||||
# if defined(__CYGWIN__) || defined(__PASE__)
|
||||
setitimer(ITIMER_REAL, &t_r, NULL);
|
||||
}
|
||||
signo = SIGALRM;
|
||||
@@ -1356,7 +1356,7 @@ void zend_unset_timeout(void) /* {{{ */
|
||||
|
||||
no_timeout.it_value.tv_sec = no_timeout.it_value.tv_usec = no_timeout.it_interval.tv_sec = no_timeout.it_interval.tv_usec = 0;
|
||||
|
||||
# ifdef __CYGWIN__
|
||||
# if defined(__CYGWIN__) || defined(__PASE__)
|
||||
setitimer(ITIMER_REAL, &no_timeout, NULL);
|
||||
# else
|
||||
setitimer(ITIMER_PROF, &no_timeout, NULL);
|
||||
|
||||
@@ -340,6 +340,16 @@ static HashTable *zend_generator_get_gc(zval *object, zval **table, int *n) /* {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (generator->flags & ZEND_GENERATOR_CURRENTLY_RUNNING) {
|
||||
/* If the generator is currently running, we certainly won't be able to GC any values it
|
||||
* holds on to. The execute_data state might be inconsistent during execution (e.g. because
|
||||
* GC has been triggered in the middle of a variable reassignment), so we should not try
|
||||
* to inspect it here. */
|
||||
*table = NULL;
|
||||
*n = 0;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
op_array = &EX(func)->op_array;
|
||||
gc_buffer_size = calc_gc_buffer_size(generator);
|
||||
if (generator->gc_buffer_size < gc_buffer_size) {
|
||||
|
||||
+1
-1
@@ -1630,10 +1630,10 @@ ZEND_API void ZEND_FASTCALL zend_array_destroy(HashTable *ht)
|
||||
} else if (EXPECTED(HT_FLAGS(ht) & HASH_FLAG_UNINITIALIZED)) {
|
||||
goto free_ht;
|
||||
}
|
||||
zend_hash_iterators_remove(ht);
|
||||
SET_INCONSISTENT(HT_DESTROYED);
|
||||
efree(HT_GET_DATA_ADDR(ht));
|
||||
free_ht:
|
||||
zend_hash_iterators_remove(ht);
|
||||
FREE_HASHTABLE(ht);
|
||||
}
|
||||
|
||||
|
||||
@@ -177,7 +177,7 @@ static void yy_pop_state(void)
|
||||
zend_stack_del_top(&SCNG(state_stack));
|
||||
}
|
||||
|
||||
static void yy_scan_buffer(char *str, unsigned int len)
|
||||
static void yy_scan_buffer(char *str, size_t len)
|
||||
{
|
||||
YYCURSOR = (YYCTYPE*)str;
|
||||
YYLIMIT = YYCURSOR + len;
|
||||
@@ -554,7 +554,7 @@ ZEND_API int open_file_for_scanning(zend_file_handle *file_handle)
|
||||
}
|
||||
}
|
||||
SCNG(yy_start) = (unsigned char *)buf;
|
||||
yy_scan_buffer(buf, (unsigned int)size);
|
||||
yy_scan_buffer(buf, size);
|
||||
} else {
|
||||
zend_error_noreturn(E_COMPILE_ERROR, "zend_stream_mmap() failed");
|
||||
}
|
||||
@@ -722,7 +722,7 @@ ZEND_API int zend_prepare_string_for_scanning(zval *str, char *filename)
|
||||
}
|
||||
}
|
||||
|
||||
yy_scan_buffer(buf, (unsigned int)size);
|
||||
yy_scan_buffer(buf, size);
|
||||
|
||||
new_compiled_filename = zend_string_init(filename, strlen(filename), 0);
|
||||
zend_set_compiled_filename(new_compiled_filename);
|
||||
|
||||
+2
-1
@@ -62,7 +62,8 @@ ZEND_API zend_signal_globals_t zend_signal_globals;
|
||||
static void zend_signal_handler(int signo, siginfo_t *siginfo, void *context);
|
||||
static int zend_signal_register(int signo, void (*handler)(int, siginfo_t*, void*));
|
||||
|
||||
#ifdef __CYGWIN__
|
||||
#if defined(__CYGWIN__) || defined(__PASE__)
|
||||
/* Matches zend_excute_API.c; these platforms don't support ITIMER_PROF. */
|
||||
#define TIMEOUT_SIG SIGALRM
|
||||
#else
|
||||
#define TIMEOUT_SIG SIGPROF
|
||||
|
||||
@@ -6937,6 +6937,10 @@ ZEND_VM_C_LABEL(num_index_prop):
|
||||
ZEND_VM_C_GOTO(isset_again);
|
||||
} else {
|
||||
value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
|
||||
if (UNEXPECTED(EG(exception))) {
|
||||
result = 0;
|
||||
ZEND_VM_C_GOTO(isset_dim_obj_exit);
|
||||
}
|
||||
}
|
||||
|
||||
if (!(opline->extended_value & ZEND_ISEMPTY)) {
|
||||
|
||||
@@ -6302,6 +6302,10 @@ num_index_prop:
|
||||
goto isset_again;
|
||||
} else {
|
||||
value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
|
||||
if (UNEXPECTED(EG(exception))) {
|
||||
result = 0;
|
||||
goto isset_dim_obj_exit;
|
||||
}
|
||||
}
|
||||
|
||||
if (!(opline->extended_value & ZEND_ISEMPTY)) {
|
||||
@@ -8496,6 +8500,10 @@ num_index_prop:
|
||||
goto isset_again;
|
||||
} else {
|
||||
value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
|
||||
if (UNEXPECTED(EG(exception))) {
|
||||
result = 0;
|
||||
goto isset_dim_obj_exit;
|
||||
}
|
||||
}
|
||||
|
||||
if (!(opline->extended_value & ZEND_ISEMPTY)) {
|
||||
@@ -10949,6 +10957,10 @@ num_index_prop:
|
||||
goto isset_again;
|
||||
} else {
|
||||
value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
|
||||
if (UNEXPECTED(EG(exception))) {
|
||||
result = 0;
|
||||
goto isset_dim_obj_exit;
|
||||
}
|
||||
}
|
||||
|
||||
if (!(opline->extended_value & ZEND_ISEMPTY)) {
|
||||
@@ -14985,6 +14997,10 @@ num_index_prop:
|
||||
goto isset_again;
|
||||
} else {
|
||||
value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
|
||||
if (UNEXPECTED(EG(exception))) {
|
||||
result = 0;
|
||||
goto isset_dim_obj_exit;
|
||||
}
|
||||
}
|
||||
|
||||
if (!(opline->extended_value & ZEND_ISEMPTY)) {
|
||||
@@ -16402,6 +16418,10 @@ num_index_prop:
|
||||
goto isset_again;
|
||||
} else {
|
||||
value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
|
||||
if (UNEXPECTED(EG(exception))) {
|
||||
result = 0;
|
||||
goto isset_dim_obj_exit;
|
||||
}
|
||||
}
|
||||
|
||||
if (!(opline->extended_value & ZEND_ISEMPTY)) {
|
||||
@@ -17689,6 +17709,10 @@ num_index_prop:
|
||||
goto isset_again;
|
||||
} else {
|
||||
value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
|
||||
if (UNEXPECTED(EG(exception))) {
|
||||
result = 0;
|
||||
goto isset_dim_obj_exit;
|
||||
}
|
||||
}
|
||||
|
||||
if (!(opline->extended_value & ZEND_ISEMPTY)) {
|
||||
@@ -41505,6 +41529,10 @@ num_index_prop:
|
||||
goto isset_again;
|
||||
} else {
|
||||
value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
|
||||
if (UNEXPECTED(EG(exception))) {
|
||||
result = 0;
|
||||
goto isset_dim_obj_exit;
|
||||
}
|
||||
}
|
||||
|
||||
if (!(opline->extended_value & ZEND_ISEMPTY)) {
|
||||
@@ -44950,6 +44978,10 @@ num_index_prop:
|
||||
goto isset_again;
|
||||
} else {
|
||||
value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
|
||||
if (UNEXPECTED(EG(exception))) {
|
||||
result = 0;
|
||||
goto isset_dim_obj_exit;
|
||||
}
|
||||
}
|
||||
|
||||
if (!(opline->extended_value & ZEND_ISEMPTY)) {
|
||||
@@ -50123,6 +50155,10 @@ num_index_prop:
|
||||
goto isset_again;
|
||||
} else {
|
||||
value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
|
||||
if (UNEXPECTED(EG(exception))) {
|
||||
result = 0;
|
||||
goto isset_dim_obj_exit;
|
||||
}
|
||||
}
|
||||
|
||||
if (!(opline->extended_value & ZEND_ISEMPTY)) {
|
||||
|
||||
@@ -50,7 +50,7 @@ jobs:
|
||||
- script: |
|
||||
git clone https://github.com/laravel/framework.git --branch=master --depth=1
|
||||
cd framework
|
||||
php7.3 /usr/bin/composer install --no-progress
|
||||
php7.4 /usr/bin/composer install --no-progress
|
||||
export USE_ZEND_ALLOC=0
|
||||
sed -i 's/$exit = true/$exit = false/g' vendor/phpunit/phpunit/src/TextUI/Command.php
|
||||
# Avoid test using exit(), which thus leaks.
|
||||
@@ -61,8 +61,8 @@ jobs:
|
||||
- script: |
|
||||
git clone https://github.com/symfony/symfony.git --depth=1
|
||||
cd symfony
|
||||
php7.3 /usr/bin/composer install --no-progress
|
||||
php7.3 ./phpunit install
|
||||
php7.4 /usr/bin/composer install --no-progress
|
||||
php7.4 ./phpunit install
|
||||
export USE_ZEND_ALLOC=0
|
||||
export USE_TRACKED_ALLOC=1
|
||||
export ASAN_OPTIONS=exitcode=139
|
||||
@@ -82,7 +82,7 @@ jobs:
|
||||
displayName: 'Test Amphp'
|
||||
condition: or(succeeded(), failed())
|
||||
- script: |
|
||||
php7.3 /usr/bin/composer create-project symfony/symfony-demo symfony_demo --no-progress
|
||||
php7.4 /usr/bin/composer create-project symfony/symfony-demo symfony_demo --no-progress
|
||||
cd symfony_demo
|
||||
export USE_ZEND_ALLOC=0
|
||||
export USE_TRACKED_ALLOC=1
|
||||
|
||||
@@ -32,10 +32,13 @@ jobs:
|
||||
runTestsParameters: >-
|
||||
${{ parameters.runTestsParameters }}
|
||||
-d zend_extension=opcache.so
|
||||
- script: bash <(curl -s https://codecov.io/bash)
|
||||
displayName: 'Upload ${{ parameters.configurationName }} Test Coverage to Codecov.io'
|
||||
condition: or(succeeded(), failed())
|
||||
- script: |
|
||||
make gcovr-xml
|
||||
mv gcovr.xml coverage.xml
|
||||
displayName: 'Generate ${{ parameters.configurationName }} Test Coverage'
|
||||
displayName: 'Generate ${{ parameters.configurationName }} Test Coverage Cobertura XML Report'
|
||||
condition: or(succeeded(), failed())
|
||||
- task: PublishCodeCoverageResults@1
|
||||
inputs:
|
||||
|
||||
+1
-1
@@ -5,7 +5,7 @@ parameters:
|
||||
jobs:
|
||||
- job: ${{ parameters.configurationName }}
|
||||
pool:
|
||||
vmImage: 'ubuntu-18.04'
|
||||
vmImage: 'ubuntu-20.04'
|
||||
steps:
|
||||
- template: apt.yml
|
||||
- script: |
|
||||
|
||||
Vendored
+3
-3
@@ -340,7 +340,7 @@ AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS],[
|
||||
_lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
|
||||
10.[[012]]*)
|
||||
_lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
|
||||
10.*)
|
||||
*)
|
||||
_lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
|
||||
esac
|
||||
;;
|
||||
@@ -1521,7 +1521,7 @@ darwin* | rhapsody*)
|
||||
shlibpath_var=DYLD_LIBRARY_PATH
|
||||
shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
|
||||
ifelse([$1], [],[
|
||||
sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"])
|
||||
sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"])
|
||||
sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
|
||||
;;
|
||||
|
||||
@@ -5799,7 +5799,7 @@ _LT_EOF
|
||||
10.[[012]])
|
||||
_LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
|
||||
;;
|
||||
10.*)
|
||||
*)
|
||||
_LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup'
|
||||
;;
|
||||
esac
|
||||
|
||||
+7
-1
@@ -498,7 +498,7 @@ dnl Internal, don't use.
|
||||
dnl
|
||||
AC_DEFUN([_PHP_ADD_LIBRARY_SKELETON],[
|
||||
case $1 in
|
||||
c|c_r|pthread*[)] ;;
|
||||
c|c_r[)] ;;
|
||||
*[)] ifelse($3,,[
|
||||
_PHP_X_ADD_LIBRARY($1,$2,$5)
|
||||
],[
|
||||
@@ -1783,6 +1783,9 @@ AC_DEFUN([PHP_PROG_BISON], [
|
||||
AC_MSG_CHECKING([for bison version])
|
||||
|
||||
php_bison_version=$($YACC --version 2> /dev/null | grep 'GNU Bison' | cut -d ' ' -f 4 | tr -d a-z)
|
||||
if test -z "$php_bison_version"; then
|
||||
php_bison_version=0.0.0
|
||||
fi
|
||||
ac_IFS=$IFS; IFS="."
|
||||
set $php_bison_version
|
||||
IFS=$ac_IFS
|
||||
@@ -1846,6 +1849,9 @@ AC_DEFUN([PHP_PROG_RE2C],[
|
||||
AC_MSG_CHECKING([for re2c version])
|
||||
|
||||
php_re2c_version=$($RE2C --version | cut -d ' ' -f 2 2>/dev/null)
|
||||
if test -z "$php_re2c_version"; then
|
||||
php_re2c_version=0.0.0
|
||||
fi
|
||||
ac_IFS=$IFS; IFS="."
|
||||
set $php_re2c_version
|
||||
IFS=$ac_IFS
|
||||
|
||||
+2
-2
@@ -17,7 +17,7 @@ dnl Basic autoconf initialization, generation of config.nice.
|
||||
dnl ----------------------------------------------------------------------------
|
||||
|
||||
AC_PREREQ([2.68])
|
||||
AC_INIT([PHP],[7.4.13],[https://bugs.php.net],[php],[https://www.php.net])
|
||||
AC_INIT([PHP],[7.4.18],[https://bugs.php.net],[php],[https://www.php.net])
|
||||
AC_CONFIG_SRCDIR([main/php_version.h])
|
||||
AC_CONFIG_AUX_DIR([build])
|
||||
AC_PRESERVE_HELP_ORDER
|
||||
@@ -568,7 +568,7 @@ dnl Fix for these systems is already included in GCC 7, but not on GCC 6.
|
||||
dnl
|
||||
dnl At least some versions of FreeBSD seem to have buggy ifunc support, see
|
||||
dnl bug #77284. Conservatively don't use ifuncs on FreeBSD.
|
||||
AS_CASE([$host_alias], [*-*-*android*|*-*-*uclibc*|*-*-*musl*|*freebsd*], [true], [
|
||||
AS_CASE([$host_alias], [*-*-*android*|*-*-*uclibc*|*-*-*musl*|*freebsd*|*openbsd*], [true], [
|
||||
AX_GCC_FUNC_ATTRIBUTE([ifunc])
|
||||
AX_GCC_FUNC_ATTRIBUTE([target])
|
||||
])
|
||||
|
||||
+10
-3
@@ -41,6 +41,7 @@ typedef struct _php_bz2_filter_data {
|
||||
enum strm_status status; /* Decompress option */
|
||||
unsigned int small_footprint : 1; /* Decompress option */
|
||||
unsigned int expect_concatenated : 1; /* Decompress option */
|
||||
unsigned int is_flushed : 1; /* only for compression */
|
||||
|
||||
int persistent;
|
||||
} php_bz2_filter_data;
|
||||
@@ -228,6 +229,8 @@ static php_stream_filter_status_t php_bz2_compress_filter(
|
||||
bucket = php_stream_bucket_make_writeable(buckets_in->head);
|
||||
|
||||
while (bin < bucket->buflen) {
|
||||
int flush_mode;
|
||||
|
||||
desired = bucket->buflen - bin;
|
||||
if (desired > data->inbuf_len) {
|
||||
desired = data->inbuf_len;
|
||||
@@ -235,7 +238,9 @@ static php_stream_filter_status_t php_bz2_compress_filter(
|
||||
memcpy(data->strm.next_in, bucket->buf + bin, desired);
|
||||
data->strm.avail_in = desired;
|
||||
|
||||
status = BZ2_bzCompress(&(data->strm), flags & PSFS_FLAG_FLUSH_CLOSE ? BZ_FINISH : (flags & PSFS_FLAG_FLUSH_INC ? BZ_FLUSH : BZ_RUN));
|
||||
flush_mode = flags & PSFS_FLAG_FLUSH_CLOSE ? BZ_FINISH : (flags & PSFS_FLAG_FLUSH_INC ? BZ_FLUSH : BZ_RUN);
|
||||
data->is_flushed = flush_mode != BZ_RUN;
|
||||
status = BZ2_bzCompress(&(data->strm), flush_mode);
|
||||
if (status != BZ_RUN_OK && status != BZ_FLUSH_OK && status != BZ_FINISH_OK) {
|
||||
/* Something bad happened */
|
||||
php_stream_bucket_delref(bucket);
|
||||
@@ -261,11 +266,12 @@ static php_stream_filter_status_t php_bz2_compress_filter(
|
||||
php_stream_bucket_delref(bucket);
|
||||
}
|
||||
|
||||
if (flags & PSFS_FLAG_FLUSH_CLOSE) {
|
||||
if (flags & PSFS_FLAG_FLUSH_CLOSE || ((flags & PSFS_FLAG_FLUSH_INC) && !data->is_flushed)) {
|
||||
/* Spit it out! */
|
||||
status = BZ_FINISH_OK;
|
||||
while (status == BZ_FINISH_OK) {
|
||||
status = BZ2_bzCompress(&(data->strm), BZ_FINISH);
|
||||
status = BZ2_bzCompress(&(data->strm), (flags & PSFS_FLAG_FLUSH_CLOSE ? BZ_FINISH : BZ_FLUSH));
|
||||
data->is_flushed = 1;
|
||||
if (data->strm.avail_out < data->outbuf_len) {
|
||||
size_t bucketlen = data->outbuf_len - data->strm.avail_out;
|
||||
|
||||
@@ -381,6 +387,7 @@ static php_stream_filter *php_bz2_filter_create(const char *filtername, zval *fi
|
||||
}
|
||||
|
||||
status = BZ2_bzCompressInit(&(data->strm), blockSize100k, 0, workFactor);
|
||||
data->is_flushed = 1;
|
||||
fops = &php_bz2_compress_ops;
|
||||
} else {
|
||||
status = BZ_DATA_ERROR;
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
--TEST--
|
||||
Bug #75776 (Flushing streams with compression filter is broken)
|
||||
--SKIPIF--
|
||||
<?php
|
||||
if (!extension_loaded('bz2')) die('skip bz2 extension not available');
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
$text = str_repeat('0123456789abcdef', 1000);
|
||||
|
||||
$temp = fopen('php://temp', 'r+');
|
||||
stream_filter_append($temp, 'bzip2.compress', STREAM_FILTER_WRITE);
|
||||
fwrite($temp, $text);
|
||||
|
||||
rewind($temp);
|
||||
|
||||
var_dump(bin2hex(stream_get_contents($temp)));
|
||||
var_dump(ftell($temp));
|
||||
|
||||
fclose($temp);
|
||||
?>
|
||||
--EXPECT--
|
||||
string(144) "425a68343141592653599fe7bbbf0001f389007fe03f002000902980026826aa80003ea9061520c6a41954833a9069520d6a41b54837a9071520e6a41d5483ba9079520f6a41f548"
|
||||
int(72)
|
||||
+11
-1
@@ -2207,6 +2207,7 @@ static inline int build_mime_structure_from_hash(php_curl *ch, zval *zpostfields
|
||||
#endif
|
||||
|
||||
prop = zend_read_property(curl_CURLFile_class, current, "name", sizeof("name")-1, 0, &rv);
|
||||
ZVAL_DEREF(prop);
|
||||
if (Z_TYPE_P(prop) != IS_STRING) {
|
||||
php_error_docref(NULL, E_WARNING, "Invalid filename for key %s", ZSTR_VAL(string_key));
|
||||
} else {
|
||||
@@ -2217,10 +2218,12 @@ static inline int build_mime_structure_from_hash(php_curl *ch, zval *zpostfields
|
||||
}
|
||||
|
||||
prop = zend_read_property(curl_CURLFile_class, current, "mime", sizeof("mime")-1, 0, &rv);
|
||||
ZVAL_DEREF(prop);
|
||||
if (Z_TYPE_P(prop) == IS_STRING && Z_STRLEN_P(prop) > 0) {
|
||||
type = Z_STRVAL_P(prop);
|
||||
}
|
||||
prop = zend_read_property(curl_CURLFile_class, current, "postname", sizeof("postname")-1, 0, &rv);
|
||||
ZVAL_DEREF(prop);
|
||||
if (Z_TYPE_P(prop) == IS_STRING && Z_STRLEN_P(prop) > 0) {
|
||||
filename = Z_STRVAL_P(prop);
|
||||
}
|
||||
@@ -2969,7 +2972,14 @@ static int _php_curl_setopt(php_curl *ch, zend_long option, zval *zvalue) /* {{{
|
||||
|
||||
case CURLOPT_POSTFIELDS:
|
||||
if (Z_TYPE_P(zvalue) == IS_ARRAY || Z_TYPE_P(zvalue) == IS_OBJECT) {
|
||||
return build_mime_structure_from_hash(ch, zvalue);
|
||||
if (zend_hash_num_elements(HASH_OF(zvalue)) == 0) {
|
||||
/* no need to build the mime structure for empty hashtables;
|
||||
also works around https://github.com/curl/curl/issues/6455 */
|
||||
curl_easy_setopt(ch->cp, CURLOPT_POSTFIELDS, "");
|
||||
error = curl_easy_setopt(ch->cp, CURLOPT_POSTFIELDSIZE, 0);
|
||||
} else {
|
||||
return build_mime_structure_from_hash(ch, zvalue);
|
||||
}
|
||||
} else {
|
||||
#if LIBCURL_VERSION_NUM >= 0x071101
|
||||
zend_string *tmp_str;
|
||||
|
||||
@@ -21,9 +21,10 @@ var_dump(curl_getinfo($ch)["request_header"]);
|
||||
string(%d) "array(0) {
|
||||
}
|
||||
"
|
||||
string(90) "POST /get.inc?test=post HTTP/1.1
|
||||
string(%d) "POST /get.inc?test=post HTTP/1.1
|
||||
Host: localhost:%d
|
||||
Accept: */*
|
||||
Content-Length: 0
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
|
||||
"
|
||||
@@ -0,0 +1,30 @@
|
||||
--TEST--
|
||||
Bug #80595 (Resetting POSTFIELDS to empty array breaks request)
|
||||
--SKIPIF--
|
||||
<?php include 'skipif.inc'; ?>
|
||||
--FILE--
|
||||
<?php
|
||||
include 'server.inc';
|
||||
$host = curl_cli_server_start();
|
||||
$ch = curl_init();
|
||||
curl_setopt_array($ch, [
|
||||
CURLOPT_RETURNTRANSFER => true,
|
||||
CURLOPT_POST => true,
|
||||
CURLOPT_URL => "{$host}/get.inc?test=post",
|
||||
]);
|
||||
|
||||
curl_setopt($ch, CURLOPT_POSTFIELDS, ['foo' => 'bar']);
|
||||
var_dump(curl_exec($ch));
|
||||
|
||||
curl_setopt($ch, CURLOPT_POSTFIELDS, []);
|
||||
var_dump(curl_exec($ch));
|
||||
?>
|
||||
--EXPECT--
|
||||
string(43) "array(1) {
|
||||
["foo"]=>
|
||||
string(3) "bar"
|
||||
}
|
||||
"
|
||||
string(13) "array(0) {
|
||||
}
|
||||
"
|
||||
+22837
-20045
File diff suppressed because it is too large.
Load diff
+395
-432
File diff suppressed because it is too large.
Load diff
+2681
-2482
File diff suppressed because it is too large.
Load diff
+2
-2
@@ -972,9 +972,9 @@ restart:
|
||||
zend_bool close_both;
|
||||
|
||||
close_both = (info->fp != info->lock.fp);
|
||||
php_stream_close(info->lock.fp);
|
||||
php_stream_free(info->lock.fp, persistent ? PHP_STREAM_FREE_CLOSE_PERSISTENT : PHP_STREAM_FREE_CLOSE);
|
||||
if (close_both) {
|
||||
php_stream_close(info->fp);
|
||||
php_stream_free(info->fp, persistent ? PHP_STREAM_FREE_CLOSE_PERSISTENT : PHP_STREAM_FREE_CLOSE);
|
||||
}
|
||||
info->fp = NULL;
|
||||
info->lock.fp = NULL;
|
||||
|
||||
+7
-3
@@ -1302,9 +1302,13 @@ int dom_hierarchy(xmlNodePtr parent, xmlNodePtr child)
|
||||
{
|
||||
xmlNodePtr nodep;
|
||||
|
||||
if (parent == NULL || child == NULL || child->doc != parent->doc) {
|
||||
return SUCCESS;
|
||||
}
|
||||
if (parent == NULL || child == NULL || child->doc != parent->doc) {
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
if (child->type == XML_DOCUMENT_NODE) {
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
nodep = parent;
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ require_once __DIR__ .'/skipif.inc';
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
$filename = __DIR__."/tmp_savehtmlfile".time().".html";
|
||||
$filename = __DIR__."/DOMDocument_saveHTMLFile_basic.html";
|
||||
$doc = new DOMDocument('1.0');
|
||||
$root = $doc->createElement('html');
|
||||
$root = $doc->appendChild($root);
|
||||
|
||||
@@ -9,7 +9,7 @@ require_once __DIR__ .'/skipif.inc';
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
$filename = __DIR__."/tmp_savehtmlfile".time().".html";
|
||||
$filename = __DIR__."/DOMDocument_saveHTMLFile_formatOutput.html";
|
||||
$doc = new DOMDocument('1.0');
|
||||
$doc->formatOutput = true;
|
||||
$root = $doc->createElement('html');
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
--TEST--
|
||||
Bug #66783 (UAF when appending DOMDocument to element)
|
||||
--SKIPIF--
|
||||
<?php
|
||||
if (!extension_loaded('dom')) die('skip dom extension not available');
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
$doc = new DomDocument;
|
||||
$doc->loadXML('<root></root>');
|
||||
$e = $doc->createElement('e');
|
||||
try {
|
||||
$e->appendChild($doc);
|
||||
} catch (DOMException $ex) {
|
||||
echo $ex->getMessage(), PHP_EOL;
|
||||
}
|
||||
?>
|
||||
--EXPECTF--
|
||||
Hierarchy Request Error
|
||||
+38
-31
@@ -1,6 +1,6 @@
|
||||
diff -u libmagic.orig/apprentice.c libmagic/apprentice.c
|
||||
--- libmagic.orig/apprentice.c 2019-02-20 03:35:27.000000000 +0100
|
||||
+++ libmagic/apprentice.c 2020-02-27 11:45:38.445854000 +0100
|
||||
+++ libmagic/apprentice.c 2020-11-19 11:50:32.412674100 +0100
|
||||
@@ -29,6 +29,8 @@
|
||||
* apprentice - make one pass through /etc/magic, learning its secrets.
|
||||
*/
|
||||
@@ -974,7 +974,7 @@ diff -u libmagic.orig/apprentice.c libmagic/apprentice.c
|
||||
}
|
||||
diff -u libmagic.orig/ascmagic.c libmagic/ascmagic.c
|
||||
--- libmagic.orig/ascmagic.c 2019-05-07 04:27:11.000000000 +0200
|
||||
+++ libmagic/ascmagic.c 2020-02-26 23:18:22.605400700 +0100
|
||||
+++ libmagic/ascmagic.c 2020-09-07 00:42:14.447562400 +0200
|
||||
@@ -96,7 +96,7 @@
|
||||
rv = file_ascmagic_with_encoding(ms, &bb,
|
||||
ubuf, ulen, code, type, text);
|
||||
@@ -1005,7 +1005,7 @@ diff -u libmagic.orig/ascmagic.c libmagic/ascmagic.c
|
||||
}
|
||||
diff -u libmagic.orig/buffer.c libmagic/buffer.c
|
||||
--- libmagic.orig/buffer.c 2019-05-07 04:27:11.000000000 +0200
|
||||
+++ libmagic/buffer.c 2020-02-27 11:45:38.445854000 +0100
|
||||
+++ libmagic/buffer.c 2020-09-07 00:42:14.447562400 +0200
|
||||
@@ -31,19 +31,23 @@
|
||||
#endif /* lint */
|
||||
|
||||
@@ -1062,7 +1062,7 @@ diff -u libmagic.orig/buffer.c libmagic/buffer.c
|
||||
|
||||
diff -u libmagic.orig/cdf.c libmagic/cdf.c
|
||||
--- libmagic.orig/cdf.c 2019-02-20 03:35:27.000000000 +0100
|
||||
+++ libmagic/cdf.c 2020-02-27 11:45:38.445854000 +0100
|
||||
+++ libmagic/cdf.c 2020-09-07 00:42:14.447562400 +0200
|
||||
@@ -43,7 +43,17 @@
|
||||
#include <err.h>
|
||||
#endif
|
||||
@@ -1341,7 +1341,7 @@ diff -u libmagic.orig/cdf.c libmagic/cdf.c
|
||||
#endif
|
||||
diff -u libmagic.orig/cdf.h libmagic/cdf.h
|
||||
--- libmagic.orig/cdf.h 2019-02-20 02:24:19.000000000 +0100
|
||||
+++ libmagic/cdf.h 2020-02-27 11:45:38.445854000 +0100
|
||||
+++ libmagic/cdf.h 2020-09-07 00:42:14.447562400 +0200
|
||||
@@ -35,10 +35,10 @@
|
||||
#ifndef _H_CDF_
|
||||
#define _H_CDF_
|
||||
@@ -1366,7 +1366,7 @@ diff -u libmagic.orig/cdf.h libmagic/cdf.h
|
||||
#define CDF_SECID_FREE -1
|
||||
diff -u libmagic.orig/cdf_time.c libmagic/cdf_time.c
|
||||
--- libmagic.orig/cdf_time.c 2019-03-12 21:43:05.000000000 +0100
|
||||
+++ libmagic/cdf_time.c 2020-02-26 23:18:22.611402900 +0100
|
||||
+++ libmagic/cdf_time.c 2020-09-07 00:42:14.447562400 +0200
|
||||
@@ -23,6 +23,7 @@
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
@@ -1395,7 +1395,7 @@ diff -u libmagic.orig/cdf_time.c libmagic/cdf_time.c
|
||||
(void)snprintf(buf, 26, "*Bad* %#16.16" INT64_T_FORMAT "x\n",
|
||||
diff -u libmagic.orig/compress.c libmagic/compress.c
|
||||
--- libmagic.orig/compress.c 2019-05-07 04:27:11.000000000 +0200
|
||||
+++ libmagic/compress.c 2020-02-27 11:45:38.445854000 +0100
|
||||
+++ libmagic/compress.c 2020-09-07 00:42:14.447562400 +0200
|
||||
@@ -45,13 +45,11 @@
|
||||
#endif
|
||||
#include <string.h>
|
||||
@@ -1545,7 +1545,7 @@ diff -u libmagic.orig/compress.c libmagic/compress.c
|
||||
+#endif
|
||||
diff -u libmagic.orig/der.c libmagic/der.c
|
||||
--- libmagic.orig/der.c 2019-02-20 03:35:27.000000000 +0100
|
||||
+++ libmagic/der.c 2020-02-27 11:45:38.445854000 +0100
|
||||
+++ libmagic/der.c 2020-09-07 00:42:14.447562400 +0200
|
||||
@@ -51,7 +51,9 @@
|
||||
#include "magic.h"
|
||||
#include "der.h"
|
||||
@@ -1575,7 +1575,7 @@ diff -u libmagic.orig/der.c libmagic/der.c
|
||||
snprintf(buf + z, blen - z, "%.2x", d[i]);
|
||||
diff -u libmagic.orig/elfclass.h libmagic/elfclass.h
|
||||
--- libmagic.orig/elfclass.h 2019-02-20 02:30:19.000000000 +0100
|
||||
+++ libmagic/elfclass.h 2020-02-26 23:18:22.613401700 +0100
|
||||
+++ libmagic/elfclass.h 2020-09-07 00:42:14.447562400 +0200
|
||||
@@ -41,7 +41,7 @@
|
||||
return toomany(ms, "program headers", phnum);
|
||||
flags |= FLAGS_IS_CORE;
|
||||
@@ -1605,7 +1605,7 @@ diff -u libmagic.orig/elfclass.h libmagic/elfclass.h
|
||||
CAST(int, elf_getu16(swap, elfhdr.e_shstrndx)),
|
||||
diff -u libmagic.orig/encoding.c libmagic/encoding.c
|
||||
--- libmagic.orig/encoding.c 2019-04-15 18:48:41.000000000 +0200
|
||||
+++ libmagic/encoding.c 2020-02-26 23:18:22.614402300 +0100
|
||||
+++ libmagic/encoding.c 2020-09-07 00:42:14.447562400 +0200
|
||||
@@ -89,13 +89,13 @@
|
||||
*code_mime = "binary";
|
||||
|
||||
@@ -1636,7 +1636,7 @@ diff -u libmagic.orig/encoding.c libmagic/encoding.c
|
||||
}
|
||||
diff -u libmagic.orig/file.h libmagic/file.h
|
||||
--- libmagic.orig/file.h 2019-05-07 04:27:11.000000000 +0200
|
||||
+++ libmagic/file.h 2020-02-27 11:45:38.445854000 +0100
|
||||
+++ libmagic/file.h 2020-11-23 17:11:36.234964700 +0100
|
||||
@@ -33,18 +33,9 @@
|
||||
#ifndef __file_h__
|
||||
#define __file_h__
|
||||
@@ -1658,7 +1658,7 @@ diff -u libmagic.orig/file.h libmagic/file.h
|
||||
#ifdef _WIN64
|
||||
#define SIZE_T_FORMAT "I64"
|
||||
#else
|
||||
@@ -57,19 +48,34 @@
|
||||
@@ -57,32 +48,49 @@
|
||||
#define INT64_T_FORMAT "ll"
|
||||
#define INTMAX_T_FORMAT "j"
|
||||
#endif
|
||||
@@ -1698,7 +1698,14 @@ diff -u libmagic.orig/file.h libmagic/file.h
|
||||
#include <sys/param.h>
|
||||
#endif
|
||||
/* Do this here and now, because struct stat gets re-defined on solaris */
|
||||
@@ -82,7 +88,7 @@
|
||||
#include <sys/stat.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
+#define abort() zend_error_noreturn(E_ERROR, "fatal libmagic error")
|
||||
+
|
||||
#define ENABLE_CONDITIONALS
|
||||
|
||||
#ifndef MAGIC
|
||||
#define MAGIC "/etc/magic"
|
||||
#endif
|
||||
|
||||
@@ -1707,7 +1714,7 @@ diff -u libmagic.orig/file.h libmagic/file.h
|
||||
#define PATHSEP ';'
|
||||
#else
|
||||
#define PATHSEP ':'
|
||||
@@ -116,12 +122,6 @@
|
||||
@@ -116,12 +124,6 @@
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -1720,7 +1727,7 @@ diff -u libmagic.orig/file.h libmagic/file.h
|
||||
#ifndef MIN
|
||||
#define MIN(a,b) (((a) < (b)) ? (a) : (b))
|
||||
#endif
|
||||
@@ -150,10 +150,10 @@
|
||||
@@ -150,10 +152,10 @@
|
||||
|
||||
struct buffer {
|
||||
int fd;
|
||||
@@ -1733,7 +1740,7 @@ diff -u libmagic.orig/file.h libmagic/file.h
|
||||
void *ebuf;
|
||||
size_t elen;
|
||||
};
|
||||
@@ -243,7 +243,7 @@
|
||||
@@ -243,7 +245,7 @@
|
||||
#define FILE_DER 48
|
||||
#define FILE_NAMES_SIZE 49 /* size of array to contain all names */
|
||||
|
||||
@@ -1742,7 +1749,7 @@ diff -u libmagic.orig/file.h libmagic/file.h
|
||||
((t) == FILE_STRING || \
|
||||
(t) == FILE_PSTRING || \
|
||||
(t) == FILE_BESTRING16 || \
|
||||
@@ -447,28 +447,23 @@
|
||||
@@ -447,28 +449,23 @@
|
||||
/* Type for Unicode characters */
|
||||
typedef unsigned long unichar;
|
||||
|
||||
@@ -1776,7 +1783,7 @@ diff -u libmagic.orig/file.h libmagic/file.h
|
||||
protected int file_zmagic(struct magic_set *, const struct buffer *,
|
||||
const char *);
|
||||
#endif
|
||||
@@ -491,13 +486,9 @@
|
||||
@@ -491,13 +488,9 @@
|
||||
protected void file_badread(struct magic_set *);
|
||||
protected void file_badseek(struct magic_set *);
|
||||
protected void file_oomem(struct magic_set *, size_t);
|
||||
@@ -1793,7 +1800,7 @@ diff -u libmagic.orig/file.h libmagic/file.h
|
||||
protected void file_showstr(FILE *, const char *, size_t);
|
||||
protected size_t file_mbswidth(const char *);
|
||||
protected const char *file_getbuffer(struct magic_set *);
|
||||
@@ -513,34 +504,13 @@
|
||||
@@ -513,34 +506,13 @@
|
||||
size_t);
|
||||
#endif /* __EMX__ */
|
||||
|
||||
@@ -1831,7 +1838,7 @@ diff -u libmagic.orig/file.h libmagic/file.h
|
||||
|
||||
typedef struct {
|
||||
char *buf;
|
||||
@@ -550,28 +520,13 @@
|
||||
@@ -550,28 +522,13 @@
|
||||
protected file_pushbuf_t *file_push_buffer(struct magic_set *);
|
||||
protected char *file_pop_buffer(struct magic_set *, file_pushbuf_t *);
|
||||
|
||||
@@ -1862,7 +1869,7 @@ diff -u libmagic.orig/file.h libmagic/file.h
|
||||
size_t strlcat(char *, const char *, size_t);
|
||||
#endif
|
||||
#ifndef HAVE_STRCASESTR
|
||||
@@ -587,39 +542,6 @@
|
||||
@@ -587,39 +544,6 @@
|
||||
#ifndef HAVE_ASCTIME_R
|
||||
char *asctime_r(const struct tm *, char *);
|
||||
#endif
|
||||
@@ -1902,7 +1909,7 @@ diff -u libmagic.orig/file.h libmagic/file.h
|
||||
|
||||
#if defined(HAVE_MMAP) && defined(HAVE_SYS_MMAN_H) && !defined(QUICK)
|
||||
#define QUICK
|
||||
@@ -645,6 +567,18 @@
|
||||
@@ -645,6 +569,18 @@
|
||||
#else
|
||||
#define FILE_RCSID(id)
|
||||
#endif
|
||||
@@ -1923,7 +1930,7 @@ diff -u libmagic.orig/file.h libmagic/file.h
|
||||
#endif
|
||||
diff -u libmagic.orig/fsmagic.c libmagic/fsmagic.c
|
||||
--- libmagic.orig/fsmagic.c 2019-05-07 04:26:48.000000000 +0200
|
||||
+++ libmagic/fsmagic.c 2020-02-26 23:18:22.616403500 +0100
|
||||
+++ libmagic/fsmagic.c 2020-09-07 00:42:14.447562400 +0200
|
||||
@@ -66,26 +66,10 @@
|
||||
# define minor(dev) ((dev) & 0xff)
|
||||
#endif
|
||||
@@ -2216,7 +2223,7 @@ diff -u libmagic.orig/fsmagic.c libmagic/fsmagic.c
|
||||
case S_IFSOCK:
|
||||
diff -u libmagic.orig/funcs.c libmagic/funcs.c
|
||||
--- libmagic.orig/funcs.c 2019-05-07 04:27:11.000000000 +0200
|
||||
+++ libmagic/funcs.c 2020-02-27 11:45:38.445854000 +0100
|
||||
+++ libmagic/funcs.c 2020-09-07 00:42:14.447562400 +0200
|
||||
@@ -31,7 +31,6 @@
|
||||
#endif /* lint */
|
||||
|
||||
@@ -2572,7 +2579,7 @@ diff -u libmagic.orig/funcs.c libmagic/funcs.c
|
||||
|
||||
diff -u libmagic.orig/magic.c libmagic/magic.c
|
||||
--- libmagic.orig/magic.c 2019-05-07 04:27:11.000000000 +0200
|
||||
+++ libmagic/magic.c 2020-02-26 23:18:22.621402800 +0100
|
||||
+++ libmagic/magic.c 2020-09-07 00:42:14.447562400 +0200
|
||||
@@ -25,11 +25,6 @@
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
@@ -3036,8 +3043,8 @@ diff -u libmagic.orig/magic.c libmagic/magic.c
|
||||
public const char *
|
||||
magic_error(struct magic_set *ms)
|
||||
diff -u libmagic.orig/magic.h libmagic/magic.h
|
||||
--- libmagic.orig/magic.h 2020-03-02 15:24:27.253951700 +0100
|
||||
+++ libmagic/magic.h 2020-02-26 23:18:22.622402300 +0100
|
||||
--- libmagic.orig/magic.h 2020-11-23 17:12:12.776465800 +0100
|
||||
+++ libmagic/magic.h 2020-09-07 00:42:14.447562400 +0200
|
||||
@@ -124,6 +124,7 @@
|
||||
|
||||
const char *magic_getpath(const char *, int);
|
||||
@@ -3048,7 +3055,7 @@ diff -u libmagic.orig/magic.h libmagic/magic.h
|
||||
|
||||
diff -u libmagic.orig/print.c libmagic/print.c
|
||||
--- libmagic.orig/print.c 2019-03-12 21:43:05.000000000 +0100
|
||||
+++ libmagic/print.c 2020-02-26 23:18:22.625401800 +0100
|
||||
+++ libmagic/print.c 2020-09-07 00:42:14.447562400 +0200
|
||||
@@ -28,6 +28,7 @@
|
||||
/*
|
||||
* print.c - debugging printout routines
|
||||
@@ -3122,7 +3129,7 @@ diff -u libmagic.orig/print.c libmagic/print.c
|
||||
goto out;
|
||||
diff -u libmagic.orig/readcdf.c libmagic/readcdf.c
|
||||
--- libmagic.orig/readcdf.c 2019-03-12 21:43:05.000000000 +0100
|
||||
+++ libmagic/readcdf.c 2020-02-27 11:45:38.445854000 +0100
|
||||
+++ libmagic/readcdf.c 2020-09-07 00:42:14.463191200 +0200
|
||||
@@ -31,7 +31,11 @@
|
||||
|
||||
#include <assert.h>
|
||||
@@ -3241,7 +3248,7 @@ diff -u libmagic.orig/readcdf.c libmagic/readcdf.c
|
||||
if (i != -1)
|
||||
diff -u libmagic.orig/softmagic.c libmagic/softmagic.c
|
||||
--- libmagic.orig/softmagic.c 2019-05-17 04:24:59.000000000 +0200
|
||||
+++ libmagic/softmagic.c 2020-03-02 15:23:10.176763300 +0100
|
||||
+++ libmagic/softmagic.c 2020-09-07 00:42:14.463191200 +0200
|
||||
@@ -43,6 +43,10 @@
|
||||
#include <time.h>
|
||||
#include "der.h"
|
||||
@@ -3608,7 +3615,7 @@ diff -u libmagic.orig/softmagic.c libmagic/softmagic.c
|
||||
case FILE_INDIRECT:
|
||||
diff -u libmagic.orig/strcasestr.c libmagic/strcasestr.c
|
||||
--- libmagic.orig/strcasestr.c 2014-09-11 17:05:33.000000000 +0200
|
||||
+++ libmagic/strcasestr.c 2019-11-29 08:49:38.434136600 +0100
|
||||
+++ libmagic/strcasestr.c 2020-08-05 15:01:55.644887300 +0200
|
||||
@@ -39,6 +39,8 @@
|
||||
|
||||
#include "file.h"
|
||||
|
||||
@@ -82,6 +82,8 @@
|
||||
#include <sys/stat.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
#define abort() zend_error_noreturn(E_ERROR, "fatal libmagic error")
|
||||
|
||||
#define ENABLE_CONDITIONALS
|
||||
|
||||
#ifndef MAGIC
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
0 string 1
|
||||
>1 regex \^[0-9:,\ ]*-->[0-9:,\ ]* SubRip File
|
||||
!:mime text/x-srt
|
||||
|
||||
0 lelong 0xc3cbc6c5 RISC OS Chunk data
|
||||
>12 string OBJ_ \b, AOF object
|
||||
>12 string LIB_ \b, ALF library
|
||||
|
||||
0 name mach-o \b [
|
||||
>0 use mach-o-cpu \b
|
||||
>(8.L) indirect 8 \b:
|
||||
>0 belong x \b]
|
||||
|
||||
0 belong 0xcafed00d JAR compressed with pack200,
|
||||
>5 byte x version %d.
|
||||
>4 byte x \b%d
|
||||
!:mime application/x-java-pack200
|
||||
|
||||
# Objective-C
|
||||
0 regex \^#import Objective-C source text
|
||||
!:strength + 25
|
||||
!:mime text/x-objective-c
|
||||
|
||||
0 string \x20\x20\x20\x20\x20\x20\x20\x20-:\x20\x20\x20\ 0:Source:
|
||||
>&0 search/128 \x20\x20\x20\x20\x20\x20\x20\x20-:\x20\x20\x20\ 0:Graph:
|
||||
>>&0 search/128 \x20\x20\x20\x20\x20\x20\x20\x20-:\x20\x20\x20\ 0:Data: GCOV coverage report
|
||||
|
||||
0 name certinfo
|
||||
>0 der seq
|
||||
>>&0 der set
|
||||
>>>&0 der seq
|
||||
>>>>&0 der obj_id3=550406
|
||||
>>>>&0 der prt_str=x \b, countryName=%s
|
||||
>>&0 der set
|
||||
>>>&0 der seq
|
||||
>>>>&0 der obj_id3=550408
|
||||
>>>>&0 der utf8_str=x \b, stateOrProvinceName=%s
|
||||
>>&0 der set
|
||||
>>>&0 der seq
|
||||
>>>>&0 der obj_id3=55040a
|
||||
>>>>&0 der utf8_str=x \b, organizationName=%s
|
||||
>>&0 der set
|
||||
>>>&0 der seq
|
||||
>>>>&0 der obj_id3=550403
|
||||
>>>>&0 der utf8_str=x \b, commonName=%s
|
||||
>>&0 der seq
|
||||
|
||||
0 search/1 FONT ASCII vfont text
|
||||
0 short 0436 Berkeley vfont data
|
||||
0 short 017001 byte-swapped Berkeley vfont data
|
||||
@@ -0,0 +1,14 @@
|
||||
--TEST--
|
||||
Bug #77961 (finfo_open crafted magic parsing SIGABRT)
|
||||
--SKIPIF--
|
||||
<?php
|
||||
if (!extension_loaded('fileinfo')) die('skip fileinfo extension not available');
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
finfo_open(FILEINFO_NONE, __DIR__ . '/bug77961.magic');
|
||||
?>
|
||||
--EXPECTF--
|
||||
Notice: finfo_open(): Warning: Expected numeric type got `indirect' in %s on line %d
|
||||
|
||||
Fatal error: fatal libmagic error in %s on line %d
|
||||
@@ -555,6 +555,22 @@ void php_filter_validate_domain(PHP_INPUT_FILTER_PARAM_DECL) /* {{{ */
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
static int is_userinfo_valid(zend_string *str)
|
||||
{
|
||||
const char *valid = "-._~!$&'()*+,;=:";
|
||||
const char *p = ZSTR_VAL(str);
|
||||
while (p - ZSTR_VAL(str) < ZSTR_LEN(str)) {
|
||||
if (isalpha(*p) || isdigit(*p) || strchr(valid, *p)) {
|
||||
p++;
|
||||
} else if (*p == '%' && p - ZSTR_VAL(str) <= ZSTR_LEN(str) - 3 && isdigit(*(p+1)) && isxdigit(*(p+2))) {
|
||||
p += 3;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
void php_filter_validate_url(PHP_INPUT_FILTER_PARAM_DECL) /* {{{ */
|
||||
{
|
||||
php_url *url;
|
||||
@@ -615,6 +631,13 @@ bad_url:
|
||||
php_url_free(url);
|
||||
RETURN_VALIDATION_FAILED
|
||||
}
|
||||
|
||||
if (url->user != NULL && !is_userinfo_valid(url->user)) {
|
||||
php_url_free(url);
|
||||
RETURN_VALIDATION_FAILED
|
||||
|
||||
}
|
||||
|
||||
php_url_free(url);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
--TEST--
|
||||
Bug #77423 (parse_url() will deliver a wrong host to user)
|
||||
--FILE--
|
||||
<?php
|
||||
$urls = array(
|
||||
"http://php.net\@aliyun.com/aaa.do",
|
||||
"https://example.com\uFF03@bing.com",
|
||||
);
|
||||
foreach ($urls as $url) {
|
||||
var_dump(filter_var($url, FILTER_VALIDATE_URL));
|
||||
}
|
||||
?>
|
||||
--EXPECT--
|
||||
bool(false)
|
||||
bool(false)
|
||||
@@ -1931,6 +1931,12 @@ static void ftp_ssl_shutdown(ftpbuf_t *ftp, php_socket_t fd, SSL *ssl_handle) {
|
||||
/* SSL wants a write. Really odd. Let's bail out. */
|
||||
done = 1;
|
||||
break;
|
||||
case SSL_ERROR_SYSCALL:
|
||||
/* most likely the peer closed the connection without
|
||||
sending a close_notify shutdown alert;
|
||||
bail out to avoid raising a spurious warning */
|
||||
done = 1;
|
||||
break;
|
||||
default:
|
||||
if ((sslerror = ERR_get_error())) {
|
||||
ERR_error_string_n(sslerror, buf, sizeof(buf));
|
||||
|
||||
@@ -3551,6 +3551,23 @@ PHP_FUNCTION(imap_fetch_overview)
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
static zend_bool header_injection(zend_string *str, zend_bool adrlist)
|
||||
{
|
||||
char *p = ZSTR_VAL(str);
|
||||
|
||||
while ((p = strpbrk(p, "\r\n")) != NULL) {
|
||||
if (!(p[0] == '\r' && p[1] == '\n')
|
||||
/* adrlists do not support folding, but swallow trailing line breaks */
|
||||
&& !((adrlist && p[1] == '\0')
|
||||
/* other headers support folding */
|
||||
|| !adrlist && (p[1] == ' ' || p[1] == '\t'))) {
|
||||
return 1;
|
||||
}
|
||||
p++;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* {{{ proto string imap_mail_compose(array envelope, array body)
|
||||
Create a MIME message based on given envelope and body sections */
|
||||
PHP_FUNCTION(imap_mail_compose)
|
||||
@@ -3571,6 +3588,13 @@ PHP_FUNCTION(imap_mail_compose)
|
||||
return;
|
||||
}
|
||||
|
||||
#define CHECK_HEADER_INJECTION(zstr, adrlist, header) \
|
||||
if (header_injection(zstr, adrlist)) { \
|
||||
php_error_docref(NULL, E_WARNING, "header injection attempt in " header); \
|
||||
RETVAL_FALSE; \
|
||||
goto done; \
|
||||
}
|
||||
|
||||
#define PHP_RFC822_PARSE_ADRLIST(target, value) \
|
||||
str_copy = estrndup(Z_STRVAL_P(value), Z_STRLEN_P(value)); \
|
||||
rfc822_parse_adrlist(target, str_copy, "NO HOST"); \
|
||||
@@ -3579,46 +3603,57 @@ PHP_FUNCTION(imap_mail_compose)
|
||||
env = mail_newenvelope();
|
||||
if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(envelope), "remail", sizeof("remail") - 1)) != NULL) {
|
||||
convert_to_string_ex(pvalue);
|
||||
CHECK_HEADER_INJECTION(Z_STR_P(pvalue), 0, "remail");
|
||||
env->remail = cpystr(Z_STRVAL_P(pvalue));
|
||||
}
|
||||
if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(envelope), "return_path", sizeof("return_path") - 1)) != NULL) {
|
||||
convert_to_string_ex(pvalue);
|
||||
CHECK_HEADER_INJECTION(Z_STR_P(pvalue), 1, "return_path");
|
||||
PHP_RFC822_PARSE_ADRLIST(&env->return_path, pvalue);
|
||||
}
|
||||
if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(envelope), "date", sizeof("date") - 1)) != NULL) {
|
||||
convert_to_string_ex(pvalue);
|
||||
CHECK_HEADER_INJECTION(Z_STR_P(pvalue), 0, "date");
|
||||
env->date = (unsigned char*)cpystr(Z_STRVAL_P(pvalue));
|
||||
}
|
||||
if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(envelope), "from", sizeof("from") - 1)) != NULL) {
|
||||
convert_to_string_ex(pvalue);
|
||||
CHECK_HEADER_INJECTION(Z_STR_P(pvalue), 1, "from");
|
||||
PHP_RFC822_PARSE_ADRLIST(&env->from, pvalue);
|
||||
}
|
||||
if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(envelope), "reply_to", sizeof("reply_to") - 1)) != NULL) {
|
||||
convert_to_string_ex(pvalue);
|
||||
CHECK_HEADER_INJECTION(Z_STR_P(pvalue), 1, "reply_to");
|
||||
PHP_RFC822_PARSE_ADRLIST(&env->reply_to, pvalue);
|
||||
}
|
||||
if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(envelope), "in_reply_to", sizeof("in_reply_to") - 1)) != NULL) {
|
||||
convert_to_string_ex(pvalue);
|
||||
CHECK_HEADER_INJECTION(Z_STR_P(pvalue), 0, "in_reply_to");
|
||||
env->in_reply_to = cpystr(Z_STRVAL_P(pvalue));
|
||||
}
|
||||
if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(envelope), "subject", sizeof("subject") - 1)) != NULL) {
|
||||
convert_to_string_ex(pvalue);
|
||||
CHECK_HEADER_INJECTION(Z_STR_P(pvalue), 0, "subject");
|
||||
env->subject = cpystr(Z_STRVAL_P(pvalue));
|
||||
}
|
||||
if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(envelope), "to", sizeof("to") - 1)) != NULL) {
|
||||
convert_to_string_ex(pvalue);
|
||||
CHECK_HEADER_INJECTION(Z_STR_P(pvalue), 1, "to");
|
||||
PHP_RFC822_PARSE_ADRLIST(&env->to, pvalue);
|
||||
}
|
||||
if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(envelope), "cc", sizeof("cc") - 1)) != NULL) {
|
||||
convert_to_string_ex(pvalue);
|
||||
CHECK_HEADER_INJECTION(Z_STR_P(pvalue), 1, "cc");
|
||||
PHP_RFC822_PARSE_ADRLIST(&env->cc, pvalue);
|
||||
}
|
||||
if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(envelope), "bcc", sizeof("bcc") - 1)) != NULL) {
|
||||
convert_to_string_ex(pvalue);
|
||||
CHECK_HEADER_INJECTION(Z_STR_P(pvalue), 1, "bcc");
|
||||
PHP_RFC822_PARSE_ADRLIST(&env->bcc, pvalue);
|
||||
}
|
||||
if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(envelope), "message_id", sizeof("message_id") - 1)) != NULL) {
|
||||
convert_to_string_ex(pvalue);
|
||||
CHECK_HEADER_INJECTION(Z_STR_P(pvalue), 0, "message_id");
|
||||
env->message_id=cpystr(Z_STRVAL_P(pvalue));
|
||||
}
|
||||
|
||||
@@ -3629,6 +3664,7 @@ PHP_FUNCTION(imap_mail_compose)
|
||||
ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(pvalue), env_data) {
|
||||
custom_headers_param = mail_newbody_parameter();
|
||||
convert_to_string_ex(env_data);
|
||||
CHECK_HEADER_INJECTION(Z_STR_P(env_data), 0, "custom_headers");
|
||||
custom_headers_param->value = (char *) fs_get(Z_STRLEN_P(env_data) + 1);
|
||||
custom_headers_param->attribute = NULL;
|
||||
memcpy(custom_headers_param->value, Z_STRVAL_P(env_data), Z_STRLEN_P(env_data) + 1);
|
||||
@@ -3667,6 +3703,7 @@ PHP_FUNCTION(imap_mail_compose)
|
||||
}
|
||||
if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(data), "charset", sizeof("charset") - 1)) != NULL) {
|
||||
convert_to_string_ex(pvalue);
|
||||
CHECK_HEADER_INJECTION(Z_STR_P(pvalue), 0, "body charset");
|
||||
tmp_param = mail_newbody_parameter();
|
||||
tmp_param->value = cpystr(Z_STRVAL_P(pvalue));
|
||||
tmp_param->attribute = cpystr("CHARSET");
|
||||
@@ -3679,9 +3716,11 @@ PHP_FUNCTION(imap_mail_compose)
|
||||
SEPARATE_ARRAY(pvalue);
|
||||
ZEND_HASH_FOREACH_STR_KEY_VAL(Z_ARRVAL_P(pvalue), key, disp_data) {
|
||||
if (key == NULL) continue;
|
||||
CHECK_HEADER_INJECTION(key, 0, "body disposition key");
|
||||
disp_param = mail_newbody_parameter();
|
||||
disp_param->attribute = cpystr(ZSTR_VAL(key));
|
||||
convert_to_string_ex(disp_data);
|
||||
CHECK_HEADER_INJECTION(Z_STR_P(disp_data), 0, "body disposition value");
|
||||
disp_param->value = (char *) fs_get(Z_STRLEN_P(disp_data) + 1);
|
||||
memcpy(disp_param->value, Z_STRVAL_P(disp_data), Z_STRLEN_P(disp_data) + 1);
|
||||
disp_param->next = tmp_param;
|
||||
@@ -3692,18 +3731,22 @@ PHP_FUNCTION(imap_mail_compose)
|
||||
}
|
||||
if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(data), "subtype", sizeof("subtype") - 1)) != NULL) {
|
||||
convert_to_string_ex(pvalue);
|
||||
CHECK_HEADER_INJECTION(Z_STR_P(pvalue), 0, "body subtype");
|
||||
bod->subtype = cpystr(Z_STRVAL_P(pvalue));
|
||||
}
|
||||
if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(data), "id", sizeof("id") - 1)) != NULL) {
|
||||
convert_to_string_ex(pvalue);
|
||||
CHECK_HEADER_INJECTION(Z_STR_P(pvalue), 0, "body id");
|
||||
bod->id = cpystr(Z_STRVAL_P(pvalue));
|
||||
}
|
||||
if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(data), "description", sizeof("description") - 1)) != NULL) {
|
||||
convert_to_string_ex(pvalue);
|
||||
CHECK_HEADER_INJECTION(Z_STR_P(pvalue), 0, "body description");
|
||||
bod->description = cpystr(Z_STRVAL_P(pvalue));
|
||||
}
|
||||
if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(data), "disposition.type", sizeof("disposition.type") - 1)) != NULL) {
|
||||
convert_to_string_ex(pvalue);
|
||||
CHECK_HEADER_INJECTION(Z_STR_P(pvalue), 0, "body disposition.type");
|
||||
bod->disposition.type = (char *) fs_get(Z_STRLEN_P(pvalue) + 1);
|
||||
memcpy(bod->disposition.type, Z_STRVAL_P(pvalue), Z_STRLEN_P(pvalue)+1);
|
||||
}
|
||||
@@ -3713,9 +3756,11 @@ PHP_FUNCTION(imap_mail_compose)
|
||||
SEPARATE_ARRAY(pvalue);
|
||||
ZEND_HASH_FOREACH_STR_KEY_VAL(Z_ARRVAL_P(pvalue), key, disp_data) {
|
||||
if (key == NULL) continue;
|
||||
CHECK_HEADER_INJECTION(key, 0, "body type.parameters key");
|
||||
disp_param = mail_newbody_parameter();
|
||||
disp_param->attribute = cpystr(ZSTR_VAL(key));
|
||||
convert_to_string_ex(disp_data);
|
||||
CHECK_HEADER_INJECTION(Z_STR_P(disp_data), 0, "body type.parameters value");
|
||||
disp_param->value = (char *) fs_get(Z_STRLEN_P(disp_data) + 1);
|
||||
memcpy(disp_param->value, Z_STRVAL_P(disp_data), Z_STRLEN_P(disp_data) + 1);
|
||||
disp_param->next = tmp_param;
|
||||
@@ -3746,6 +3791,7 @@ PHP_FUNCTION(imap_mail_compose)
|
||||
}
|
||||
if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(data), "md5", sizeof("md5") - 1)) != NULL) {
|
||||
convert_to_string_ex(pvalue);
|
||||
CHECK_HEADER_INJECTION(Z_STR_P(pvalue), 0, "body md5");
|
||||
bod->md5 = cpystr(Z_STRVAL_P(pvalue));
|
||||
}
|
||||
} else if (Z_TYPE_P(data) == IS_ARRAY && topbod->type == TYPEMULTIPART) {
|
||||
@@ -3778,6 +3824,7 @@ PHP_FUNCTION(imap_mail_compose)
|
||||
}
|
||||
if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(data), "charset", sizeof("charset") - 1)) != NULL) {
|
||||
convert_to_string_ex(pvalue);
|
||||
CHECK_HEADER_INJECTION(Z_STR_P(pvalue), 0, "body charset");
|
||||
tmp_param = mail_newbody_parameter();
|
||||
tmp_param->value = (char *) fs_get(Z_STRLEN_P(pvalue) + 1);
|
||||
memcpy(tmp_param->value, Z_STRVAL_P(pvalue), Z_STRLEN_P(pvalue) + 1);
|
||||
@@ -3791,9 +3838,11 @@ PHP_FUNCTION(imap_mail_compose)
|
||||
SEPARATE_ARRAY(pvalue);
|
||||
ZEND_HASH_FOREACH_STR_KEY_VAL(Z_ARRVAL_P(pvalue), key, disp_data) {
|
||||
if (key == NULL) continue;
|
||||
CHECK_HEADER_INJECTION(key, 0, "body type.parameters key");
|
||||
disp_param = mail_newbody_parameter();
|
||||
disp_param->attribute = cpystr(ZSTR_VAL(key));
|
||||
convert_to_string_ex(disp_data);
|
||||
CHECK_HEADER_INJECTION(Z_STR_P(disp_data), 0, "body type.parameters value");
|
||||
disp_param->value = (char *)fs_get(Z_STRLEN_P(disp_data) + 1);
|
||||
memcpy(disp_param->value, Z_STRVAL_P(disp_data), Z_STRLEN_P(disp_data) + 1);
|
||||
disp_param->next = tmp_param;
|
||||
@@ -3804,18 +3853,22 @@ PHP_FUNCTION(imap_mail_compose)
|
||||
}
|
||||
if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(data), "subtype", sizeof("subtype") - 1)) != NULL) {
|
||||
convert_to_string_ex(pvalue);
|
||||
CHECK_HEADER_INJECTION(Z_STR_P(pvalue), 0, "body subtype");
|
||||
bod->subtype = cpystr(Z_STRVAL_P(pvalue));
|
||||
}
|
||||
if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(data), "id", sizeof("id") - 1)) != NULL) {
|
||||
convert_to_string_ex(pvalue);
|
||||
CHECK_HEADER_INJECTION(Z_STR_P(pvalue), 0, "body id");
|
||||
bod->id = cpystr(Z_STRVAL_P(pvalue));
|
||||
}
|
||||
if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(data), "description", sizeof("description") - 1)) != NULL) {
|
||||
convert_to_string_ex(pvalue);
|
||||
CHECK_HEADER_INJECTION(Z_STR_P(pvalue), 0, "body description");
|
||||
bod->description = cpystr(Z_STRVAL_P(pvalue));
|
||||
}
|
||||
if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(data), "disposition.type", sizeof("disposition.type") - 1)) != NULL) {
|
||||
convert_to_string_ex(pvalue);
|
||||
CHECK_HEADER_INJECTION(Z_STR_P(pvalue), 0, "body disposition.type");
|
||||
bod->disposition.type = (char *) fs_get(Z_STRLEN_P(pvalue) + 1);
|
||||
memcpy(bod->disposition.type, Z_STRVAL_P(pvalue), Z_STRLEN_P(pvalue)+1);
|
||||
}
|
||||
@@ -3825,9 +3878,11 @@ PHP_FUNCTION(imap_mail_compose)
|
||||
SEPARATE_ARRAY(pvalue);
|
||||
ZEND_HASH_FOREACH_STR_KEY_VAL(Z_ARRVAL_P(pvalue), key, disp_data) {
|
||||
if (key == NULL) continue;
|
||||
CHECK_HEADER_INJECTION(key, 0, "body disposition key");
|
||||
disp_param = mail_newbody_parameter();
|
||||
disp_param->attribute = cpystr(ZSTR_VAL(key));
|
||||
convert_to_string_ex(disp_data);
|
||||
CHECK_HEADER_INJECTION(Z_STR_P(disp_data), 0, "body disposition value");
|
||||
disp_param->value = (char *) fs_get(Z_STRLEN_P(disp_data) + 1);
|
||||
memcpy(disp_param->value, Z_STRVAL_P(disp_data), Z_STRLEN_P(disp_data) + 1);
|
||||
disp_param->next = tmp_param;
|
||||
@@ -3858,6 +3913,7 @@ PHP_FUNCTION(imap_mail_compose)
|
||||
}
|
||||
if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(data), "md5", sizeof("md5") - 1)) != NULL) {
|
||||
convert_to_string_ex(pvalue);
|
||||
CHECK_HEADER_INJECTION(Z_STR_P(pvalue), 0, "body md5");
|
||||
bod->md5 = cpystr(Z_STRVAL_P(pvalue));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
--TEST--
|
||||
Bug #80710 (imap_mail_compose() header injection) - MIME Splitting Attack
|
||||
--SKIPIF--
|
||||
<?php
|
||||
if (!extension_loaded("imap")) die("skip imap extension not available");
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
$envelope["from"]= "joe@example.com\n From : X-INJECTED";
|
||||
$envelope["to"] = "foo@example.com\nFrom: X-INJECTED";
|
||||
$envelope["cc"] = "bar@example.com\nFrom: X-INJECTED";
|
||||
$envelope["subject"] = "bar@example.com\n\n From : X-INJECTED";
|
||||
$envelope["x-remail"] = "bar@example.com\nFrom: X-INJECTED";
|
||||
$envelope["something"] = "bar@example.com\nFrom: X-INJECTED";
|
||||
|
||||
$part1["type"] = TYPEMULTIPART;
|
||||
$part1["subtype"] = "mixed";
|
||||
|
||||
$part2["type"] = TYPEAPPLICATION;
|
||||
$part2["encoding"] = ENCBINARY;
|
||||
$part2["subtype"] = "octet-stream\nContent-Type: X-INJECTED";
|
||||
$part2["description"] = "some file\nContent-Type: X-INJECTED";
|
||||
$part2["contents.data"] = "ABC\nContent-Type: X-INJECTED";
|
||||
|
||||
$part3["type"] = TYPETEXT;
|
||||
$part3["subtype"] = "plain";
|
||||
$part3["description"] = "description3";
|
||||
$part3["contents.data"] = "contents.data3\n\n\n\t";
|
||||
|
||||
$body[1] = $part1;
|
||||
$body[2] = $part2;
|
||||
$body[3] = $part3;
|
||||
|
||||
echo imap_mail_compose($envelope, $body);
|
||||
?>
|
||||
--EXPECTF--
|
||||
Warning: imap_mail_compose(): header injection attempt in from in %s on line %d
|
||||
@@ -0,0 +1,37 @@
|
||||
--TEST--
|
||||
Bug #80710 (imap_mail_compose() header injection) - Remail
|
||||
--SKIPIF--
|
||||
<?php
|
||||
if (!extension_loaded("imap")) die("skip imap extension not available");
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
$envelope["from"]= "joe@example.com\n From : X-INJECTED";
|
||||
$envelope["to"] = "foo@example.com\nFrom: X-INJECTED";
|
||||
$envelope["cc"] = "bar@example.com\nFrom: X-INJECTED";
|
||||
$envelope["subject"] = "bar@example.com\n\n From : X-INJECTED";
|
||||
$envelope["remail"] = "X-INJECTED-REMAIL: X-INJECTED\nFrom: X-INJECTED-REMAIL-FROM"; //<--- Injected as first hdr
|
||||
$envelope["something"] = "bar@example.com\nFrom: X-INJECTED";
|
||||
|
||||
$part1["type"] = TYPEMULTIPART;
|
||||
$part1["subtype"] = "mixed";
|
||||
|
||||
$part2["type"] = TYPEAPPLICATION;
|
||||
$part2["encoding"] = ENCBINARY;
|
||||
$part2["subtype"] = "octet-stream\nContent-Type: X-INJECTED";
|
||||
$part2["description"] = "some file\nContent-Type: X-INJECTED";
|
||||
$part2["contents.data"] = "ABC\nContent-Type: X-INJECTED";
|
||||
|
||||
$part3["type"] = TYPETEXT;
|
||||
$part3["subtype"] = "plain";
|
||||
$part3["description"] = "description3";
|
||||
$part3["contents.data"] = "contents.data3\n\n\n\t";
|
||||
|
||||
$body[1] = $part1;
|
||||
$body[2] = $part2;
|
||||
$body[3] = $part3;
|
||||
|
||||
echo imap_mail_compose($envelope, $body);
|
||||
?>
|
||||
--EXPECTF--
|
||||
Warning: imap_mail_compose(): header injection attempt in remail in %s on line %d
|
||||
@@ -175,6 +175,7 @@ U_CFUNC double intl_zval_to_millis(zval *z, intl_error *err, const char *func)
|
||||
return ZEND_NAN;
|
||||
}
|
||||
|
||||
try_again:
|
||||
switch (Z_TYPE_P(z)) {
|
||||
case IS_STRING:
|
||||
type = is_numeric_string(Z_STRVAL_P(z), Z_STRLEN_P(z), &lv, &rv, 0);
|
||||
@@ -227,6 +228,9 @@ U_CFUNC double intl_zval_to_millis(zval *z, intl_error *err, const char *func)
|
||||
efree(message);
|
||||
}
|
||||
break;
|
||||
case IS_REFERENCE:
|
||||
z = Z_REFVAL_P(z);
|
||||
goto try_again;
|
||||
default:
|
||||
spprintf(&message, 0, "%s: invalid PHP type for date", func);
|
||||
intl_errors_set(err, U_ILLEGAL_ARGUMENT_ERROR,
|
||||
|
||||
@@ -46,25 +46,26 @@ extern "C" {
|
||||
|
||||
U_NAMESPACE_BEGIN
|
||||
/**
|
||||
* This class isolates our access to private internal methods of
|
||||
* MessageFormat. It is never instantiated; it exists only for C++
|
||||
* access management.
|
||||
* ICU declares MessageFormatAdapter as a friend class of MessageFormat,
|
||||
* to use as a backdoor for accessing private MessageFormat members.
|
||||
* We use it for the same purpose here. Prefix the methods with php to
|
||||
* avoid clashes with any definitions in ICU.
|
||||
*/
|
||||
class MessageFormatAdapter {
|
||||
public:
|
||||
static const Formattable::Type* getArgTypeList(const MessageFormat& m,
|
||||
static const Formattable::Type* phpGetArgTypeList(const MessageFormat& m,
|
||||
int32_t& count);
|
||||
static const MessagePattern getMessagePattern(MessageFormat* m);
|
||||
static const MessagePattern phpGetMessagePattern(MessageFormat* m);
|
||||
};
|
||||
|
||||
const Formattable::Type*
|
||||
MessageFormatAdapter::getArgTypeList(const MessageFormat& m,
|
||||
MessageFormatAdapter::phpGetArgTypeList(const MessageFormat& m,
|
||||
int32_t& count) {
|
||||
return m.getArgTypeList(count);
|
||||
}
|
||||
|
||||
const MessagePattern
|
||||
MessageFormatAdapter::getMessagePattern(MessageFormat* m) {
|
||||
MessageFormatAdapter::phpGetMessagePattern(MessageFormat* m) {
|
||||
return m->msgPattern;
|
||||
}
|
||||
U_NAMESPACE_END
|
||||
@@ -80,7 +81,7 @@ using icu::FieldPosition;
|
||||
U_CFUNC int32_t umsg_format_arg_count(UMessageFormat *fmt)
|
||||
{
|
||||
int32_t fmt_count = 0;
|
||||
MessageFormatAdapter::getArgTypeList(*(const MessageFormat*)fmt, fmt_count);
|
||||
MessageFormatAdapter::phpGetArgTypeList(*(const MessageFormat*)fmt, fmt_count);
|
||||
return fmt_count;
|
||||
}
|
||||
|
||||
@@ -103,7 +104,7 @@ static HashTable *umsg_get_numeric_types(MessageFormatter_object *mfo,
|
||||
return mfo->mf_data.arg_types;
|
||||
}
|
||||
|
||||
const Formattable::Type *types = MessageFormatAdapter::getArgTypeList(
|
||||
const Formattable::Type *types = MessageFormatAdapter::phpGetArgTypeList(
|
||||
*(MessageFormat*)mfo->mf_data.umsgf, parts_count);
|
||||
|
||||
/* Hash table will store Formattable::Type objects directly,
|
||||
@@ -288,7 +289,7 @@ static HashTable *umsg_get_types(MessageFormatter_object *mfo,
|
||||
{
|
||||
MessageFormat *mf = (MessageFormat *)mfo->mf_data.umsgf;
|
||||
|
||||
const MessagePattern mp = MessageFormatAdapter::getMessagePattern(mf);
|
||||
const MessagePattern mp = MessageFormatAdapter::phpGetMessagePattern(mf);
|
||||
|
||||
return umsg_parse_format(mfo, mp, err);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
--TEST--
|
||||
Bug #80763 (msgfmt_format() does not accept DateTime references)
|
||||
--SKIPIF--
|
||||
<?php
|
||||
if (!extension_loaded('intl')) die('skip intl extension not available');
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
$today = new DateTime('2021-02-17 12:00:00');
|
||||
$formatter = new \MessageFormatter('en_US', 'Today is {today, date, full}.');
|
||||
$params = ['today' => $today];
|
||||
array_walk($params, fn() => 1);
|
||||
var_dump($formatter->format($params));
|
||||
?>
|
||||
--EXPECT--
|
||||
string(38) "Today is Wednesday, February 17, 2021."
|
||||
+49
-1
@@ -409,6 +409,54 @@ php_libxml_input_buffer_create_filename(const char *URI, xmlCharEncoding enc)
|
||||
return(NULL);
|
||||
}
|
||||
|
||||
/* Check if there's been an external transport protocol with an encoding information */
|
||||
if (enc == XML_CHAR_ENCODING_NONE) {
|
||||
php_stream *s = (php_stream *) context;
|
||||
|
||||
if (Z_TYPE(s->wrapperdata) == IS_ARRAY) {
|
||||
zval *header;
|
||||
|
||||
ZEND_HASH_FOREACH_VAL_IND(Z_ARRVAL(s->wrapperdata), header) {
|
||||
const char buf[] = "Content-Type:";
|
||||
if (Z_TYPE_P(header) == IS_STRING &&
|
||||
!zend_binary_strncasecmp(Z_STRVAL_P(header), Z_STRLEN_P(header), buf, sizeof(buf)-1, sizeof(buf)-1)) {
|
||||
char *needle = estrdup("charset=");
|
||||
char *haystack = estrndup(Z_STRVAL_P(header), Z_STRLEN_P(header));
|
||||
char *encoding = php_stristr(haystack, needle, Z_STRLEN_P(header), sizeof("charset=")-1);
|
||||
|
||||
if (encoding) {
|
||||
char *end;
|
||||
|
||||
encoding += sizeof("charset=")-1;
|
||||
if (*encoding == '"') {
|
||||
encoding++;
|
||||
}
|
||||
end = strchr(encoding, ';');
|
||||
if (end == NULL) {
|
||||
end = encoding + strlen(encoding);
|
||||
}
|
||||
end--; /* end == encoding-1 isn't a buffer underrun */
|
||||
while (*end == ' ' || *end == '\t') {
|
||||
end--;
|
||||
}
|
||||
if (*end == '"') {
|
||||
end--;
|
||||
}
|
||||
if (encoding >= end) continue;
|
||||
*(end+1) = '\0';
|
||||
enc = xmlParseCharEncoding(encoding);
|
||||
if (enc <= XML_CHAR_ENCODING_NONE) {
|
||||
enc = XML_CHAR_ENCODING_NONE;
|
||||
}
|
||||
}
|
||||
efree(haystack);
|
||||
efree(needle);
|
||||
break; /* found content-type */
|
||||
}
|
||||
} ZEND_HASH_FOREACH_END();
|
||||
}
|
||||
}
|
||||
|
||||
/* Allocate the Input buffer front-end. */
|
||||
ret = xmlAllocParserInputBuffer(enc);
|
||||
if (ret != NULL) {
|
||||
@@ -1134,7 +1182,7 @@ static PHP_FUNCTION(libxml_set_external_entity_loader)
|
||||
/* {{{ Common functions shared by extensions */
|
||||
int php_libxml_xmlCheckUTF8(const unsigned char *s)
|
||||
{
|
||||
int i;
|
||||
size_t i;
|
||||
unsigned char c;
|
||||
|
||||
for (i = 0; (c = s[i++]);) {
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
--TEST--
|
||||
Bug #51903 (simplexml_load_file() doesn't use HTTP headers)
|
||||
--SKIPIF--
|
||||
<?php
|
||||
if (!extension_loaded('simplexml')) die('skip simplexml extension not available');
|
||||
if (@!include "./ext/standard/tests/http/server.inc") die('skip server.inc not available');
|
||||
http_server_skipif('tcp://127.0.0.1:12342');
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
require "./ext/standard/tests/http/server.inc";
|
||||
$responses = [
|
||||
"data://text/plain,HTTP/1.1 200 OK\r\n"
|
||||
. "Content-Type: text/xml; charset=ISO-8859-1\r\n\r\n"
|
||||
. "<?xml version=\"1.0\"?>\n"
|
||||
. "<root>\xE4\xF6\xFC</root>\n",
|
||||
"data://text/plain,HTTP/1.1 200 OK\r\n"
|
||||
. "Content-Type: text/xml; charset=ISO-8859-1; foo=bar\r\n\r\n"
|
||||
. "<?xml version=\"1.0\"?>\n"
|
||||
. "<root>\xE4\xF6\xFC</root>\n",
|
||||
"data://text/plain,HTTP/1.1 200 OK\r\n"
|
||||
. "Content-Type: text/xml; charset=\"ISO-8859-1\" ; foo=bar\r\n\r\n"
|
||||
. "<?xml version=\"1.0\"?>\n"
|
||||
. "<root>\xE4\xF6\xFC</root>\n",
|
||||
];
|
||||
$pid = http_server('tcp://127.0.0.1:12342', $responses);
|
||||
|
||||
for ($i = 0; $i < count($responses); $i++) {
|
||||
$sxe = simplexml_load_file('http://127.0.0.1:12342/');
|
||||
echo "$sxe\n";
|
||||
}
|
||||
|
||||
http_server_kill($pid);
|
||||
?>
|
||||
--EXPECT--
|
||||
äöü
|
||||
äöü
|
||||
äöü
|
||||
+17
-30
@@ -1041,51 +1041,38 @@ PHP_FUNCTION(mysqli_stmt_construct)
|
||||
zval *mysql_link;
|
||||
MY_STMT *stmt;
|
||||
MYSQLI_RESOURCE *mysqli_resource;
|
||||
char *statement;
|
||||
char *statement = NULL;
|
||||
size_t statement_len;
|
||||
|
||||
switch (ZEND_NUM_ARGS())
|
||||
{
|
||||
case 1: /* mysql_stmt_init */
|
||||
if (zend_parse_parameters(1, "O", &mysql_link, mysqli_link_class_entry)==FAILURE) {
|
||||
return;
|
||||
}
|
||||
MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID);
|
||||
|
||||
stmt = (MY_STMT *)ecalloc(1,sizeof(MY_STMT));
|
||||
|
||||
stmt->stmt = mysql_stmt_init(mysql->mysql);
|
||||
break;
|
||||
case 2:
|
||||
if (zend_parse_parameters(2, "Os", &mysql_link, mysqli_link_class_entry, &statement, &statement_len)==FAILURE) {
|
||||
return;
|
||||
}
|
||||
MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID);
|
||||
|
||||
stmt = (MY_STMT *)ecalloc(1,sizeof(MY_STMT));
|
||||
|
||||
if ((stmt->stmt = mysql_stmt_init(mysql->mysql))) {
|
||||
mysql_stmt_prepare(stmt->stmt, (char *)statement, statement_len);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
WRONG_PARAM_COUNT;
|
||||
break;
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "O|s!", &mysql_link, mysqli_link_class_entry, &statement, &statement_len) == FAILURE) {
|
||||
return;
|
||||
}
|
||||
MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID);
|
||||
|
||||
if (!stmt->stmt) {
|
||||
stmt = (MY_STMT *) ecalloc(1, sizeof(MY_STMT));
|
||||
|
||||
if (!(stmt->stmt = mysql_stmt_init(mysql->mysql))) {
|
||||
efree(stmt);
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
#ifndef MYSQLI_USE_MYSQLND
|
||||
ZVAL_COPY(&stmt->link_handle, mysql_link);
|
||||
#endif
|
||||
|
||||
mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE));
|
||||
mysqli_resource->ptr = (void *)stmt;
|
||||
mysqli_resource->status = (ZEND_NUM_ARGS() == 1) ? MYSQLI_STATUS_INITIALIZED : MYSQLI_STATUS_VALID;
|
||||
mysqli_resource->status = MYSQLI_STATUS_INITIALIZED;
|
||||
|
||||
MYSQLI_REGISTER_RESOURCE_EX(mysqli_resource, getThis());
|
||||
|
||||
if (statement) {
|
||||
if(mysql_stmt_prepare(stmt->stmt, statement, statement_len)) {
|
||||
MYSQLI_REPORT_STMT_ERROR(stmt->stmt);
|
||||
RETURN_FALSE;
|
||||
}
|
||||
mysqli_resource->status = MYSQLI_STATUS_VALID;
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
||||
+10
-2
@@ -1608,7 +1608,11 @@ PHP_FUNCTION(mysqli_next_result) {
|
||||
}
|
||||
MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID);
|
||||
|
||||
RETURN_BOOL(!mysql_next_result(mysql->mysql));
|
||||
if (mysql_next_result(mysql->mysql)) {
|
||||
MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);
|
||||
RETURN_FALSE;
|
||||
}
|
||||
RETURN_TRUE;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
@@ -1640,7 +1644,11 @@ PHP_FUNCTION(mysqli_stmt_next_result) {
|
||||
}
|
||||
MYSQLI_FETCH_RESOURCE_STMT(stmt, mysql_stmt, MYSQLI_STATUS_VALID);
|
||||
|
||||
RETURN_BOOL(!mysql_stmt_next_result(stmt->stmt));
|
||||
if (mysql_stmt_next_result(stmt->stmt)) {
|
||||
MYSQLI_REPORT_STMT_ERROR(stmt->stmt);
|
||||
RETURN_FALSE;
|
||||
}
|
||||
RETURN_TRUE;
|
||||
}
|
||||
/* }}} */
|
||||
#endif
|
||||
|
||||
+38
-38
@@ -8,55 +8,55 @@ require_once('skipifconnectfailure.inc');
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
require_once("connect.inc");
|
||||
require_once("connect.inc");
|
||||
|
||||
$test = "";
|
||||
$test = "";
|
||||
|
||||
/*** test mysqli_connect localhost:port ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, "", $port, $socket);
|
||||
$test .= ($link) ? "1" : "0";
|
||||
mysqli_close($link);
|
||||
/*** test mysqli_connect localhost:port ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, "", $port, $socket);
|
||||
$test .= ($link) ? "1" : "0";
|
||||
mysqli_close($link);
|
||||
|
||||
/*** test mysqli_real_connect ***/
|
||||
$link = mysqli_init();
|
||||
$test.= (my_mysqli_real_connect($link, $host, $user, $passwd, "", $port, $socket) )
|
||||
? "1" : "0";
|
||||
mysqli_close($link);
|
||||
/*** test mysqli_real_connect ***/
|
||||
$link = mysqli_init();
|
||||
$test.= (my_mysqli_real_connect($link, $host, $user, $passwd, "", $port, $socket) )
|
||||
? "1" : "0";
|
||||
mysqli_close($link);
|
||||
|
||||
/*** test mysqli_real_connect with db ***/
|
||||
$link = mysqli_init();
|
||||
$test .= (my_mysqli_real_connect($link, $host, $user, $passwd, $db, $port, $socket))
|
||||
? "1" : "0";
|
||||
mysqli_close($link);
|
||||
/*** test mysqli_real_connect with db ***/
|
||||
$link = mysqli_init();
|
||||
$test .= (my_mysqli_real_connect($link, $host, $user, $passwd, $db, $port, $socket))
|
||||
? "1" : "0";
|
||||
mysqli_close($link);
|
||||
|
||||
/*** test mysqli_real_connect with port ***/
|
||||
$link = mysqli_init();
|
||||
$test .= (my_mysqli_real_connect($link, $host, $user, $passwd, $db, $port, $socket))
|
||||
? "1":"0";
|
||||
mysqli_close($link);
|
||||
/*** test mysqli_real_connect with port ***/
|
||||
$link = mysqli_init();
|
||||
$test .= (my_mysqli_real_connect($link, $host, $user, $passwd, $db, $port, $socket))
|
||||
? "1":"0";
|
||||
mysqli_close($link);
|
||||
|
||||
/* temporary addition for Kent's setup, Win32 box */
|
||||
for ($i = 0; $i < 10; $i++) {
|
||||
if (!$link = mysqli_init())
|
||||
printf("[001 + %d] mysqli_init() failed, [%d] %s\n", $i, mysqli_connect_errno(), mysqli_connect_error());
|
||||
/* temporary addition for Kent's setup, Win32 box */
|
||||
for ($i = 0; $i < 10; $i++) {
|
||||
if (!$link = mysqli_init())
|
||||
printf("[001 + %d] mysqli_init() failed, [%d] %s\n", $i, mysqli_connect_errno(), mysqli_connect_error());
|
||||
|
||||
if (!my_mysqli_real_connect($link, $host, $user, $passwd, $db, $port, $socket))
|
||||
printf("[002 + %d] mysqli_real_connect() failed, [%d] %s\n", $i, mysqli_connect_errno(), mysqli_connect_error());
|
||||
if (!my_mysqli_real_connect($link, $host, $user, $passwd, $db, $port, $socket))
|
||||
printf("[002 + %d] mysqli_real_connect() failed, [%d] %s\n", $i, mysqli_connect_errno(), mysqli_connect_error());
|
||||
|
||||
mysqli_close($link);
|
||||
}
|
||||
mysqli_close($link);
|
||||
}
|
||||
|
||||
/*** test mysqli_real_connect compressed ***/
|
||||
/*
|
||||
$link = mysqli_init();
|
||||
$test .= (my_mysqli_real_connect($link, $host, $user, $passwd, $db, $port, $socket, MYSQLI_CLIENT_COMPRESS))
|
||||
? "1" : "0";
|
||||
mysqli_close($link);
|
||||
/*** test mysqli_real_connect compressed ***/
|
||||
/*
|
||||
$link = mysqli_init();
|
||||
$test .= (my_mysqli_real_connect($link, $host, $user, $passwd, $db, $port, $socket, MYSQLI_CLIENT_COMPRESS))
|
||||
? "1" : "0";
|
||||
mysqli_close($link);
|
||||
*/
|
||||
/* todo ssl connections */
|
||||
/* todo ssl connections */
|
||||
|
||||
var_dump($test);
|
||||
print "done!";
|
||||
var_dump($test);
|
||||
print "done!";
|
||||
?>
|
||||
--EXPECTF--
|
||||
%s(4) "1111"
|
||||
|
||||
+29
-29
@@ -7,44 +7,44 @@ require_once('skipifconnectfailure.inc');
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
require_once("connect.inc");
|
||||
require_once("connect.inc");
|
||||
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
|
||||
printf("[001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
|
||||
printf("[001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
|
||||
|
||||
if (!mysqli_query($link, "DROP TABLE IF EXISTS test_fetch_null"))
|
||||
printf("[002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
if (!mysqli_query($link, "DROP TABLE IF EXISTS test_fetch_null"))
|
||||
printf("[002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
$rc = mysqli_query($link,"CREATE TABLE test_fetch_null(col1 tinyint, col2 smallint,
|
||||
col3 int, col4 bigint,
|
||||
col5 float, col6 double,
|
||||
col7 date, col8 time,
|
||||
col9 varbinary(10),
|
||||
col10 varchar(50),
|
||||
col11 char(20)) ENGINE=" . $engine);
|
||||
$rc = mysqli_query($link,"CREATE TABLE test_fetch_null(col1 tinyint, col2 smallint,
|
||||
col3 int, col4 bigint,
|
||||
col5 float, col6 double,
|
||||
col7 date, col8 time,
|
||||
col9 varbinary(10),
|
||||
col10 varchar(50),
|
||||
col11 char(20)) ENGINE=" . $engine);
|
||||
|
||||
if (!$rc)
|
||||
printf("[003] Cannot create table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
if (!$rc)
|
||||
printf("[003] Cannot create table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
$rc = mysqli_query($link, "INSERT INTO test_fetch_null(col1,col10, col11) VALUES(1,'foo1', 1000),(2,'foo2', 88),(3,'foo3', 389789)");
|
||||
if (!$rc)
|
||||
printf("[004] Cannot insert records, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
$rc = mysqli_query($link, "INSERT INTO test_fetch_null(col1,col10, col11) VALUES(1,'foo1', 1000),(2,'foo2', 88),(3,'foo3', 389789)");
|
||||
if (!$rc)
|
||||
printf("[004] Cannot insert records, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
$stmt = mysqli_prepare($link, "SELECT col1, col2, col3, col4, col5, col6, col7, col8, col9, col10, col11 from test_fetch_null ORDER BY col1");
|
||||
mysqli_stmt_bind_result($stmt, $c1, $c2, $c3, $c4, $c5, $c6, $c7, $c8, $c9, $c10, $c11);
|
||||
mysqli_stmt_execute($stmt);
|
||||
$stmt = mysqli_prepare($link, "SELECT col1, col2, col3, col4, col5, col6, col7, col8, col9, col10, col11 from test_fetch_null ORDER BY col1");
|
||||
mysqli_stmt_bind_result($stmt, $c1, $c2, $c3, $c4, $c5, $c6, $c7, $c8, $c9, $c10, $c11);
|
||||
mysqli_stmt_execute($stmt);
|
||||
|
||||
mysqli_stmt_fetch($stmt);
|
||||
mysqli_stmt_fetch($stmt);
|
||||
|
||||
$test = array($c1,$c2,$c3,$c4,$c5,$c6,$c7,$c8,$c9,$c10,$c11);
|
||||
$test = array($c1,$c2,$c3,$c4,$c5,$c6,$c7,$c8,$c9,$c10,$c11);
|
||||
|
||||
var_dump($test);
|
||||
var_dump($test);
|
||||
|
||||
mysqli_stmt_close($stmt);
|
||||
@mysqli_query($link, "DROP TABLE IF EXISTS test_fetch_null");
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
mysqli_stmt_close($stmt);
|
||||
@mysqli_query($link, "DROP TABLE IF EXISTS test_fetch_null");
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
?>
|
||||
--CLEAN--
|
||||
<?php
|
||||
@@ -53,7 +53,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
|
||||
printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
|
||||
|
||||
if (!mysqli_query($link, "DROP TABLE IF EXISTS test_fetch_null"))
|
||||
printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
mysqli_close($link);
|
||||
?>
|
||||
|
||||
+54
-54
@@ -7,70 +7,70 @@ require_once('skipifconnectfailure.inc');
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
require_once("connect.inc");
|
||||
require_once("connect.inc");
|
||||
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
|
||||
mysqli_query($link, "SET sql_mode=''");
|
||||
mysqli_query($link, "SET sql_mode=''");
|
||||
|
||||
if (!mysqli_query($link,"DROP TABLE IF EXISTS test_bind_result"))
|
||||
printf("[001] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
if (!mysqli_query($link,"DROP TABLE IF EXISTS test_bind_result"))
|
||||
printf("[001] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
$rc = @mysqli_query($link,"CREATE TABLE test_bind_result(
|
||||
c1 date,
|
||||
c2 time,
|
||||
c3 timestamp(14),
|
||||
c4 year,
|
||||
c5 datetime,
|
||||
c6 timestamp(4),
|
||||
c7 timestamp(6)) ENGINE=" . $engine);
|
||||
$rc = @mysqli_query($link,"CREATE TABLE test_bind_result(
|
||||
c1 date,
|
||||
c2 time,
|
||||
c3 timestamp(14),
|
||||
c4 year,
|
||||
c5 datetime,
|
||||
c6 timestamp(4),
|
||||
c7 timestamp(6)) ENGINE=" . $engine);
|
||||
|
||||
/*
|
||||
Seems that not all MySQL 6.0 installations use defaults that ignore the display widths.
|
||||
From the manual:
|
||||
From MySQL 4.1.0 on, TIMESTAMP display format differs from that of earlier MySQL releases:
|
||||
[...]
|
||||
Display widths (used as described in the preceding section) are no longer supported.
|
||||
In other words, for declarations such as TIMESTAMP(2), TIMESTAMP(4), and so on,
|
||||
the display width is ignored.
|
||||
[...]
|
||||
*/
|
||||
if (!$rc)
|
||||
$rc = @mysqli_query($link,"CREATE TABLE test_bind_result(
|
||||
c1 date,
|
||||
c2 time,
|
||||
c3 timestamp,
|
||||
c4 year,
|
||||
c5 datetime,
|
||||
c6 timestamp,
|
||||
c7 timestamp) ENGINE=" . $engine);
|
||||
/*
|
||||
Seems that not all MySQL 6.0 installations use defaults that ignore the display widths.
|
||||
From the manual:
|
||||
From MySQL 4.1.0 on, TIMESTAMP display format differs from that of earlier MySQL releases:
|
||||
[...]
|
||||
Display widths (used as described in the preceding section) are no longer supported.
|
||||
In other words, for declarations such as TIMESTAMP(2), TIMESTAMP(4), and so on,
|
||||
the display width is ignored.
|
||||
[...]
|
||||
*/
|
||||
if (!$rc)
|
||||
$rc = @mysqli_query($link,"CREATE TABLE test_bind_result(
|
||||
c1 date,
|
||||
c2 time,
|
||||
c3 timestamp,
|
||||
c4 year,
|
||||
c5 datetime,
|
||||
c6 timestamp,
|
||||
c7 timestamp) ENGINE=" . $engine);
|
||||
|
||||
if (!$rc)
|
||||
printf("[002] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
if (!$rc)
|
||||
printf("[002] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
$rc = mysqli_query($link, "INSERT INTO test_bind_result VALUES(
|
||||
'2002-01-02',
|
||||
'12:49:00',
|
||||
'2002-01-02 17:46:59',
|
||||
2010,
|
||||
'2010-07-10',
|
||||
'2020','1999-12-29')");
|
||||
if (!$rc)
|
||||
printf("[003] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
$rc = mysqli_query($link, "INSERT INTO test_bind_result VALUES(
|
||||
'2002-01-02',
|
||||
'12:49:00',
|
||||
'2002-01-02 17:46:59',
|
||||
2010,
|
||||
'2010-07-10',
|
||||
'2020','1999-12-29')");
|
||||
if (!$rc)
|
||||
printf("[003] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
$stmt = mysqli_prepare($link, "SELECT c1, c2, c3, c4, c5, c6, c7 FROM test_bind_result");
|
||||
mysqli_stmt_bind_result($stmt, $c1, $c2, $c3, $c4, $c5, $c6, $c7);
|
||||
mysqli_stmt_execute($stmt);
|
||||
mysqli_stmt_fetch($stmt);
|
||||
$stmt = mysqli_prepare($link, "SELECT c1, c2, c3, c4, c5, c6, c7 FROM test_bind_result");
|
||||
mysqli_stmt_bind_result($stmt, $c1, $c2, $c3, $c4, $c5, $c6, $c7);
|
||||
mysqli_stmt_execute($stmt);
|
||||
mysqli_stmt_fetch($stmt);
|
||||
|
||||
$test = array($c1,$c2,$c3,$c4,$c5,$c6,$c7);
|
||||
$test = array($c1,$c2,$c3,$c4,$c5,$c6,$c7);
|
||||
|
||||
var_dump($test);
|
||||
var_dump($test);
|
||||
|
||||
mysqli_stmt_close($stmt);
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS test_bind_result");
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
mysqli_stmt_close($stmt);
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS test_bind_result");
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
?>
|
||||
--CLEAN--
|
||||
<?php
|
||||
@@ -79,7 +79,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
|
||||
printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
|
||||
|
||||
if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_result"))
|
||||
printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
mysqli_close($link);
|
||||
?>
|
||||
|
||||
+32
-32
@@ -7,48 +7,48 @@ require_once('skipifconnectfailure.inc');
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
include ("connect.inc");
|
||||
include ("connect.inc");
|
||||
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
|
||||
mysqli_select_db($link, $db);
|
||||
mysqli_select_db($link, $db);
|
||||
|
||||
if (!mysqli_query($link,"DROP TABLE IF EXISTS test_bind_fetch"))
|
||||
printf("[001] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
if (!mysqli_query($link,"DROP TABLE IF EXISTS test_bind_fetch"))
|
||||
printf("[001] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
if (!mysqli_query($link,"CREATE TABLE test_bind_fetch(c1 char(10), c2 text) ENGINE=" . $engine))
|
||||
printf("[002] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
if (!mysqli_query($link,"CREATE TABLE test_bind_fetch(c1 char(10), c2 text) ENGINE=" . $engine))
|
||||
printf("[002] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
if (!mysqli_query($link, "INSERT INTO test_bind_fetch VALUES ('1234567890', 'this is a test0')"))
|
||||
printf("[003] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
if (!mysqli_query($link, "INSERT INTO test_bind_fetch VALUES ('1234567890', 'this is a test0')"))
|
||||
printf("[003] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
if (!mysqli_query($link, "INSERT INTO test_bind_fetch VALUES ('1234567891', 'this is a test1')"))
|
||||
printf("[004] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
if (!mysqli_query($link, "INSERT INTO test_bind_fetch VALUES ('1234567891', 'this is a test1')"))
|
||||
printf("[004] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
if (!mysqli_query($link, "INSERT INTO test_bind_fetch VALUES ('1234567892', 'this is a test2')"))
|
||||
printf("[005] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
if (!mysqli_query($link, "INSERT INTO test_bind_fetch VALUES ('1234567892', 'this is a test2')"))
|
||||
printf("[005] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
if (!mysqli_query($link, "INSERT INTO test_bind_fetch VALUES ('1234567893', 'this is a test3')"))
|
||||
printf("[006] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
if (!mysqli_query($link, "INSERT INTO test_bind_fetch VALUES ('1234567893', 'this is a test3')"))
|
||||
printf("[006] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
if (!$stmt = mysqli_prepare($link, "SELECT * FROM test_bind_fetch ORDER BY c1"))
|
||||
printf("[007] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
if (!$stmt = mysqli_prepare($link, "SELECT * FROM test_bind_fetch ORDER BY c1"))
|
||||
printf("[007] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
$c1 = $c2 = NULL;
|
||||
mysqli_stmt_bind_result($stmt, $c1, $c2);
|
||||
mysqli_stmt_execute($stmt);
|
||||
$i = 4;
|
||||
while ($i--) {
|
||||
mysqli_stmt_fetch($stmt);
|
||||
$test = array($c1, $c2);
|
||||
var_dump($test);
|
||||
}
|
||||
$c1 = $c2 = NULL;
|
||||
mysqli_stmt_bind_result($stmt, $c1, $c2);
|
||||
mysqli_stmt_execute($stmt);
|
||||
$i = 4;
|
||||
while ($i--) {
|
||||
mysqli_stmt_fetch($stmt);
|
||||
$test = array($c1, $c2);
|
||||
var_dump($test);
|
||||
}
|
||||
|
||||
mysqli_stmt_close($stmt);
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch");
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
mysqli_stmt_close($stmt);
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch");
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
?>
|
||||
--CLEAN--
|
||||
<?php
|
||||
@@ -57,7 +57,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
|
||||
printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
|
||||
|
||||
if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch"))
|
||||
printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
mysqli_close($link);
|
||||
?>
|
||||
|
||||
+23
-23
@@ -7,38 +7,38 @@ require_once('skipifconnectfailure.inc');
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
require_once("connect.inc");
|
||||
require_once("connect.inc");
|
||||
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
|
||||
if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch"))
|
||||
printf("[001] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch"))
|
||||
printf("[001] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
if (!mysqli_query($link, "CREATE TABLE test_bind_fetch(c1 char(10), c2 text) ENGINE=" . $engine))
|
||||
printf("[002] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
if (!mysqli_query($link, "CREATE TABLE test_bind_fetch(c1 char(10), c2 text) ENGINE=" . $engine))
|
||||
printf("[002] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
$a = str_repeat("A1", 32000);
|
||||
$a = str_repeat("A1", 32000);
|
||||
|
||||
mysqli_query($link, "INSERT INTO test_bind_fetch VALUES ('1234567890', '$a')");
|
||||
mysqli_query($link, "INSERT INTO test_bind_fetch VALUES ('1234567890', '$a')");
|
||||
|
||||
$stmt = mysqli_prepare($link, "SELECT * FROM test_bind_fetch");
|
||||
mysqli_stmt_bind_result($stmt, $c1, $c2);
|
||||
mysqli_stmt_execute($stmt);
|
||||
mysqli_stmt_fetch($stmt);
|
||||
$stmt = mysqli_prepare($link, "SELECT * FROM test_bind_fetch");
|
||||
mysqli_stmt_bind_result($stmt, $c1, $c2);
|
||||
mysqli_stmt_execute($stmt);
|
||||
mysqli_stmt_fetch($stmt);
|
||||
|
||||
$test[] = $c1;
|
||||
$test[] = ($a == $c2) ? "32K String ok" : "32K String failed";
|
||||
$test[] = $c1;
|
||||
$test[] = ($a == $c2) ? "32K String ok" : "32K String failed";
|
||||
|
||||
var_dump($test);
|
||||
var_dump($test);
|
||||
|
||||
/* this will crash with libmysql from PHP 5.0.6 (or earlier) to 5.3.0 */
|
||||
mysqli_stmt_fetch($stmt);
|
||||
/* this will crash with libmysql from PHP 5.0.6 (or earlier) to 5.3.0 */
|
||||
mysqli_stmt_fetch($stmt);
|
||||
|
||||
mysqli_stmt_close($stmt);
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch");
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
mysqli_stmt_close($stmt);
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch");
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
?>
|
||||
--CLEAN--
|
||||
<?php
|
||||
@@ -47,7 +47,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
|
||||
printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
|
||||
|
||||
if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch"))
|
||||
printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
mysqli_close($link);
|
||||
?>
|
||||
|
||||
+29
-29
@@ -7,43 +7,43 @@ require_once('skipifconnectfailure.inc');
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
require_once("connect.inc");
|
||||
require_once("connect.inc");
|
||||
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
|
||||
if (!mysqli_query($link, "SET sql_mode=''"))
|
||||
printf("[001] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
if (!mysqli_query($link, "SET sql_mode=''"))
|
||||
printf("[001] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
if (!mysqli_query($link,"DROP TABLE IF EXISTS test_bind_fetch"))
|
||||
printf("[002] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
if (!mysqli_query($link,"DROP TABLE IF EXISTS test_bind_fetch"))
|
||||
printf("[002] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
$rc = mysqli_query($link,"CREATE TABLE test_bind_fetch(c1 int unsigned,
|
||||
c2 int unsigned,
|
||||
c3 int,
|
||||
c4 int,
|
||||
c5 int,
|
||||
c6 int unsigned,
|
||||
c7 int) ENGINE=" . $engine);
|
||||
if (!$rc)
|
||||
printf("[003] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
$rc = mysqli_query($link,"CREATE TABLE test_bind_fetch(c1 int unsigned,
|
||||
c2 int unsigned,
|
||||
c3 int,
|
||||
c4 int,
|
||||
c5 int,
|
||||
c6 int unsigned,
|
||||
c7 int) ENGINE=" . $engine);
|
||||
if (!$rc)
|
||||
printf("[003] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
if (!mysqli_query($link, "INSERT INTO test_bind_fetch VALUES (-23,35999,NULL,-500,-9999999,-0,0)"))
|
||||
printf("[004] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
if (!mysqli_query($link, "INSERT INTO test_bind_fetch VALUES (-23,35999,NULL,-500,-9999999,-0,0)"))
|
||||
printf("[004] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
$stmt = mysqli_prepare($link, "SELECT * FROM test_bind_fetch");
|
||||
mysqli_stmt_bind_result($stmt, $c1, $c2, $c3, $c4, $c5, $c6, $c7);
|
||||
mysqli_stmt_execute($stmt);
|
||||
mysqli_stmt_fetch($stmt);
|
||||
$stmt = mysqli_prepare($link, "SELECT * FROM test_bind_fetch");
|
||||
mysqli_stmt_bind_result($stmt, $c1, $c2, $c3, $c4, $c5, $c6, $c7);
|
||||
mysqli_stmt_execute($stmt);
|
||||
mysqli_stmt_fetch($stmt);
|
||||
|
||||
$test = array($c1,$c2,$c3,$c4,$c5,$c6,$c7);
|
||||
$test = array($c1,$c2,$c3,$c4,$c5,$c6,$c7);
|
||||
|
||||
var_dump($test);
|
||||
var_dump($test);
|
||||
|
||||
mysqli_stmt_close($stmt);
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch");
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
mysqli_stmt_close($stmt);
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch");
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
?>
|
||||
--CLEAN--
|
||||
<?php
|
||||
@@ -52,7 +52,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
|
||||
printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
|
||||
|
||||
if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch"))
|
||||
printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
mysqli_close($link);
|
||||
?>
|
||||
|
||||
+29
-29
@@ -7,43 +7,43 @@ require_once('skipifconnectfailure.inc');
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
require_once("connect.inc");
|
||||
require_once("connect.inc");
|
||||
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
|
||||
if (!mysqli_query($link, "SET sql_mode=''"))
|
||||
printf("[001] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
if (!mysqli_query($link, "SET sql_mode=''"))
|
||||
printf("[001] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch"))
|
||||
printf("[002] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch"))
|
||||
printf("[002] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
$rc = mysqli_query($link, "CREATE TABLE test_bind_fetch(c1 smallint unsigned,
|
||||
c2 smallint unsigned,
|
||||
c3 smallint,
|
||||
c4 smallint,
|
||||
c5 smallint,
|
||||
c6 smallint unsigned,
|
||||
c7 smallint) ENGINE=" . $engine);
|
||||
if (!$rc)
|
||||
printf("[003] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
$rc = mysqli_query($link, "CREATE TABLE test_bind_fetch(c1 smallint unsigned,
|
||||
c2 smallint unsigned,
|
||||
c3 smallint,
|
||||
c4 smallint,
|
||||
c5 smallint,
|
||||
c6 smallint unsigned,
|
||||
c7 smallint) ENGINE=" . $engine);
|
||||
if (!$rc)
|
||||
printf("[003] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
if (!mysqli_query($link, "INSERT INTO test_bind_fetch VALUES (-23,35999,NULL,-500,-9999999,+30,0)"))
|
||||
printf("[004] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
if (!mysqli_query($link, "INSERT INTO test_bind_fetch VALUES (-23,35999,NULL,-500,-9999999,+30,0)"))
|
||||
printf("[004] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
$stmt = mysqli_prepare($link, "SELECT * FROM test_bind_fetch");
|
||||
mysqli_stmt_bind_result($stmt, $c1, $c2, $c3, $c4, $c5, $c6, $c7);
|
||||
mysqli_stmt_execute($stmt);
|
||||
mysqli_stmt_fetch($stmt);
|
||||
$stmt = mysqli_prepare($link, "SELECT * FROM test_bind_fetch");
|
||||
mysqli_stmt_bind_result($stmt, $c1, $c2, $c3, $c4, $c5, $c6, $c7);
|
||||
mysqli_stmt_execute($stmt);
|
||||
mysqli_stmt_fetch($stmt);
|
||||
|
||||
$test = array($c1,$c2,$c3,$c4,$c5,$c6,$c7);
|
||||
$test = array($c1,$c2,$c3,$c4,$c5,$c6,$c7);
|
||||
|
||||
var_dump($test);
|
||||
var_dump($test);
|
||||
|
||||
mysqli_stmt_close($stmt);
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch");
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
mysqli_stmt_close($stmt);
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch");
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
?>
|
||||
--CLEAN--
|
||||
<?php
|
||||
@@ -52,7 +52,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
|
||||
printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
|
||||
|
||||
if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch"))
|
||||
printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
mysqli_close($link);
|
||||
?>
|
||||
|
||||
+29
-29
@@ -7,43 +7,43 @@ require_once('skipifconnectfailure.inc');
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
require_once("connect.inc");
|
||||
require_once("connect.inc");
|
||||
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
|
||||
if (!mysqli_query($link, "SET sql_mode=''"))
|
||||
printf("[001] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
if (!mysqli_query($link, "SET sql_mode=''"))
|
||||
printf("[001] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch"))
|
||||
printf("[002] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch"))
|
||||
printf("[002] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
$rc = mysqli_query($link, "CREATE TABLE test_bind_fetch(c1 tinyint,
|
||||
c2 tinyint unsigned,
|
||||
c3 tinyint not NULL,
|
||||
c4 tinyint,
|
||||
c5 tinyint,
|
||||
c6 tinyint unsigned,
|
||||
c7 tinyint) ENGINE=" . $engine);
|
||||
if (!$rc)
|
||||
printf("[003] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
$rc = mysqli_query($link, "CREATE TABLE test_bind_fetch(c1 tinyint,
|
||||
c2 tinyint unsigned,
|
||||
c3 tinyint not NULL,
|
||||
c4 tinyint,
|
||||
c5 tinyint,
|
||||
c6 tinyint unsigned,
|
||||
c7 tinyint) ENGINE=" . $engine);
|
||||
if (!$rc)
|
||||
printf("[003] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
if (!mysqli_query($link, "INSERT INTO test_bind_fetch VALUES (-23,300,0,-100,-127,+30,0)"))
|
||||
printf("[004] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
if (!mysqli_query($link, "INSERT INTO test_bind_fetch VALUES (-23,300,0,-100,-127,+30,0)"))
|
||||
printf("[004] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
$stmt = mysqli_prepare($link, "SELECT * FROM test_bind_fetch");
|
||||
mysqli_stmt_bind_result($stmt, $c1, $c2, $c3, $c4, $c5, $c6, $c7);
|
||||
mysqli_stmt_execute($stmt);
|
||||
mysqli_stmt_fetch($stmt);
|
||||
$stmt = mysqli_prepare($link, "SELECT * FROM test_bind_fetch");
|
||||
mysqli_stmt_bind_result($stmt, $c1, $c2, $c3, $c4, $c5, $c6, $c7);
|
||||
mysqli_stmt_execute($stmt);
|
||||
mysqli_stmt_fetch($stmt);
|
||||
|
||||
$test = array($c1,$c2,$c3,$c4,$c5,$c6,$c7);
|
||||
$test = array($c1,$c2,$c3,$c4,$c5,$c6,$c7);
|
||||
|
||||
var_dump($test);
|
||||
var_dump($test);
|
||||
|
||||
mysqli_stmt_close($stmt);
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch");
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
mysqli_stmt_close($stmt);
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch");
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
?>
|
||||
--CLEAN--
|
||||
<?php
|
||||
@@ -52,7 +52,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
|
||||
printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
|
||||
|
||||
if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch"))
|
||||
printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
mysqli_close($link);
|
||||
?>
|
||||
|
||||
+60
-60
@@ -2,81 +2,81 @@
|
||||
mysqli fetch bigint values (ok to fail with 4.1.x)
|
||||
--SKIPIF--
|
||||
<?php
|
||||
if (PHP_INT_SIZE == 8) {
|
||||
echo 'skip test valid only for 32bit systems';
|
||||
exit;
|
||||
}
|
||||
require_once('skipif.inc');
|
||||
require_once('skipifconnectfailure.inc');
|
||||
if (PHP_INT_SIZE == 8) {
|
||||
echo 'skip test valid only for 32bit systems';
|
||||
exit;
|
||||
}
|
||||
require_once('skipif.inc');
|
||||
require_once('skipifconnectfailure.inc');
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
require_once("connect.inc");
|
||||
require_once("connect.inc");
|
||||
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
|
||||
if (!mysqli_query($link, "SET sql_mode=''"))
|
||||
printf("[001] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
if (!mysqli_query($link, "SET sql_mode=''"))
|
||||
printf("[001] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch"))
|
||||
printf("[002] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch"))
|
||||
printf("[002] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
$rc = mysqli_query($link,"CREATE TABLE test_bind_fetch(c1 bigint default 5,
|
||||
c2 bigint,
|
||||
c3 bigint not NULL,
|
||||
c4 bigint unsigned,
|
||||
c5 bigint unsigned,
|
||||
c6 bigint unsigned,
|
||||
c7 bigint unsigned,
|
||||
c8 bigint unsigned) ENGINE=" . $engine);
|
||||
if (!$rc)
|
||||
printf("[003] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
$rc = mysqli_query($link,"CREATE TABLE test_bind_fetch(c1 bigint default 5,
|
||||
c2 bigint,
|
||||
c3 bigint not NULL,
|
||||
c4 bigint unsigned,
|
||||
c5 bigint unsigned,
|
||||
c6 bigint unsigned,
|
||||
c7 bigint unsigned,
|
||||
c8 bigint unsigned) ENGINE=" . $engine);
|
||||
if (!$rc)
|
||||
printf("[003] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
$rc = mysqli_query($link, "INSERT INTO test_bind_fetch (c2,c3,c4,c5,c6,c7,c8) ".
|
||||
"VALUES (-23,4.0,33333333333333,0,-333333333333,99.9,1234)");
|
||||
if (!$rc)
|
||||
printf("[004] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
$rc = mysqli_query($link, "INSERT INTO test_bind_fetch (c2,c3,c4,c5,c6,c7,c8) ".
|
||||
"VALUES (-23,4.0,33333333333333,0,-333333333333,99.9,1234)");
|
||||
if (!$rc)
|
||||
printf("[004] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
$stmt = mysqli_prepare($link, "SELECT * FROM test_bind_fetch");
|
||||
mysqli_stmt_bind_result($stmt, $c1, $c2, $c3, $c4, $c5, $c6, $c7, $c8);
|
||||
mysqli_stmt_execute($stmt);
|
||||
$rc = mysqli_stmt_fetch($stmt);
|
||||
$stmt = mysqli_prepare($link, "SELECT * FROM test_bind_fetch");
|
||||
mysqli_stmt_bind_result($stmt, $c1, $c2, $c3, $c4, $c5, $c6, $c7, $c8);
|
||||
mysqli_stmt_execute($stmt);
|
||||
$rc = mysqli_stmt_fetch($stmt);
|
||||
|
||||
if (mysqli_get_server_version($link) < 50000) {
|
||||
// 4.1 is faulty and will return big number for $c6
|
||||
if ($c6 == "18446743740376218283") {
|
||||
$c6 = 0;
|
||||
}
|
||||
}
|
||||
$c8 = 4567;// change this to test how mysqli/mysqlnd handles is_ref changing
|
||||
$test = array($c1,$c2,$c3,$c4,$c5,$c6,$c7,$c8);
|
||||
if (mysqli_get_server_version($link) < 50000) {
|
||||
// 4.1 is faulty and will return big number for $c6
|
||||
if ($c6 == "18446743740376218283") {
|
||||
$c6 = 0;
|
||||
}
|
||||
}
|
||||
$c8 = 4567;// change this to test how mysqli/mysqlnd handles is_ref changing
|
||||
$test = array($c1,$c2,$c3,$c4,$c5,$c6,$c7,$c8);
|
||||
|
||||
var_dump($test);
|
||||
var_dump($test);
|
||||
|
||||
mysqli_stmt_close($stmt);
|
||||
mysqli_stmt_close($stmt);
|
||||
|
||||
if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch_uint"))
|
||||
printf("[005] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
$rc = mysqli_query($link, "CREATE TABLE test_bind_fetch_uint(c1 integer unsigned, c2 integer unsigned) ENGINE=" . $engine);
|
||||
if (!$rc)
|
||||
printf("[006] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch_uint"))
|
||||
printf("[005] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
$rc = mysqli_query($link, "CREATE TABLE test_bind_fetch_uint(c1 integer unsigned, c2 integer unsigned) ENGINE=" . $engine);
|
||||
if (!$rc)
|
||||
printf("[006] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
if (!mysqli_query($link, "INSERT INTO test_bind_fetch_uint (c1,c2) VALUES (20123456, 3123456789)"))
|
||||
printf("[007] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
if (!mysqli_query($link, "INSERT INTO test_bind_fetch_uint (c1,c2) VALUES (20123456, 3123456789)"))
|
||||
printf("[007] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
$stmt = mysqli_prepare($link, "SELECT * FROM test_bind_fetch_uint");
|
||||
mysqli_stmt_bind_result($stmt, $c1, $c2);
|
||||
mysqli_stmt_execute($stmt);
|
||||
$rc = mysqli_stmt_fetch($stmt);
|
||||
$stmt = mysqli_prepare($link, "SELECT * FROM test_bind_fetch_uint");
|
||||
mysqli_stmt_bind_result($stmt, $c1, $c2);
|
||||
mysqli_stmt_execute($stmt);
|
||||
$rc = mysqli_stmt_fetch($stmt);
|
||||
|
||||
echo $c1, "\n", $c2, "\n";
|
||||
echo $c1, "\n", $c2, "\n";
|
||||
|
||||
mysqli_stmt_close($stmt);
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch");
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch_uint");
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
mysqli_stmt_close($stmt);
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch");
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch_uint");
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
?>
|
||||
--CLEAN--
|
||||
<?php
|
||||
@@ -85,10 +85,10 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
|
||||
printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
|
||||
|
||||
if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch"))
|
||||
printf("[002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
printf("[002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch_uint"))
|
||||
printf("[002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
printf("[002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
mysqli_close($link);
|
||||
?>
|
||||
|
||||
+29
-29
@@ -9,44 +9,44 @@ require_once('skipifconnectfailure.inc');
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
require_once("connect.inc");
|
||||
require_once("connect.inc");
|
||||
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
|
||||
if (!mysqli_query($link, "SET sql_mode=''"))
|
||||
printf("[001] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
if (!mysqli_query($link, "SET sql_mode=''"))
|
||||
printf("[001] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch"))
|
||||
printf("[002] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch"))
|
||||
printf("[002] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
$rc = mysqli_query($link, "CREATE TABLE test_bind_fetch(c1 float(3),
|
||||
c2 float,
|
||||
c3 float unsigned,
|
||||
c4 float,
|
||||
c5 float,
|
||||
c6 float,
|
||||
c7 float(10) unsigned) ENGINE=" . $engine);
|
||||
if (!$rc)
|
||||
printf("[003] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
$rc = mysqli_query($link, "CREATE TABLE test_bind_fetch(c1 float(3),
|
||||
c2 float,
|
||||
c3 float unsigned,
|
||||
c4 float,
|
||||
c5 float,
|
||||
c6 float,
|
||||
c7 float(10) unsigned) ENGINE=" . $engine);
|
||||
if (!$rc)
|
||||
printf("[003] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
|
||||
mysqli_query($link, "INSERT INTO test_bind_fetch (c1,c2,c3,c4,c5,c6,c7) VALUES (3.1415926535,-0.000001, -5, 999999999999,
|
||||
sin(0.6), 1.00000000000001, 888888888888888)");
|
||||
mysqli_query($link, "INSERT INTO test_bind_fetch (c1,c2,c3,c4,c5,c6,c7) VALUES (3.1415926535,-0.000001, -5, 999999999999,
|
||||
sin(0.6), 1.00000000000001, 888888888888888)");
|
||||
|
||||
$stmt = mysqli_prepare($link, "SELECT * FROM test_bind_fetch");
|
||||
mysqli_stmt_bind_result($stmt, $c1, $c2, $c3, $c4, $c5, $c6, $c7);
|
||||
mysqli_stmt_execute($stmt);
|
||||
mysqli_stmt_fetch($stmt);
|
||||
$stmt = mysqli_prepare($link, "SELECT * FROM test_bind_fetch");
|
||||
mysqli_stmt_bind_result($stmt, $c1, $c2, $c3, $c4, $c5, $c6, $c7);
|
||||
mysqli_stmt_execute($stmt);
|
||||
mysqli_stmt_fetch($stmt);
|
||||
|
||||
$test = array($c1,$c2,$c3,$c4,$c5,$c6,$c7);
|
||||
$test = array($c1,$c2,$c3,$c4,$c5,$c6,$c7);
|
||||
|
||||
var_dump($test);
|
||||
var_dump($test);
|
||||
|
||||
mysqli_stmt_close($stmt);
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch");
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
mysqli_stmt_close($stmt);
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch");
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
?>
|
||||
--CLEAN--
|
||||
<?php
|
||||
@@ -55,7 +55,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
|
||||
printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
|
||||
|
||||
if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch"))
|
||||
printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
mysqli_close($link);
|
||||
?>
|
||||
|
||||
+28
-28
@@ -9,41 +9,41 @@ require_once('skipifconnectfailure.inc');
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
require_once("connect.inc");
|
||||
require_once("connect.inc");
|
||||
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
|
||||
if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_result"))
|
||||
printf("[001] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_result"))
|
||||
printf("[001] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
$rc = mysqli_query($link, "CREATE TABLE test_bind_result(c1 tinyint, c2 smallint,
|
||||
c3 int, c4 bigint,
|
||||
c5 float, c6 double,
|
||||
c7 varbinary(10),
|
||||
c8 varchar(50)) ENGINE=" . $engine);
|
||||
if (!$rc)
|
||||
printf("[002] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
$rc = mysqli_query($link, "CREATE TABLE test_bind_result(c1 tinyint, c2 smallint,
|
||||
c3 int, c4 bigint,
|
||||
c5 float, c6 double,
|
||||
c7 varbinary(10),
|
||||
c8 varchar(50)) ENGINE=" . $engine);
|
||||
if (!$rc)
|
||||
printf("[002] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
$rc = mysqli_query($link,"INSERT INTO test_bind_result VALUES(19,2999,3999,4999999,
|
||||
2345.6,5678.89563,
|
||||
'foobar','mysql rulez')");
|
||||
if (!$rc)
|
||||
printf("[003] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
$rc = mysqli_query($link,"INSERT INTO test_bind_result VALUES(19,2999,3999,4999999,
|
||||
2345.6,5678.89563,
|
||||
'foobar','mysql rulez')");
|
||||
if (!$rc)
|
||||
printf("[003] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
$stmt = mysqli_prepare($link, "SELECT * FROM test_bind_result");
|
||||
mysqli_stmt_bind_result($stmt, $c1, $c2, $c3, $c4, $c5, $c6, $c7, $c8);
|
||||
mysqli_stmt_execute($stmt);
|
||||
mysqli_stmt_fetch($stmt);
|
||||
$stmt = mysqli_prepare($link, "SELECT * FROM test_bind_result");
|
||||
mysqli_stmt_bind_result($stmt, $c1, $c2, $c3, $c4, $c5, $c6, $c7, $c8);
|
||||
mysqli_stmt_execute($stmt);
|
||||
mysqli_stmt_fetch($stmt);
|
||||
|
||||
$test = array($c1,$c2,$c3,$c4,$c5,$c6,$c7,$c8);
|
||||
$test = array($c1,$c2,$c3,$c4,$c5,$c6,$c7,$c8);
|
||||
|
||||
var_dump($test);
|
||||
var_dump($test);
|
||||
|
||||
mysqli_stmt_close($stmt);
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS test_bind_result");
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
mysqli_stmt_close($stmt);
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS test_bind_result");
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
?>
|
||||
--CLEAN--
|
||||
<?php
|
||||
@@ -52,7 +52,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
|
||||
printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
|
||||
|
||||
if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_result"))
|
||||
printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
mysqli_close($link);
|
||||
?>
|
||||
|
||||
+27
-27
@@ -9,40 +9,40 @@ require_once('skipifconnectfailure.inc');
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
require_once("connect.inc");
|
||||
require_once("connect.inc");
|
||||
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
|
||||
if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_result"))
|
||||
printf("[001] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_result"))
|
||||
printf("[001] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
$rc = mysqli_query($link, "CREATE TABLE test_bind_result(c1 tinyint, c2 smallint,
|
||||
c3 int, c4 bigint,
|
||||
c5 float, c6 double,
|
||||
c7 varbinary(10),
|
||||
c8 varchar(10)) ENGINE=" . $engine);
|
||||
if (!$rc)
|
||||
printf("[002] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
$rc = mysqli_query($link, "CREATE TABLE test_bind_result(c1 tinyint, c2 smallint,
|
||||
c3 int, c4 bigint,
|
||||
c5 float, c6 double,
|
||||
c7 varbinary(10),
|
||||
c8 varchar(10)) ENGINE=" . $engine);
|
||||
if (!$rc)
|
||||
printf("[002] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
if (!mysqli_query($link, "INSERT INTO test_bind_result VALUES(120,2999,3999,54,
|
||||
2.6,58.89,
|
||||
'206','6.7')"))
|
||||
printf("[003] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
if (!mysqli_query($link, "INSERT INTO test_bind_result VALUES(120,2999,3999,54,
|
||||
2.6,58.89,
|
||||
'206','6.7')"))
|
||||
printf("[003] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
$stmt = mysqli_prepare($link, "SELECT * FROM test_bind_result");
|
||||
mysqli_stmt_bind_result($stmt, $c1, $c2, $c3, $c4, $c5, $c6, $c7, $c8);
|
||||
mysqli_stmt_execute($stmt);
|
||||
mysqli_stmt_fetch($stmt);
|
||||
$stmt = mysqli_prepare($link, "SELECT * FROM test_bind_result");
|
||||
mysqli_stmt_bind_result($stmt, $c1, $c2, $c3, $c4, $c5, $c6, $c7, $c8);
|
||||
mysqli_stmt_execute($stmt);
|
||||
mysqli_stmt_fetch($stmt);
|
||||
|
||||
$test = array($c1,$c2,$c3,$c4,$c5,$c6,$c7,$c8);
|
||||
$test = array($c1,$c2,$c3,$c4,$c5,$c6,$c7,$c8);
|
||||
|
||||
var_dump($test);
|
||||
var_dump($test);
|
||||
|
||||
mysqli_stmt_close($stmt);
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS test_bind_result");
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
mysqli_stmt_close($stmt);
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS test_bind_result");
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
?>
|
||||
--CLEAN--
|
||||
<?php
|
||||
@@ -51,7 +51,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
|
||||
printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
|
||||
|
||||
if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_result"))
|
||||
printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
mysqli_close($link);
|
||||
?>
|
||||
|
||||
+40
-40
@@ -7,54 +7,54 @@ require_once('skipifconnectfailure.inc');
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
require_once("connect.inc");
|
||||
require_once("connect.inc");
|
||||
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
|
||||
if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_result"))
|
||||
printf("[001] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_result"))
|
||||
printf("[001] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
$rc = mysqli_query($link, "CREATE TABLE test_bind_result(c1 tinyint, c2 smallint,
|
||||
c3 int, c4 bigint,
|
||||
c5 decimal(4,2), c6 double,
|
||||
c7 varbinary(10),
|
||||
c8 varchar(10)) ENGINE=" . $engine);
|
||||
if (!$rc)
|
||||
printf("[002] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
$rc = mysqli_query($link, "CREATE TABLE test_bind_result(c1 tinyint, c2 smallint,
|
||||
c3 int, c4 bigint,
|
||||
c5 decimal(4,2), c6 double,
|
||||
c7 varbinary(10),
|
||||
c8 varchar(10)) ENGINE=" . $engine);
|
||||
if (!$rc)
|
||||
printf("[002] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
if (!mysqli_query($link, "INSERT INTO test_bind_result VALUES(120,2999,3999,54,
|
||||
2.6,58.89,
|
||||
'206','6.7')"))
|
||||
printf("[003] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
if (!mysqli_query($link, "INSERT INTO test_bind_result VALUES(120,2999,3999,54,
|
||||
2.6,58.89,
|
||||
'206','6.7')"))
|
||||
printf("[003] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
$stmt = mysqli_prepare($link, "SELECT * FROM test_bind_result");
|
||||
$stmt = mysqli_prepare($link, "SELECT * FROM test_bind_result");
|
||||
|
||||
$c = array(0,0,0,0,0,0,0,0);
|
||||
$b_res= mysqli_stmt_bind_result($stmt, $c[0], $c[1], $c[2], $c[3], $c[4], $c[5], $c[6], $c[7]);
|
||||
mysqli_stmt_execute($stmt);
|
||||
mysqli_stmt_fetch($stmt);
|
||||
mysqli_stmt_fetch($stmt);
|
||||
mysqli_stmt_close($stmt);
|
||||
$c = array(0,0,0,0,0,0,0,0);
|
||||
$b_res= mysqli_stmt_bind_result($stmt, $c[0], $c[1], $c[2], $c[3], $c[4], $c[5], $c[6], $c[7]);
|
||||
mysqli_stmt_execute($stmt);
|
||||
mysqli_stmt_fetch($stmt);
|
||||
mysqli_stmt_fetch($stmt);
|
||||
mysqli_stmt_close($stmt);
|
||||
|
||||
$result = mysqli_query($link, "select * from test_bind_result");
|
||||
$d = mysqli_fetch_row($result);
|
||||
mysqli_free_result($result);
|
||||
$result = mysqli_query($link, "select * from test_bind_result");
|
||||
$d = mysqli_fetch_row($result);
|
||||
mysqli_free_result($result);
|
||||
|
||||
$test = "";
|
||||
for ($i=0; $i < count($c); $i++)
|
||||
$test .= ($c[$i] == $d[$i]) ? "1" : "0";
|
||||
if ($test == "11111111")
|
||||
echo "ok\n";
|
||||
else if ($b_res == FALSE && mysqli_get_client_version() > 40100 && mysqli_get_client_version() < 50000 &&
|
||||
mysqli_get_server_version($link) > 50000)
|
||||
echo "error (4.1 library with 5.x server)";
|
||||
else
|
||||
echo "error";
|
||||
$test = "";
|
||||
for ($i=0; $i < count($c); $i++)
|
||||
$test .= ($c[$i] == $d[$i]) ? "1" : "0";
|
||||
if ($test == "11111111")
|
||||
echo "ok\n";
|
||||
else if ($b_res == FALSE && mysqli_get_client_version() > 40100 && mysqli_get_client_version() < 50000 &&
|
||||
mysqli_get_server_version($link) > 50000)
|
||||
echo "error (4.1 library with 5.x server)";
|
||||
else
|
||||
echo "error";
|
||||
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS test_bind_result");
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS test_bind_result");
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
?>
|
||||
--CLEAN--
|
||||
<?php
|
||||
@@ -63,7 +63,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
|
||||
printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
|
||||
|
||||
if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_result"))
|
||||
printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
mysqli_close($link);
|
||||
?>
|
||||
|
||||
+49
-49
@@ -2,83 +2,83 @@
|
||||
mysqli autocommit/commit/rollback
|
||||
--SKIPIF--
|
||||
<?php
|
||||
require_once('skipif.inc');
|
||||
require_once('skipifconnectfailure.inc');
|
||||
require_once("connect.inc");
|
||||
require_once('skipif.inc');
|
||||
require_once('skipifconnectfailure.inc');
|
||||
require_once("connect.inc");
|
||||
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
if (!$link)
|
||||
die(sprintf("skip Cannot connect, [%d] %s", mysqli_connect_errno(), mysqli_connect_error()));
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
if (!$link)
|
||||
die(sprintf("skip Cannot connect, [%d] %s", mysqli_connect_errno(), mysqli_connect_error()));
|
||||
|
||||
if (!have_innodb($link))
|
||||
die(sprintf("skip Needs InnoDB support, [%d] %s", $link->errno, $link->error));
|
||||
if (!have_innodb($link))
|
||||
die(sprintf("skip Needs InnoDB support, [%d] %s", $link->errno, $link->error));
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
require_once("connect.inc");
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
require_once("connect.inc");
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
|
||||
if (!mysqli_autocommit($link, TRUE))
|
||||
printf("[001] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
if (!mysqli_autocommit($link, TRUE))
|
||||
printf("[001] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
if (!mysqli_query($link, "DROP TABLE IF EXISTS test"))
|
||||
printf("[002] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
if (!mysqli_query($link, "DROP TABLE IF EXISTS test"))
|
||||
printf("[002] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
if (!mysqli_query($link, "CREATE TABLE test(a int, b varchar(10)) engine=InnoDB"))
|
||||
printf("[003] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
if (!mysqli_query($link, "CREATE TABLE test(a int, b varchar(10)) engine=InnoDB"))
|
||||
printf("[003] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
if (!mysqli_query($link, "INSERT INTO test VALUES (1, 'foobar')"))
|
||||
printf("[004] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
if (!mysqli_query($link, "INSERT INTO test VALUES (1, 'foobar')"))
|
||||
printf("[004] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
if (!mysqli_autocommit($link, FALSE))
|
||||
printf("[005] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
if (!mysqli_autocommit($link, FALSE))
|
||||
printf("[005] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
if (!mysqli_query($link, "DELETE FROM test"))
|
||||
printf("[006] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
if (!mysqli_query($link, "DELETE FROM test"))
|
||||
printf("[006] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
if (!mysqli_query($link, "INSERT INTO test VALUES (2, 'egon')"))
|
||||
printf("[007] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
if (!mysqli_query($link, "INSERT INTO test VALUES (2, 'egon')"))
|
||||
printf("[007] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
if (!mysqli_rollback($link))
|
||||
printf("[008] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
if (!mysqli_rollback($link))
|
||||
printf("[008] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
if (!$result = mysqli_query($link, "SELECT * FROM test"))
|
||||
printf("[009] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
if (!$result = mysqli_query($link, "SELECT * FROM test"))
|
||||
printf("[009] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
printf("Num_of_rows=%d\n", mysqli_num_rows($result));
|
||||
if (!$row = mysqli_fetch_row($result))
|
||||
printf("[010] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
printf("Num_of_rows=%d\n", mysqli_num_rows($result));
|
||||
if (!$row = mysqli_fetch_row($result))
|
||||
printf("[010] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
mysqli_free_result($result);
|
||||
mysqli_free_result($result);
|
||||
|
||||
var_dump($row);
|
||||
var_dump($row);
|
||||
|
||||
if (!mysqli_query($link, "DELETE FROM test"))
|
||||
printf("[011] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
if (!mysqli_query($link, "DELETE FROM test"))
|
||||
printf("[011] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
if (!mysqli_query($link, "INSERT INTO test VALUES (2, 'egon')"))
|
||||
printf("[012] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
if (!mysqli_query($link, "INSERT INTO test VALUES (2, 'egon')"))
|
||||
printf("[012] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
if (!mysqli_commit($link))
|
||||
printf("[012] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
if (!mysqli_commit($link))
|
||||
printf("[012] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
if (!$result = mysqli_query($link, "SELECT * FROM test"))
|
||||
printf("[013] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
if (!$result = mysqli_query($link, "SELECT * FROM test"))
|
||||
printf("[013] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
if (!$row = mysqli_fetch_row($result))
|
||||
printf("[014] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
if (!$row = mysqli_fetch_row($result))
|
||||
printf("[014] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
mysqli_free_result($result);
|
||||
mysqli_free_result($result);
|
||||
|
||||
var_dump($row);
|
||||
var_dump($row);
|
||||
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS test");
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS test");
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
?>
|
||||
--CLEAN--
|
||||
<?php
|
||||
require_once("clean_table.inc");
|
||||
require_once("clean_table.inc");
|
||||
?>
|
||||
--EXPECT--
|
||||
Num_of_rows=1
|
||||
|
||||
+53
-53
@@ -2,81 +2,81 @@
|
||||
mysqli autocommit/commit/rollback with innodb
|
||||
--SKIPIF--
|
||||
<?php
|
||||
require_once('skipif.inc');
|
||||
require_once('skipifconnectfailure.inc');
|
||||
require_once('skipif.inc');
|
||||
require_once('skipifconnectfailure.inc');
|
||||
|
||||
require_once('connect.inc');
|
||||
if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
|
||||
die(sprintf("skip Cannot connect, [%d] %s", mysqli_connect_errno(), mysqli_connect_error()));
|
||||
require_once('connect.inc');
|
||||
if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
|
||||
die(sprintf("skip Cannot connect, [%d] %s", mysqli_connect_errno(), mysqli_connect_error()));
|
||||
|
||||
if (!have_innodb($link))
|
||||
die(sprintf("skip Needs InnoDB support, [%d] %s", $link->errno, $link->error));
|
||||
if (!have_innodb($link))
|
||||
die(sprintf("skip Needs InnoDB support, [%d] %s", $link->errno, $link->error));
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
require_once("connect.inc");
|
||||
require_once("connect.inc");
|
||||
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
if (!$link)
|
||||
printf("[001] Cannot connect, [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
if (!$link)
|
||||
printf("[001] Cannot connect, [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
|
||||
|
||||
if (!mysqli_select_db($link, $db))
|
||||
printf("[002] Cannot select DB '%s', [%d] %s\n", $db,
|
||||
mysqli_errno($link), mysqli_error($link));
|
||||
if (!mysqli_select_db($link, $db))
|
||||
printf("[002] Cannot select DB '%s', [%d] %s\n", $db,
|
||||
mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
if (!mysqli_autocommit($link, TRUE))
|
||||
printf("[003] Cannot turn on autocommit mode, [%d] %s\n",
|
||||
mysqli_errno($link), mysqli_error($link));
|
||||
if (!mysqli_autocommit($link, TRUE))
|
||||
printf("[003] Cannot turn on autocommit mode, [%d] %s\n",
|
||||
mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
if (!mysqli_query($link,"DROP TABLE IF EXISTS test") ||
|
||||
!mysqli_query($link,"CREATE TABLE test(a int, b varchar(10)) Engine=InnoDB") ||
|
||||
!mysqli_query($link, "INSERT INTO test VALUES (1, 'foobar')"))
|
||||
printf("[004] Cannot create test data, [%d] %s\n",
|
||||
mysqli_errno($link), mysqli_error($link));
|
||||
if (!mysqli_query($link,"DROP TABLE IF EXISTS test") ||
|
||||
!mysqli_query($link,"CREATE TABLE test(a int, b varchar(10)) Engine=InnoDB") ||
|
||||
!mysqli_query($link, "INSERT INTO test VALUES (1, 'foobar')"))
|
||||
printf("[004] Cannot create test data, [%d] %s\n",
|
||||
mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
if (!mysqli_autocommit($link, FALSE))
|
||||
printf("[005] Cannot turn off autocommit mode, [%d] %s\n",
|
||||
mysqli_errno($link), mysqli_error($link));
|
||||
if (!mysqli_autocommit($link, FALSE))
|
||||
printf("[005] Cannot turn off autocommit mode, [%d] %s\n",
|
||||
mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
if (!mysqli_query($link, "DELETE FROM test") ||
|
||||
!mysqli_query($link, "INSERT INTO test VALUES (2, 'egon')"))
|
||||
printf("[006] Cannot modify test data, [%d] %s\n",
|
||||
mysqli_errno($link), mysqli_error($link));
|
||||
if (!mysqli_query($link, "DELETE FROM test") ||
|
||||
!mysqli_query($link, "INSERT INTO test VALUES (2, 'egon')"))
|
||||
printf("[006] Cannot modify test data, [%d] %s\n",
|
||||
mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
if (!mysqli_rollback($link))
|
||||
printf("[007] Cannot call rollback, [%d] %s\n",
|
||||
mysqli_errno($link), mysqli_error($link));
|
||||
if (!mysqli_rollback($link))
|
||||
printf("[007] Cannot call rollback, [%d] %s\n",
|
||||
mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
$result = mysqli_query($link, "SELECT SQL_NO_CACHE * FROM test");
|
||||
if (!$result)
|
||||
printf("[008] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
$row = mysqli_fetch_row($result);
|
||||
mysqli_free_result($result);
|
||||
$result = mysqli_query($link, "SELECT SQL_NO_CACHE * FROM test");
|
||||
if (!$result)
|
||||
printf("[008] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
$row = mysqli_fetch_row($result);
|
||||
mysqli_free_result($result);
|
||||
|
||||
var_dump($row);
|
||||
var_dump($row);
|
||||
|
||||
if (!mysqli_query($link, "DELETE FROM test") ||
|
||||
!mysqli_query($link, "INSERT INTO test VALUES (2, 'egon')"))
|
||||
printf("[009] Cannot modify test data, [%d] %s\n",
|
||||
mysqli_errno($link), mysqli_error($link));
|
||||
if (!mysqli_query($link, "DELETE FROM test") ||
|
||||
!mysqli_query($link, "INSERT INTO test VALUES (2, 'egon')"))
|
||||
printf("[009] Cannot modify test data, [%d] %s\n",
|
||||
mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
mysqli_commit($link);
|
||||
mysqli_commit($link);
|
||||
|
||||
$result = mysqli_query($link, "SELECT * FROM test");
|
||||
if (!$result)
|
||||
printf("[010] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
$row = mysqli_fetch_row($result);
|
||||
mysqli_free_result($result);
|
||||
$result = mysqli_query($link, "SELECT * FROM test");
|
||||
if (!$result)
|
||||
printf("[010] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
$row = mysqli_fetch_row($result);
|
||||
mysqli_free_result($result);
|
||||
|
||||
var_dump($row);
|
||||
var_dump($row);
|
||||
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS test");
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS test");
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
?>
|
||||
--CLEAN--
|
||||
<?php
|
||||
require_once("clean_table.inc");
|
||||
require_once("clean_table.inc");
|
||||
?>
|
||||
--EXPECT--
|
||||
array(2) {
|
||||
|
||||
+14
-14
@@ -7,26 +7,26 @@ require_once('skipifconnectfailure.inc');
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
require_once("connect.inc");
|
||||
require_once("connect.inc");
|
||||
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
|
||||
if (!mysqli_query($link, "SET @dummy='foobar'"))
|
||||
printf("[001] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
if (!mysqli_query($link, "SET @dummy='foobar'"))
|
||||
printf("[001] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
if (!$stmt = mysqli_prepare($link, "SELECT @dummy"))
|
||||
printf("[002] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
if (!$stmt = mysqli_prepare($link, "SELECT @dummy"))
|
||||
printf("[002] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
mysqli_stmt_bind_result($stmt, $dummy);
|
||||
mysqli_stmt_execute($stmt);
|
||||
mysqli_stmt_fetch($stmt);
|
||||
mysqli_stmt_bind_result($stmt, $dummy);
|
||||
mysqli_stmt_execute($stmt);
|
||||
mysqli_stmt_fetch($stmt);
|
||||
|
||||
var_dump($dummy);
|
||||
var_dump($dummy);
|
||||
|
||||
mysqli_stmt_close($stmt);
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
mysqli_stmt_close($stmt);
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
?>
|
||||
--EXPECT--
|
||||
string(6) "foobar"
|
||||
|
||||
+16
-16
@@ -8,28 +8,28 @@ require_once('skipifconnectfailure.inc');
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
require_once("connect.inc");
|
||||
require_once("connect.inc");
|
||||
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
|
||||
if (!$stmt = mysqli_prepare($link, "SELECT md5('bar'), database(), 'foo'"))
|
||||
printf("[001] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
if (!$stmt = mysqli_prepare($link, "SELECT md5('bar'), database(), 'foo'"))
|
||||
printf("[001] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
mysqli_stmt_bind_result($stmt, $c0, $c1, $c2);
|
||||
mysqli_stmt_execute($stmt);
|
||||
mysqli_stmt_bind_result($stmt, $c0, $c1, $c2);
|
||||
mysqli_stmt_execute($stmt);
|
||||
|
||||
mysqli_stmt_fetch($stmt);
|
||||
mysqli_stmt_close($stmt);
|
||||
mysqli_stmt_fetch($stmt);
|
||||
mysqli_stmt_close($stmt);
|
||||
|
||||
$test = array($c0, $c1, $c2);
|
||||
if ($c1 !== $db) {
|
||||
echo "Different data\n";
|
||||
}
|
||||
$test = array($c0, $c1, $c2);
|
||||
if ($c1 !== $db) {
|
||||
echo "Different data\n";
|
||||
}
|
||||
|
||||
var_dump($test);
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
var_dump($test);
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
?>
|
||||
--EXPECTF--
|
||||
array(3) {
|
||||
|
||||
+13
-13
@@ -7,26 +7,26 @@ require_once('skipifconnectfailure.inc');
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
require_once("connect.inc");
|
||||
require_once("connect.inc");
|
||||
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
|
||||
if (!mysqli_query($link, "SET AUTOCOMMIT=0"))
|
||||
printf("[001] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
if (!mysqli_query($link, "SET AUTOCOMMIT=0"))
|
||||
printf("[001] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
if (!$stmt = mysqli_prepare($link, "SELECT @@autocommit"))
|
||||
printf("[001] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
if (!$stmt = mysqli_prepare($link, "SELECT @@autocommit"))
|
||||
printf("[001] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
mysqli_stmt_bind_result($stmt, $c0);
|
||||
mysqli_stmt_execute($stmt);
|
||||
mysqli_stmt_bind_result($stmt, $c0);
|
||||
mysqli_stmt_execute($stmt);
|
||||
|
||||
mysqli_stmt_fetch($stmt);
|
||||
mysqli_stmt_fetch($stmt);
|
||||
|
||||
var_dump($c0);
|
||||
var_dump($c0);
|
||||
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
?>
|
||||
--EXPECT--
|
||||
int(0)
|
||||
|
||||
+35
-35
@@ -7,53 +7,53 @@ require_once('skipifconnectfailure.inc');
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
require_once("connect.inc");
|
||||
require_once("connect.inc");
|
||||
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
|
||||
if (!mysqli_query($link, "DROP TABLE IF EXISTS insert_read"))
|
||||
printf("[001] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
if (!mysqli_query($link, "DROP TABLE IF EXISTS insert_read"))
|
||||
printf("[001] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
$rc = mysqli_query($link,"CREATE TABLE insert_read(col1 tinyint, col2 smallint,
|
||||
col3 int, col4 bigint,
|
||||
col5 float, col6 double,
|
||||
col7 date, col8 time,
|
||||
col9 varbinary(10),
|
||||
col10 varchar(50),
|
||||
col11 char(20)) ENGINE=" . $engine);
|
||||
if (!$rc)
|
||||
printf("[002] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
$rc = mysqli_query($link,"CREATE TABLE insert_read(col1 tinyint, col2 smallint,
|
||||
col3 int, col4 bigint,
|
||||
col5 float, col6 double,
|
||||
col7 date, col8 time,
|
||||
col9 varbinary(10),
|
||||
col10 varchar(50),
|
||||
col11 char(20)) ENGINE=" . $engine);
|
||||
if (!$rc)
|
||||
printf("[002] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
if (!$stmt = mysqli_prepare($link, "INSERT INTO insert_read(col1,col10, col11, col6) VALUES (?,?,?,?)"))
|
||||
printf("[003] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
if (!$stmt = mysqli_prepare($link, "INSERT INTO insert_read(col1,col10, col11, col6) VALUES (?,?,?,?)"))
|
||||
printf("[003] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
mysqli_stmt_bind_param($stmt, "issd", $c1, $c2, $c3, $c4);
|
||||
mysqli_stmt_bind_param($stmt, "issd", $c1, $c2, $c3, $c4);
|
||||
|
||||
$c1 = 1;
|
||||
$c2 = "foo";
|
||||
$c3 = "foobar";
|
||||
$c4 = 3.14;
|
||||
$c1 = 1;
|
||||
$c2 = "foo";
|
||||
$c3 = "foobar";
|
||||
$c4 = 3.14;
|
||||
|
||||
mysqli_stmt_execute($stmt);
|
||||
mysqli_stmt_close($stmt);
|
||||
mysqli_stmt_execute($stmt);
|
||||
mysqli_stmt_close($stmt);
|
||||
|
||||
if (!$stmt = mysqli_prepare($link, "SELECT col1, col2, col3, col4, col5, col6, col7, col8, col9, col10, col11 FROM insert_read"))
|
||||
printf("[004] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
if (!$stmt = mysqli_prepare($link, "SELECT col1, col2, col3, col4, col5, col6, col7, col8, col9, col10, col11 FROM insert_read"))
|
||||
printf("[004] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
mysqli_stmt_bind_result($stmt, $c1, $c2, $c3, $c4, $c5, $c6, $c7, $c8, $c9, $c10, $c11);
|
||||
mysqli_stmt_execute($stmt);
|
||||
mysqli_stmt_bind_result($stmt, $c1, $c2, $c3, $c4, $c5, $c6, $c7, $c8, $c9, $c10, $c11);
|
||||
mysqli_stmt_execute($stmt);
|
||||
|
||||
mysqli_stmt_fetch($stmt);
|
||||
mysqli_stmt_fetch($stmt);
|
||||
|
||||
$test = array($c1,$c2,$c3,$c4,$c5,$c6,$c7,$c8,$c9,$c10,$c11);
|
||||
$test = array($c1,$c2,$c3,$c4,$c5,$c6,$c7,$c8,$c9,$c10,$c11);
|
||||
|
||||
var_dump($test);
|
||||
var_dump($test);
|
||||
|
||||
mysqli_stmt_close($stmt);
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS insert_read");
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
mysqli_stmt_close($stmt);
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS insert_read");
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
?>
|
||||
--CLEAN--
|
||||
<?php
|
||||
@@ -62,7 +62,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
|
||||
printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
|
||||
|
||||
if (!mysqli_query($link, "DROP TABLE IF EXISTS insert_read"))
|
||||
printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
mysqli_close($link);
|
||||
?>
|
||||
|
||||
+45
-45
@@ -7,65 +7,65 @@ require_once('skipifconnectfailure.inc');
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
require_once("connect.inc");
|
||||
require_once("connect.inc");
|
||||
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
|
||||
mysqli_select_db($link, $db);
|
||||
mysqli_query($link, "SET sql_mode=''");
|
||||
mysqli_select_db($link, $db);
|
||||
mysqli_query($link, "SET sql_mode=''");
|
||||
|
||||
mysqli_query($link,"DROP TABLE IF EXISTS test_bind_result");
|
||||
mysqli_query($link,"DROP TABLE IF EXISTS test_bind_result");
|
||||
|
||||
$rc = @mysqli_query($link,"CREATE TABLE test_bind_result(
|
||||
c1 date,
|
||||
c2 time,
|
||||
c3 timestamp(14),
|
||||
c4 year,
|
||||
c5 datetime,
|
||||
c6 timestamp(4),
|
||||
c7 timestamp(6))");
|
||||
$rc = @mysqli_query($link,"CREATE TABLE test_bind_result(
|
||||
c1 date,
|
||||
c2 time,
|
||||
c3 timestamp(14),
|
||||
c4 year,
|
||||
c5 datetime,
|
||||
c6 timestamp(4),
|
||||
c7 timestamp(6))");
|
||||
|
||||
if (!$rc)
|
||||
$rc = mysqli_query($link,"CREATE TABLE test_bind_result(
|
||||
c1 date,
|
||||
c2 time,
|
||||
c3 timestamp,
|
||||
c4 year,
|
||||
c5 datetime,
|
||||
c6 timestamp,
|
||||
c7 timestamp)");
|
||||
if (!$rc)
|
||||
$rc = mysqli_query($link,"CREATE TABLE test_bind_result(
|
||||
c1 date,
|
||||
c2 time,
|
||||
c3 timestamp,
|
||||
c4 year,
|
||||
c5 datetime,
|
||||
c6 timestamp,
|
||||
c7 timestamp)");
|
||||
|
||||
$stmt = mysqli_prepare($link, "INSERT INTO test_bind_result VALUES (?,?,?,?,?,?,?)");
|
||||
mysqli_stmt_bind_param($stmt, "sssssss", $d1, $d2, $d3, $d4, $d5, $d6, $d7);
|
||||
$stmt = mysqli_prepare($link, "INSERT INTO test_bind_result VALUES (?,?,?,?,?,?,?)");
|
||||
mysqli_stmt_bind_param($stmt, "sssssss", $d1, $d2, $d3, $d4, $d5, $d6, $d7);
|
||||
|
||||
$d1 = "2002-01-02";
|
||||
$d2 = "12:49:00";
|
||||
$d3 = "2002-01-02 17:46:59";
|
||||
$d4 = "2010";
|
||||
$d5 = "2010-07-10";
|
||||
$d6 = "2020";
|
||||
$d7 = "1999-12-29";
|
||||
$d1 = "2002-01-02";
|
||||
$d2 = "12:49:00";
|
||||
$d3 = "2002-01-02 17:46:59";
|
||||
$d4 = "2010";
|
||||
$d5 = "2010-07-10";
|
||||
$d6 = "2020";
|
||||
$d7 = "1999-12-29";
|
||||
|
||||
mysqli_stmt_execute($stmt);
|
||||
mysqli_stmt_close($stmt);
|
||||
mysqli_stmt_execute($stmt);
|
||||
mysqli_stmt_close($stmt);
|
||||
|
||||
$stmt = mysqli_prepare($link, "SELECT c1, c2, c3, c4, c5, c6, c7 FROM test_bind_result");
|
||||
$stmt = mysqli_prepare($link, "SELECT c1, c2, c3, c4, c5, c6, c7 FROM test_bind_result");
|
||||
|
||||
mysqli_stmt_bind_result($stmt,$c1, $c2, $c3, $c4, $c5, $c6, $c7);
|
||||
mysqli_stmt_bind_result($stmt,$c1, $c2, $c3, $c4, $c5, $c6, $c7);
|
||||
|
||||
mysqli_stmt_execute($stmt);
|
||||
mysqli_stmt_fetch($stmt);
|
||||
mysqli_stmt_execute($stmt);
|
||||
mysqli_stmt_fetch($stmt);
|
||||
|
||||
$test = array($c1,$c2,$c3,$c4,$c5,$c6,$c7);
|
||||
$test = array($c1,$c2,$c3,$c4,$c5,$c6,$c7);
|
||||
|
||||
var_dump($test);
|
||||
var_dump($test);
|
||||
|
||||
mysqli_stmt_close($stmt);
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS test_bind_result");
|
||||
mysqli_close($link);
|
||||
mysqli_stmt_close($stmt);
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS test_bind_result");
|
||||
mysqli_close($link);
|
||||
|
||||
print "done!";
|
||||
print "done!";
|
||||
?>
|
||||
--CLEAN--
|
||||
<?php
|
||||
@@ -74,7 +74,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
|
||||
printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
|
||||
|
||||
if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_result"))
|
||||
printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
mysqli_close($link);
|
||||
?>
|
||||
|
||||
+23
-23
@@ -7,36 +7,36 @@ require_once('skipifconnectfailure.inc');
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
require_once("connect.inc");
|
||||
require_once("connect.inc");
|
||||
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
|
||||
mysqli_select_db($link, $db);
|
||||
mysqli_select_db($link, $db);
|
||||
|
||||
mysqli_query($link,"DROP TABLE IF EXISTS test_bind_fetch");
|
||||
mysqli_query($link,"CREATE TABLE test_bind_fetch(c1 char(10), c2 text)");
|
||||
mysqli_query($link,"DROP TABLE IF EXISTS test_bind_fetch");
|
||||
mysqli_query($link,"CREATE TABLE test_bind_fetch(c1 char(10), c2 text)");
|
||||
|
||||
$stmt = mysqli_prepare($link, "INSERT INTO test_bind_fetch VALUES (?,?)");
|
||||
mysqli_stmt_bind_param($stmt, "ss", $q1, $q2);
|
||||
$q1 = "1234567890";
|
||||
$q2 = "this is a test";
|
||||
mysqli_stmt_execute($stmt);
|
||||
mysqli_stmt_close($stmt);
|
||||
$stmt = mysqli_prepare($link, "INSERT INTO test_bind_fetch VALUES (?,?)");
|
||||
mysqli_stmt_bind_param($stmt, "ss", $q1, $q2);
|
||||
$q1 = "1234567890";
|
||||
$q2 = "this is a test";
|
||||
mysqli_stmt_execute($stmt);
|
||||
mysqli_stmt_close($stmt);
|
||||
|
||||
$stmt = mysqli_prepare($link, "SELECT * FROM test_bind_fetch");
|
||||
mysqli_stmt_bind_result($stmt, $c1, $c2);
|
||||
mysqli_stmt_execute($stmt);
|
||||
mysqli_stmt_fetch($stmt);
|
||||
$stmt = mysqli_prepare($link, "SELECT * FROM test_bind_fetch");
|
||||
mysqli_stmt_bind_result($stmt, $c1, $c2);
|
||||
mysqli_stmt_execute($stmt);
|
||||
mysqli_stmt_fetch($stmt);
|
||||
|
||||
$test = array($c1,$c2);
|
||||
$test = array($c1,$c2);
|
||||
|
||||
var_dump($test);
|
||||
var_dump($test);
|
||||
|
||||
mysqli_stmt_close($stmt);
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch");
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
mysqli_stmt_close($stmt);
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch");
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
?>
|
||||
--CLEAN--
|
||||
<?php
|
||||
@@ -45,7 +45,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
|
||||
printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
|
||||
|
||||
if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch"))
|
||||
printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
mysqli_close($link);
|
||||
?>
|
||||
|
||||
+24
-24
@@ -7,41 +7,41 @@ require_once('skipifconnectfailure.inc');
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
require_once("connect.inc");
|
||||
require_once("connect.inc");
|
||||
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
|
||||
mysqli_select_db($link, $db);
|
||||
mysqli_select_db($link, $db);
|
||||
|
||||
mysqli_query($link,"DROP TABLE IF EXISTS test_bind_fetch");
|
||||
mysqli_query($link,"CREATE TABLE test_bind_fetch(c1 char(10), c2 text)");
|
||||
mysqli_query($link,"DROP TABLE IF EXISTS test_bind_fetch");
|
||||
mysqli_query($link,"CREATE TABLE test_bind_fetch(c1 char(10), c2 text)");
|
||||
|
||||
|
||||
$stmt = mysqli_prepare($link, "INSERT INTO test_bind_fetch VALUES (?,?)");
|
||||
mysqli_stmt_bind_param($stmt, "ss", $a1, $a2);
|
||||
$stmt = mysqli_prepare($link, "INSERT INTO test_bind_fetch VALUES (?,?)");
|
||||
mysqli_stmt_bind_param($stmt, "ss", $a1, $a2);
|
||||
|
||||
$a1 = "1234567890";
|
||||
$a2 = str_repeat("A1", 32000);
|
||||
$a1 = "1234567890";
|
||||
$a2 = str_repeat("A1", 32000);
|
||||
|
||||
mysqli_stmt_execute($stmt);
|
||||
mysqli_stmt_close($stmt);
|
||||
mysqli_stmt_execute($stmt);
|
||||
mysqli_stmt_close($stmt);
|
||||
|
||||
$stmt = mysqli_prepare($link, "SELECT * FROM test_bind_fetch");
|
||||
mysqli_stmt_bind_result($stmt, $c1, $c2);
|
||||
mysqli_stmt_execute($stmt);
|
||||
mysqli_stmt_fetch($stmt);
|
||||
$stmt = mysqli_prepare($link, "SELECT * FROM test_bind_fetch");
|
||||
mysqli_stmt_bind_result($stmt, $c1, $c2);
|
||||
mysqli_stmt_execute($stmt);
|
||||
mysqli_stmt_fetch($stmt);
|
||||
|
||||
$test[] = $c1;
|
||||
$test[] = ($a2 == $c2) ? "32K String ok" : "32K String failed";
|
||||
$test[] = $c1;
|
||||
$test[] = ($a2 == $c2) ? "32K String ok" : "32K String failed";
|
||||
|
||||
var_dump($test);
|
||||
var_dump($test);
|
||||
|
||||
mysqli_stmt_close($stmt);
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch");
|
||||
mysqli_close($link);
|
||||
mysqli_stmt_close($stmt);
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch");
|
||||
mysqli_close($link);
|
||||
|
||||
print "done!";
|
||||
print "done!";
|
||||
?>
|
||||
--CLEAN--
|
||||
<?php
|
||||
@@ -50,7 +50,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
|
||||
printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
|
||||
|
||||
if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch"))
|
||||
printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
mysqli_close($link);
|
||||
?>
|
||||
|
||||
+35
-35
@@ -7,50 +7,50 @@ require_once('skipifconnectfailure.inc');
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
require_once("connect.inc");
|
||||
require_once("connect.inc");
|
||||
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
|
||||
mysqli_select_db($link, $db);
|
||||
mysqli_query($link, "SET sql_mode=''");
|
||||
mysqli_select_db($link, $db);
|
||||
mysqli_query($link, "SET sql_mode=''");
|
||||
|
||||
mysqli_query($link,"DROP TABLE IF EXISTS test_bind_fetch");
|
||||
mysqli_query($link,"CREATE TABLE test_bind_fetch(c1 int unsigned,
|
||||
c2 int unsigned,
|
||||
c3 int,
|
||||
c4 int,
|
||||
c5 int,
|
||||
c6 int unsigned,
|
||||
c7 int)");
|
||||
mysqli_query($link,"DROP TABLE IF EXISTS test_bind_fetch");
|
||||
mysqli_query($link,"CREATE TABLE test_bind_fetch(c1 int unsigned,
|
||||
c2 int unsigned,
|
||||
c3 int,
|
||||
c4 int,
|
||||
c5 int,
|
||||
c6 int unsigned,
|
||||
c7 int)");
|
||||
|
||||
$stmt = mysqli_prepare($link, "INSERT INTO test_bind_fetch VALUES (?,?,?,?,?,?,?)");
|
||||
mysqli_stmt_bind_param($stmt, "iiiiiii", $c1,$c2,$c3,$c4,$c5,$c6,$c7);
|
||||
$c1 = -23;
|
||||
$c2 = 35999;
|
||||
$c3 = NULL;
|
||||
$c4 = -500;
|
||||
$c5 = -9999999;
|
||||
$c6 = -0;
|
||||
$c7 = 0;
|
||||
$stmt = mysqli_prepare($link, "INSERT INTO test_bind_fetch VALUES (?,?,?,?,?,?,?)");
|
||||
mysqli_stmt_bind_param($stmt, "iiiiiii", $c1,$c2,$c3,$c4,$c5,$c6,$c7);
|
||||
$c1 = -23;
|
||||
$c2 = 35999;
|
||||
$c3 = NULL;
|
||||
$c4 = -500;
|
||||
$c5 = -9999999;
|
||||
$c6 = -0;
|
||||
$c7 = 0;
|
||||
|
||||
mysqli_stmt_execute($stmt);
|
||||
mysqli_stmt_close($stmt);
|
||||
mysqli_stmt_execute($stmt);
|
||||
mysqli_stmt_close($stmt);
|
||||
|
||||
$stmt = mysqli_prepare($link, "SELECT * FROM test_bind_fetch");
|
||||
mysqli_stmt_bind_result($stmt, $c1, $c2, $c3, $c4, $c5, $c6, $c7);
|
||||
mysqli_stmt_execute($stmt);
|
||||
mysqli_stmt_fetch($stmt);
|
||||
$stmt = mysqli_prepare($link, "SELECT * FROM test_bind_fetch");
|
||||
mysqli_stmt_bind_result($stmt, $c1, $c2, $c3, $c4, $c5, $c6, $c7);
|
||||
mysqli_stmt_execute($stmt);
|
||||
mysqli_stmt_fetch($stmt);
|
||||
|
||||
$test = array($c1,$c2,$c3,$c4,$c5,$c6,$c7);
|
||||
$test = array($c1,$c2,$c3,$c4,$c5,$c6,$c7);
|
||||
|
||||
var_dump($test);
|
||||
var_dump($test);
|
||||
|
||||
mysqli_stmt_close($stmt);
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch");
|
||||
mysqli_close($link);
|
||||
mysqli_stmt_close($stmt);
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch");
|
||||
mysqli_close($link);
|
||||
|
||||
print "done!";
|
||||
print "done!";
|
||||
?>
|
||||
--CLEAN--
|
||||
<?php
|
||||
@@ -59,7 +59,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
|
||||
printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
|
||||
|
||||
if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch"))
|
||||
printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
mysqli_close($link);
|
||||
?>
|
||||
|
||||
+35
-35
@@ -7,50 +7,50 @@ require_once('skipifconnectfailure.inc');
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
require_once("connect.inc");
|
||||
require_once("connect.inc");
|
||||
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
|
||||
mysqli_select_db($link, $db);
|
||||
mysqli_query($link, "SET sql_mode=''");
|
||||
mysqli_select_db($link, $db);
|
||||
mysqli_query($link, "SET sql_mode=''");
|
||||
|
||||
mysqli_query($link,"DROP TABLE IF EXISTS test_bind_fetch");
|
||||
mysqli_query($link,"CREATE TABLE test_bind_fetch(c1 smallint unsigned,
|
||||
c2 smallint unsigned,
|
||||
c3 smallint,
|
||||
c4 smallint,
|
||||
c5 smallint,
|
||||
c6 smallint unsigned,
|
||||
c7 smallint)");
|
||||
mysqli_query($link,"DROP TABLE IF EXISTS test_bind_fetch");
|
||||
mysqli_query($link,"CREATE TABLE test_bind_fetch(c1 smallint unsigned,
|
||||
c2 smallint unsigned,
|
||||
c3 smallint,
|
||||
c4 smallint,
|
||||
c5 smallint,
|
||||
c6 smallint unsigned,
|
||||
c7 smallint)");
|
||||
|
||||
$stmt = mysqli_prepare($link, "INSERT INTO test_bind_fetch VALUES (?,?,?,?,?,?,?)");
|
||||
mysqli_stmt_bind_param($stmt, "iiiiiii", $c1,$c2,$c3,$c4,$c5,$c6,$c7);
|
||||
$stmt = mysqli_prepare($link, "INSERT INTO test_bind_fetch VALUES (?,?,?,?,?,?,?)");
|
||||
mysqli_stmt_bind_param($stmt, "iiiiiii", $c1,$c2,$c3,$c4,$c5,$c6,$c7);
|
||||
|
||||
$c1 = -23;
|
||||
$c2 = 35999;
|
||||
$c3 = NULL;
|
||||
$c4 = -500;
|
||||
$c5 = -9999999;
|
||||
$c6 = -0;
|
||||
$c7 = 0;
|
||||
$c1 = -23;
|
||||
$c2 = 35999;
|
||||
$c3 = NULL;
|
||||
$c4 = -500;
|
||||
$c5 = -9999999;
|
||||
$c6 = -0;
|
||||
$c7 = 0;
|
||||
|
||||
mysqli_stmt_execute($stmt);
|
||||
mysqli_stmt_close($stmt);
|
||||
mysqli_stmt_execute($stmt);
|
||||
mysqli_stmt_close($stmt);
|
||||
|
||||
$stmt = mysqli_prepare($link, "SELECT * FROM test_bind_fetch");
|
||||
mysqli_stmt_bind_result($stmt, $c1, $c2, $c3, $c4, $c5, $c6, $c7);
|
||||
mysqli_stmt_execute($stmt);
|
||||
mysqli_stmt_fetch($stmt);
|
||||
$stmt = mysqli_prepare($link, "SELECT * FROM test_bind_fetch");
|
||||
mysqli_stmt_bind_result($stmt, $c1, $c2, $c3, $c4, $c5, $c6, $c7);
|
||||
mysqli_stmt_execute($stmt);
|
||||
mysqli_stmt_fetch($stmt);
|
||||
|
||||
$test = array($c1,$c2,$c3,$c4,$c5,$c6,$c7);
|
||||
$test = array($c1,$c2,$c3,$c4,$c5,$c6,$c7);
|
||||
|
||||
var_dump($test);
|
||||
var_dump($test);
|
||||
|
||||
mysqli_stmt_close($stmt);
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch");
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
mysqli_stmt_close($stmt);
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch");
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
?>
|
||||
--CLEAN--
|
||||
<?php
|
||||
@@ -59,7 +59,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
|
||||
printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
|
||||
|
||||
if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch"))
|
||||
printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
mysqli_close($link);
|
||||
?>
|
||||
|
||||
+37
-37
@@ -7,55 +7,55 @@ require_once('skipifconnectfailure.inc');
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
require_once("connect.inc");
|
||||
require_once("connect.inc");
|
||||
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
|
||||
mysqli_select_db($link, $db);
|
||||
mysqli_query($link, "SET sql_mode=''");
|
||||
mysqli_select_db($link, $db);
|
||||
mysqli_query($link, "SET sql_mode=''");
|
||||
|
||||
mysqli_query($link,"DROP TABLE IF EXISTS test_bind_fetch");
|
||||
mysqli_query($link,"CREATE TABLE test_bind_fetch(c1 tinyint,
|
||||
c2 tinyint unsigned,
|
||||
c3 tinyint not NULL,
|
||||
c4 tinyint,
|
||||
c5 tinyint,
|
||||
c6 tinyint unsigned,
|
||||
c7 tinyint)");
|
||||
mysqli_query($link,"DROP TABLE IF EXISTS test_bind_fetch");
|
||||
mysqli_query($link,"CREATE TABLE test_bind_fetch(c1 tinyint,
|
||||
c2 tinyint unsigned,
|
||||
c3 tinyint not NULL,
|
||||
c4 tinyint,
|
||||
c5 tinyint,
|
||||
c6 tinyint unsigned,
|
||||
c7 tinyint)");
|
||||
|
||||
$stmt = mysqli_prepare ($link, "INSERT INTO test_bind_fetch VALUES(?,?,?,?,?,?,?)");
|
||||
mysqli_stmt_bind_param($stmt, "iiiiiii", $c1,$c2,$c3,$c4,$c5,$c6,$c7);
|
||||
$stmt = mysqli_prepare ($link, "INSERT INTO test_bind_fetch VALUES(?,?,?,?,?,?,?)");
|
||||
mysqli_stmt_bind_param($stmt, "iiiiiii", $c1,$c2,$c3,$c4,$c5,$c6,$c7);
|
||||
|
||||
$c1 = -23;
|
||||
$c2 = 300;
|
||||
$c3 = 0;
|
||||
$c4 = -100;
|
||||
$c5 = -127;
|
||||
$c6 = 30;
|
||||
$c7 = 0;
|
||||
$c1 = -23;
|
||||
$c2 = 300;
|
||||
$c3 = 0;
|
||||
$c4 = -100;
|
||||
$c5 = -127;
|
||||
$c6 = 30;
|
||||
$c7 = 0;
|
||||
|
||||
mysqli_stmt_execute($stmt);
|
||||
mysqli_stmt_close($stmt);
|
||||
mysqli_stmt_execute($stmt);
|
||||
mysqli_stmt_close($stmt);
|
||||
|
||||
mysqli_query($link, "INSERT INTO test_bind_fetch VALUES (-23,300,0,-100,-127,+30,0)");
|
||||
mysqli_query($link, "INSERT INTO test_bind_fetch VALUES (-23,300,0,-100,-127,+30,0)");
|
||||
|
||||
$c1 = $c2 = $c3 = $c4 = $c5 = $c6 = $c7 = NULL;
|
||||
$c1 = $c2 = $c3 = $c4 = $c5 = $c6 = $c7 = NULL;
|
||||
|
||||
$stmt = mysqli_prepare($link, "SELECT * FROM test_bind_fetch");
|
||||
mysqli_stmt_bind_result($stmt, $c1, $c2, $c3, $c4, $c5, $c6, $c7);
|
||||
mysqli_stmt_execute($stmt);
|
||||
mysqli_stmt_fetch($stmt);
|
||||
$stmt = mysqli_prepare($link, "SELECT * FROM test_bind_fetch");
|
||||
mysqli_stmt_bind_result($stmt, $c1, $c2, $c3, $c4, $c5, $c6, $c7);
|
||||
mysqli_stmt_execute($stmt);
|
||||
mysqli_stmt_fetch($stmt);
|
||||
|
||||
$test = array($c1,$c2,$c3,$c4,$c5,$c6,$c7);
|
||||
$test = array($c1,$c2,$c3,$c4,$c5,$c6,$c7);
|
||||
|
||||
var_dump($test);
|
||||
var_dump($test);
|
||||
|
||||
mysqli_stmt_close($stmt);
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch");
|
||||
mysqli_close($link);
|
||||
mysqli_stmt_close($stmt);
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch");
|
||||
mysqli_close($link);
|
||||
|
||||
print "done!";
|
||||
print "done!";
|
||||
?>
|
||||
--CLEAN--
|
||||
<?php
|
||||
@@ -64,7 +64,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
|
||||
printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
|
||||
|
||||
if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch"))
|
||||
printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
mysqli_close($link);
|
||||
?>
|
||||
|
||||
+26
-26
@@ -7,42 +7,42 @@ require_once('skipifconnectfailure.inc');
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
require_once("connect.inc");
|
||||
require_once("connect.inc");
|
||||
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
|
||||
mysqli_select_db($link, $db);
|
||||
mysqli_query($link, "SET sql_mode=''");
|
||||
mysqli_select_db($link, $db);
|
||||
mysqli_query($link, "SET sql_mode=''");
|
||||
|
||||
mysqli_query($link,"DROP TABLE IF EXISTS test_bind_fetch");
|
||||
mysqli_query($link,"CREATE TABLE test_bind_fetch(c1 varchar(10), c2 text)");
|
||||
mysqli_query($link,"DROP TABLE IF EXISTS test_bind_fetch");
|
||||
mysqli_query($link,"CREATE TABLE test_bind_fetch(c1 varchar(10), c2 text)");
|
||||
|
||||
$stmt = mysqli_prepare ($link, "INSERT INTO test_bind_fetch VALUES (?,?)");
|
||||
mysqli_stmt_bind_param($stmt, "sb", $c1, $c2);
|
||||
$stmt = mysqli_prepare ($link, "INSERT INTO test_bind_fetch VALUES (?,?)");
|
||||
mysqli_stmt_bind_param($stmt, "sb", $c1, $c2);
|
||||
|
||||
$c1 = "Hello World";
|
||||
$c1 = "Hello World";
|
||||
|
||||
mysqli_stmt_send_long_data($stmt, 1, "This is the first sentence.");
|
||||
mysqli_stmt_send_long_data($stmt, 1, " And this is the second sentence.");
|
||||
mysqli_stmt_send_long_data($stmt, 1, " And finally this is the last sentence.");
|
||||
mysqli_stmt_send_long_data($stmt, 1, "This is the first sentence.");
|
||||
mysqli_stmt_send_long_data($stmt, 1, " And this is the second sentence.");
|
||||
mysqli_stmt_send_long_data($stmt, 1, " And finally this is the last sentence.");
|
||||
|
||||
mysqli_stmt_execute($stmt);
|
||||
mysqli_stmt_close($stmt);
|
||||
mysqli_stmt_execute($stmt);
|
||||
mysqli_stmt_close($stmt);
|
||||
|
||||
$stmt = mysqli_prepare($link, "SELECT * FROM test_bind_fetch");
|
||||
mysqli_stmt_bind_result($stmt, $d1, $d2);
|
||||
mysqli_stmt_execute($stmt);
|
||||
mysqli_stmt_fetch($stmt);
|
||||
$stmt = mysqli_prepare($link, "SELECT * FROM test_bind_fetch");
|
||||
mysqli_stmt_bind_result($stmt, $d1, $d2);
|
||||
mysqli_stmt_execute($stmt);
|
||||
mysqli_stmt_fetch($stmt);
|
||||
|
||||
$test = array($d1,$d2);
|
||||
$test = array($d1,$d2);
|
||||
|
||||
var_dump($test);
|
||||
var_dump($test);
|
||||
|
||||
mysqli_stmt_close($stmt);
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch");
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
mysqli_stmt_close($stmt);
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch");
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
?>
|
||||
--CLEAN--
|
||||
<?php
|
||||
@@ -51,7 +51,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
|
||||
printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
|
||||
|
||||
if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch"))
|
||||
printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
mysqli_close($link);
|
||||
?>
|
||||
|
||||
@@ -7,17 +7,17 @@ require_once('skipifconnectfailure.inc');
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
require_once("connect.inc");
|
||||
require_once("connect.inc");
|
||||
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
|
||||
$status = mysqli_stat($link);
|
||||
$status = mysqli_stat($link);
|
||||
|
||||
var_dump(strlen($status) > 0);
|
||||
var_dump(strlen($status) > 0);
|
||||
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
?>
|
||||
--EXPECT--
|
||||
bool(true)
|
||||
|
||||
@@ -7,17 +7,17 @@ require_once('skipifconnectfailure.inc');
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
require_once("connect.inc");
|
||||
require_once("connect.inc");
|
||||
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
|
||||
$cset = substr(mysqli_character_set_name($link),0,6);
|
||||
$cset = substr(mysqli_character_set_name($link),0,6);
|
||||
|
||||
var_dump($cset);
|
||||
var_dump($cset);
|
||||
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
?>
|
||||
--EXPECTF--
|
||||
string(%d) "%s"
|
||||
|
||||
+13
-13
@@ -7,24 +7,24 @@ require_once('skipifconnectfailure.inc');
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
require_once("connect.inc");
|
||||
require_once("connect.inc");
|
||||
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
|
||||
mysqli_select_db($link, $db);
|
||||
mysqli_select_db($link, $db);
|
||||
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS general_test");
|
||||
mysqli_query($link, "CREATE TABLE general_test (a INT)");
|
||||
mysqli_query($link, "INSERT INTO general_test VALUES (1),(2),(3)");
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS general_test");
|
||||
mysqli_query($link, "CREATE TABLE general_test (a INT)");
|
||||
mysqli_query($link, "INSERT INTO general_test VALUES (1),(2),(3)");
|
||||
|
||||
$afc = mysqli_affected_rows($link);
|
||||
$afc = mysqli_affected_rows($link);
|
||||
|
||||
var_dump($afc);
|
||||
var_dump($afc);
|
||||
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS general_test");
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS general_test");
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
?>
|
||||
--CLEAN--
|
||||
<?php
|
||||
@@ -33,7 +33,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
|
||||
printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
|
||||
|
||||
if (!mysqli_query($link, "DROP TABLE IF EXISTS general_test"))
|
||||
printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
mysqli_close($link);
|
||||
?>
|
||||
|
||||
+11
-11
@@ -7,22 +7,22 @@ require_once('skipifconnectfailure.inc');
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
require_once("connect.inc");
|
||||
require_once("connect.inc");
|
||||
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
$errno = mysqli_errno($link);
|
||||
var_dump($errno);
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
$errno = mysqli_errno($link);
|
||||
var_dump($errno);
|
||||
|
||||
mysqli_select_db($link, $db);
|
||||
mysqli_select_db($link, $db);
|
||||
|
||||
mysqli_query($link, "SELECT * FROM non_exisiting_table");
|
||||
$errno = mysqli_errno($link);
|
||||
mysqli_query($link, "SELECT * FROM non_exisiting_table");
|
||||
$errno = mysqli_errno($link);
|
||||
|
||||
var_dump($errno);
|
||||
var_dump($errno);
|
||||
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
?>
|
||||
--EXPECT--
|
||||
int(0)
|
||||
|
||||
+11
-11
@@ -7,22 +7,22 @@ require_once('skipifconnectfailure.inc');
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
require_once("connect.inc");
|
||||
require_once("connect.inc");
|
||||
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
$error = mysqli_error($link);
|
||||
var_dump($error);
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
$error = mysqli_error($link);
|
||||
var_dump($error);
|
||||
|
||||
mysqli_select_db($link, $db);
|
||||
mysqli_select_db($link, $db);
|
||||
|
||||
mysqli_query($link, "SELECT * FROM non_exisiting_table");
|
||||
$error = mysqli_error($link);
|
||||
mysqli_query($link, "SELECT * FROM non_exisiting_table");
|
||||
$error = mysqli_error($link);
|
||||
|
||||
var_dump($error);
|
||||
var_dump($error);
|
||||
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
?>
|
||||
--EXPECTF--
|
||||
string(0) ""
|
||||
|
||||
+13
-13
@@ -7,24 +7,24 @@ require_once('skipifconnectfailure.inc');
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
require_once("connect.inc");
|
||||
require_once("connect.inc");
|
||||
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
|
||||
mysqli_select_db($link, $db);
|
||||
mysqli_select_db($link, $db);
|
||||
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS general_test");
|
||||
mysqli_query($link, "CREATE TABLE general_test (a INT)");
|
||||
mysqli_query($link, "INSERT INTO general_test VALUES (1),(2),(3)");
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS general_test");
|
||||
mysqli_query($link, "CREATE TABLE general_test (a INT)");
|
||||
mysqli_query($link, "INSERT INTO general_test VALUES (1),(2),(3)");
|
||||
|
||||
$afc = mysqli_info($link);
|
||||
$afc = mysqli_info($link);
|
||||
|
||||
var_dump($afc);
|
||||
var_dump($afc);
|
||||
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS general_test");
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS general_test");
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
?>
|
||||
--CLEAN--
|
||||
<?php
|
||||
@@ -33,7 +33,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
|
||||
printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
|
||||
|
||||
if (!mysqli_query($link, "DROP TABLE IF EXISTS general_test"))
|
||||
printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
mysqli_close($link);
|
||||
?>
|
||||
|
||||
@@ -8,17 +8,17 @@ require_once('skipifconnectfailure.inc');
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
require_once("connect.inc");
|
||||
require_once("connect.inc");
|
||||
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
|
||||
$hinfo = mysqli_get_host_info($link);
|
||||
$hinfo = mysqli_get_host_info($link);
|
||||
|
||||
var_dump(str_replace('/','', $hinfo));
|
||||
var_dump(str_replace('/','', $hinfo));
|
||||
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
?>
|
||||
--EXPECTF--
|
||||
string(%d) "%s via %s"
|
||||
|
||||
@@ -8,17 +8,17 @@ require_once('skipifconnectfailure.inc');
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
require_once("connect.inc");
|
||||
require_once("connect.inc");
|
||||
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
|
||||
$pinfo = mysqli_get_proto_info($link);
|
||||
$pinfo = mysqli_get_proto_info($link);
|
||||
|
||||
var_dump($pinfo);
|
||||
var_dump($pinfo);
|
||||
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
?>
|
||||
--EXPECT--
|
||||
int(10)
|
||||
|
||||
@@ -7,17 +7,17 @@ require_once('skipifconnectfailure.inc');
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
require_once("connect.inc");
|
||||
require_once("connect.inc");
|
||||
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
|
||||
$sinfo = substr(mysqli_get_server_info($link),0,1);
|
||||
$sinfo = substr(mysqli_get_server_info($link),0,1);
|
||||
|
||||
var_dump(strlen($sinfo));
|
||||
var_dump(strlen($sinfo));
|
||||
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
?>
|
||||
--EXPECT--
|
||||
int(1)
|
||||
|
||||
+29
-29
@@ -2,45 +2,45 @@
|
||||
function test: mysqli_insert_id()
|
||||
--SKIPIF--
|
||||
<?php
|
||||
if (PHP_INT_SIZE == 8) {
|
||||
echo 'skip test valid only for 32bit systems';
|
||||
exit;
|
||||
}
|
||||
require_once('skipif.inc');
|
||||
require_once('skipifconnectfailure.inc');
|
||||
if (PHP_INT_SIZE == 8) {
|
||||
echo 'skip test valid only for 32bit systems';
|
||||
exit;
|
||||
}
|
||||
require_once('skipif.inc');
|
||||
require_once('skipifconnectfailure.inc');
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
require_once("connect.inc");
|
||||
require_once("connect.inc");
|
||||
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
|
||||
mysqli_select_db($link, $db);
|
||||
mysqli_select_db($link, $db);
|
||||
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS t036");
|
||||
mysqli_query($link, "CREATE TABLE t036 (a bigint not null auto_increment primary key, b varchar(10)) ENGINE = " . $engine);
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS t036");
|
||||
mysqli_query($link, "CREATE TABLE t036 (a bigint not null auto_increment primary key, b varchar(10)) ENGINE = " . $engine);
|
||||
|
||||
mysqli_query($link, "INSERT INTO t036 (b) VALUES ('foo1')");
|
||||
$test[] = mysqli_insert_id($link);
|
||||
mysqli_query($link, "INSERT INTO t036 (b) VALUES ('foo1')");
|
||||
$test[] = mysqli_insert_id($link);
|
||||
|
||||
/* we have to insert more values, cause lexer sets auto_increment to max_int
|
||||
see mysql bug #54. So we don't check for the value, only for type (which must
|
||||
be type string)
|
||||
*/
|
||||
/* we have to insert more values, cause lexer sets auto_increment to max_int
|
||||
see mysql bug #54. So we don't check for the value, only for type (which must
|
||||
be type string)
|
||||
*/
|
||||
|
||||
mysqli_query($link, "ALTER TABLE t036 AUTO_INCREMENT=9999999999999998");
|
||||
mysqli_query($link, "INSERT INTO t036 (b) VALUES ('foo2')");
|
||||
mysqli_query($link, "INSERT INTO t036 (b) VALUES ('foo3')");
|
||||
mysqli_query($link, "INSERT INTO t036 (b) VALUES ('foo4')");
|
||||
$x = mysqli_insert_id($link);
|
||||
$test[] = is_string($x);
|
||||
mysqli_query($link, "ALTER TABLE t036 AUTO_INCREMENT=9999999999999998");
|
||||
mysqli_query($link, "INSERT INTO t036 (b) VALUES ('foo2')");
|
||||
mysqli_query($link, "INSERT INTO t036 (b) VALUES ('foo3')");
|
||||
mysqli_query($link, "INSERT INTO t036 (b) VALUES ('foo4')");
|
||||
$x = mysqli_insert_id($link);
|
||||
$test[] = is_string($x);
|
||||
|
||||
var_dump($test);
|
||||
var_dump($test);
|
||||
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS t036");
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS t036");
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
?>
|
||||
--CLEAN--
|
||||
<?php
|
||||
@@ -49,7 +49,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
|
||||
printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
|
||||
|
||||
if (!mysqli_query($link, "DROP TABLE IF EXISTS t036"))
|
||||
printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
mysqli_close($link);
|
||||
?>
|
||||
|
||||
+15
-15
@@ -8,29 +8,29 @@ require_once('skipifconnectfailure.inc');
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
require_once("connect.inc");
|
||||
require_once("connect.inc");
|
||||
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
|
||||
mysqli_select_db($link, $db);
|
||||
mysqli_select_db($link, $db);
|
||||
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS test_result");
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS test_result");
|
||||
|
||||
mysqli_query($link, "CREATE TABLE test_result (a int, b varchar(10)) ENGINE = " . $engine);
|
||||
mysqli_query($link, "CREATE TABLE test_result (a int, b varchar(10)) ENGINE = " . $engine);
|
||||
|
||||
mysqli_query($link, "INSERT INTO test_result VALUES (1, 'foo')");
|
||||
$ir[] = mysqli_field_count($link);
|
||||
mysqli_query($link, "INSERT INTO test_result VALUES (1, 'foo')");
|
||||
$ir[] = mysqli_field_count($link);
|
||||
|
||||
mysqli_real_query($link, "SELECT * FROM test_result");
|
||||
$ir[] = mysqli_field_count($link);
|
||||
mysqli_real_query($link, "SELECT * FROM test_result");
|
||||
$ir[] = mysqli_field_count($link);
|
||||
|
||||
|
||||
var_dump($ir);
|
||||
var_dump($ir);
|
||||
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS test_result");
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS test_result");
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
?>
|
||||
--CLEAN--
|
||||
<?php
|
||||
@@ -39,7 +39,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
|
||||
printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
|
||||
|
||||
if (!mysqli_query($link, "DROP TABLE IF EXISTS test_result"))
|
||||
printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
mysqli_close($link);
|
||||
?>
|
||||
|
||||
+17
-17
@@ -7,30 +7,30 @@ require_once('skipifconnectfailure.inc');
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
require_once("connect.inc");
|
||||
require_once("connect.inc");
|
||||
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
|
||||
mysqli_select_db($link, $db);
|
||||
mysqli_select_db($link, $db);
|
||||
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS test_result");
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS test_result");
|
||||
|
||||
mysqli_query($link, "CREATE TABLE test_result (a int, b varchar(10)) ENGINE = " . $engine);
|
||||
mysqli_query($link, "CREATE TABLE test_result (a int, b varchar(10)) ENGINE = " . $engine);
|
||||
|
||||
mysqli_query($link, "INSERT INTO test_result VALUES (1, 'foo')");
|
||||
mysqli_query($link, "INSERT INTO test_result VALUES (1, 'foo')");
|
||||
|
||||
mysqli_real_query($link, "SELECT * FROM test_result");
|
||||
if (mysqli_field_count($link)) {
|
||||
$result = mysqli_store_result($link);
|
||||
$num = mysqli_num_fields($result);
|
||||
mysqli_free_result($result);
|
||||
}
|
||||
mysqli_real_query($link, "SELECT * FROM test_result");
|
||||
if (mysqli_field_count($link)) {
|
||||
$result = mysqli_store_result($link);
|
||||
$num = mysqli_num_fields($result);
|
||||
mysqli_free_result($result);
|
||||
}
|
||||
|
||||
var_dump($num);
|
||||
var_dump($num);
|
||||
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS test_result");
|
||||
mysqli_close($link);
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS test_result");
|
||||
mysqli_close($link);
|
||||
?>
|
||||
--CLEAN--
|
||||
<?php
|
||||
@@ -39,7 +39,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
|
||||
printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
|
||||
|
||||
if (!mysqli_query($link, "DROP TABLE IF EXISTS test_result"))
|
||||
printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
mysqli_close($link);
|
||||
?>
|
||||
|
||||
+12
-12
@@ -7,23 +7,23 @@ require_once('skipifconnectfailure.inc');
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
require_once("connect.inc");
|
||||
require_once("connect.inc");
|
||||
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
|
||||
mysqli_real_query($link, "SHOW VARIABLES");
|
||||
mysqli_real_query($link, "SHOW VARIABLES");
|
||||
|
||||
if (mysqli_field_count($link)) {
|
||||
$result = mysqli_store_result($link);
|
||||
$num = mysqli_num_fields($result);
|
||||
mysqli_free_result($result);
|
||||
}
|
||||
if (mysqli_field_count($link)) {
|
||||
$result = mysqli_store_result($link);
|
||||
$num = mysqli_num_fields($result);
|
||||
mysqli_free_result($result);
|
||||
}
|
||||
|
||||
var_dump($num);
|
||||
var_dump($num);
|
||||
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
?>
|
||||
--EXPECT--
|
||||
int(2)
|
||||
|
||||
+18
-18
@@ -7,29 +7,29 @@ require_once('skipifconnectfailure.inc');
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
require_once("connect.inc");
|
||||
require_once("connect.inc");
|
||||
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
/*** test mysqli_connect 127.0.0.1 ***/
|
||||
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
||||
|
||||
mysqli_select_db($link, $db);
|
||||
mysqli_select_db($link, $db);
|
||||
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS test_result");
|
||||
mysqli_query($link, "CREATE TABLE test_result (a int, b varchar(10)) ENGINE=" . $engine);
|
||||
mysqli_query($link, "INSERT INTO test_result VALUES (1, 'foo')");
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS test_result");
|
||||
mysqli_query($link, "CREATE TABLE test_result (a int, b varchar(10)) ENGINE=" . $engine);
|
||||
mysqli_query($link, "INSERT INTO test_result VALUES (1, 'foo')");
|
||||
|
||||
mysqli_real_query($link, "SELECT * FROM test_result");
|
||||
if (mysqli_field_count($link)) {
|
||||
$result = mysqli_store_result($link);
|
||||
$num = mysqli_num_rows($result);
|
||||
mysqli_free_result($result);
|
||||
}
|
||||
mysqli_real_query($link, "SELECT * FROM test_result");
|
||||
if (mysqli_field_count($link)) {
|
||||
$result = mysqli_store_result($link);
|
||||
$num = mysqli_num_rows($result);
|
||||
mysqli_free_result($result);
|
||||
}
|
||||
|
||||
var_dump($num);
|
||||
var_dump($num);
|
||||
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS test_result");
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
mysqli_query($link, "DROP TABLE IF EXISTS test_result");
|
||||
mysqli_close($link);
|
||||
print "done!";
|
||||
?>
|
||||
--CLEAN--
|
||||
<?php
|
||||
@@ -38,7 +38,7 @@ if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
|
||||
printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
|
||||
|
||||
if (!mysqli_query($link, "DROP TABLE IF EXISTS test_result"))
|
||||
printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||
|
||||
mysqli_close($link);
|
||||
?>
|
||||
|
||||
Loaded 100 of 611 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user