]> granicus.if.org Git - php/commitdiff
Fix ffi test on Windows
authorTyson Andre <tysonandre775@hotmail.com>
Mon, 18 Feb 2019 16:47:09 +0000 (11:47 -0500)
committerNikita Popov <nikita.ppv@gmail.com>
Tue, 19 Feb 2019 09:03:14 +0000 (10:03 +0100)
Fixes a bug in test added in
5661feb1ef929111ef7765672fcb49813eee86fc, by checking that the
relevant SO exists.

Also adds an additional test that is based on zend_printf, and
should work on both Linux and Windows.

ext/ffi/tests/bug77632.phpt
ext/ffi/tests/bug77632b.phpt [new file with mode: 0644]

index ebaf3dccf9856596a03d694943da49e38fa77f86..314424548a0fab4cb8e669993449fc5576353c48 100644 (file)
@@ -1,7 +1,14 @@
 --TEST--
 Bug #77632 (FFI Segfaults When Called With Variadics)
 --SKIPIF--
-<?php require_once('skipif.inc'); ?>
+<?php
+require_once('skipif.inc');
+try {
+       $libc = FFI::cdef("int printf(const char *format, ...);", "libc.so.6");
+} catch (Throwable $_) {
+       die('skip libc.so.6 not available');
+}
+?>
 --INI--
 ffi.enable=1
 --FILE--
diff --git a/ext/ffi/tests/bug77632b.phpt b/ext/ffi/tests/bug77632b.phpt
new file mode 100644 (file)
index 0000000..a988306
--- /dev/null
@@ -0,0 +1,24 @@
+--TEST--
+Bug #77632 (FFI function pointers with variadics)
+--SKIPIF--
+<?php
+require_once('skipif.inc');
+try {
+       FFI::cdef("extern void *zend_printf;");
+} catch (Throwable $_) {
+       die('skip PHP symbols not available');
+}
+?>
+--INI--
+ffi.enable=1
+--FILE--
+<?php
+$libc = FFI::cdef("extern size_t (*zend_printf)(const char *format, ...);");
+$args = ["test from zend_printf\n"];
+($libc->zend_printf)(...$args);
+$args2 = ["Hello, %s from zend_printf\n", "world"];
+($libc->zend_printf)(...$args2);
+?>
+--EXPECT--
+test from zend_printf
+Hello, world from zend_printf