gh7867.phpt 1.2 KB

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