Skip to content

Commit 5aa16fd

Browse files
authored
Restore null byte in to_ptr for FFI backend (#187)
Addresses #180 (comment)
1 parent 7a4c6da commit 5aa16fd

File tree

2 files changed

+3
-3
lines changed

2 files changed

+3
-3
lines changed

lib/fiddle/ffi_backend.rb

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -241,9 +241,7 @@ def self.from_native(value, ctx)
241241

242242
def self.to_ptr(value)
243243
if value.is_a?(String)
244-
cptr = Pointer.malloc(value.bytesize)
245-
cptr.ffi_ptr.put_bytes(0, value)
246-
cptr
244+
Pointer.new(FFI::MemoryPointer.from_string(value), value.bytesize)
247245

248246
elsif value.is_a?(Array)
249247
raise NotImplementedError, "array ptr"

test/fiddle/test_pointer.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,8 @@ def test_to_ptr_string
134134
ptr = Pointer[str]
135135
assert_equal str.length, ptr.size
136136
assert_equal 'hello', ptr[0,5]
137+
assert_equal 0, Fiddle::Pointer.to_ptr("abc")[3]
138+
assert_equal "world", Fiddle::Pointer.to_ptr("hello\0world")[6,5]
137139
end
138140

139141
def test_to_ptr_io

0 commit comments

Comments
 (0)