From 4c92387a073ec6486410e6c4f758418eddae627c Mon Sep 17 00:00:00 2001 From: Benoit Daloze Date: Thu, 11 Apr 2019 17:45:25 +0200 Subject: [PATCH] Fix FFI::Pointer#read_string(0) to return a binary String * Like other pointer string methods and usages. * Fixes #691. * String#b is available since Ruby 2.0. --- lib/ffi/pointer.rb | 2 +- spec/ffi/rbx/memory_pointer_spec.rb | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/ffi/pointer.rb b/lib/ffi/pointer.rb index aece92a14..064cf820d 100644 --- a/lib/ffi/pointer.rb +++ b/lib/ffi/pointer.rb @@ -49,7 +49,7 @@ def self.size # equivalent string if +len+ is not +nil+. def read_string(len=nil) if len - return '' if len == 0 + return ''.b if len == 0 get_bytes(0, len) else get_string(0) diff --git a/spec/ffi/rbx/memory_pointer_spec.rb b/spec/ffi/rbx/memory_pointer_spec.rb index 43e04b75a..9e41b8516 100644 --- a/spec/ffi/rbx/memory_pointer_spec.rb +++ b/spec/ffi/rbx/memory_pointer_spec.rb @@ -37,6 +37,7 @@ module CTest it "reads back an empty string" do expect(FFI::Pointer::NULL.read_string(0)).to eq('') + expect(FFI::Pointer::NULL.read_string(0).encoding).to eq(Encoding::BINARY) end it "makes a pointer for a certain number of bytes" do