mirror of
https://gitlab.com/signalytic/client-external/streamline/streamline-emr.git
synced 2026-09-13 11:41:31 +00:00
updated streamline-setup v2
This commit is contained in:
@@ -115,11 +115,21 @@ final class FFICaster
|
||||
private static function castFFIStringValue(CData $data): string|CutStub
|
||||
{
|
||||
$result = [];
|
||||
$ffi = \FFI::cdef(<<<C
|
||||
size_t zend_get_page_size(void);
|
||||
C);
|
||||
|
||||
for ($i = 0; $i < self::MAX_STRING_LENGTH; ++$i) {
|
||||
$pageSize = $ffi->zend_get_page_size();
|
||||
|
||||
// get cdata address
|
||||
$start = $ffi->cast('uintptr_t', $ffi->cast('char*', $data))->cdata;
|
||||
// accessing memory in the same page as $start is safe
|
||||
$max = min(self::MAX_STRING_LENGTH, ($start | ($pageSize - 1)) - $start);
|
||||
|
||||
for ($i = 0; $i < $max; ++$i) {
|
||||
$result[$i] = $data[$i];
|
||||
|
||||
if ("\0" === $result[$i]) {
|
||||
if ("\0" === $data[$i]) {
|
||||
return implode('', $result);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user