xref: /PHP-8.0/ext/ffi/tests/gh7867.phpt (revision 703cac33)
1--TEST--
2GH-7867 (FFI::cast() from pointer to array is broken)
3--SKIPIF--
4<?php
5if (!extension_loaded("ffi")) die("skip ffi extension not available");
6?>
7--FILE--
8<?php
9$value = FFI::new('char[26]');
10FFI::memcpy($value, implode('', range('a', 'z')), 26);
11
12$slice = FFI::new('char[4]');
13
14echo 'cast from start' . PHP_EOL;
15FFI::memcpy($slice, $value, 4);
16var_dump($value + 0, $slice, FFI::cast('char[4]', $value));
17echo PHP_EOL;
18
19echo 'cast with offset' . PHP_EOL;
20FFI::memcpy($slice, $value + 4, 4);
21var_dump($value + 4, $slice, FFI::cast('char[4]', $value + 4));
22echo PHP_EOL;
23?>
24--EXPECTF--
25cast from start
26object(FFI\CData:char*)#%d (1) {
27  [0]=>
28  string(1) "a"
29}
30object(FFI\CData:char[4])#%d (4) {
31  [0]=>
32  string(1) "a"
33  [1]=>
34  string(1) "b"
35  [2]=>
36  string(1) "c"
37  [3]=>
38  string(1) "d"
39}
40object(FFI\CData:char[4])#%d (4) {
41  [0]=>
42  string(1) "a"
43  [1]=>
44  string(1) "b"
45  [2]=>
46  string(1) "c"
47  [3]=>
48  string(1) "d"
49}
50
51cast with offset
52object(FFI\CData:char*)#%d (1) {
53  [0]=>
54  string(1) "e"
55}
56object(FFI\CData:char[4])#%d (4) {
57  [0]=>
58  string(1) "e"
59  [1]=>
60  string(1) "f"
61  [2]=>
62  string(1) "g"
63  [3]=>
64  string(1) "h"
65}
66object(FFI\CData:char[4])#%d (4) {
67  [0]=>
68  string(1) "e"
69  [1]=>
70  string(1) "f"
71  [2]=>
72  string(1) "g"
73  [3]=>
74  string(1) "h"
75}
76