Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 3 additions & 6 deletions ruby/red-arrow/ext/arrow/memory-view.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
#endif

#include <sstream>
#include <cstring>
Comment thread
kou marked this conversation as resolved.
Outdated

namespace red_arrow {
namespace memory_view {
Expand Down Expand Up @@ -220,6 +221,7 @@ namespace red_arrow {
return false;
}
auto view_ = reinterpret_cast<memory_view *>(view);
memset(view_, 0, sizeof(memory_view));
Comment thread
Reranko05 marked this conversation as resolved.
view_->obj = obj;
view_->private_data = new PrivateData();
auto array = GARROW_ARRAY(RVAL2GOBJ(obj));
Expand All @@ -231,9 +233,6 @@ namespace red_arrow {
}
view_->readonly = true;
view_->ndim = 1;
view_->shape = NULL;
view_->strides = NULL;
view_->sub_offsets = NULL;
return true;
}

Expand All @@ -258,6 +257,7 @@ namespace red_arrow {
return false;
}
auto view_ = reinterpret_cast<memory_view *>(view);
memset(view_, 0, sizeof(memory_view));
view_->obj = obj;
auto buffer = GARROW_BUFFER(RVAL2GOBJ(obj));
auto arrow_buffer = garrow_buffer_get_raw(buffer);
Expand All @@ -275,9 +275,6 @@ namespace red_arrow {
view_->byte_size = arrow_buffer->size();
view_->readonly = true;
view_->ndim = 1;
view_->shape = NULL;
view_->strides = NULL;
view_->sub_offsets = NULL;
return true;
}

Expand Down
53 changes: 53 additions & 0 deletions ruby/red-arrow/test/test-memory-view.rb
Original file line number Diff line number Diff line change
Expand Up @@ -431,4 +431,57 @@ def little_endian?
])
end
end

sub_test_case("uninitialized rb_memory_view_t") do
def setup
libruby = Fiddle.dlopen(nil)

@rb_memory_view_get = Fiddle::Function.new(
libruby["rb_memory_view_get"],
[
Fiddle::TYPE_UINTPTR_T,
Fiddle::TYPE_VOIDP,
Fiddle::TYPE_INT,
],
Fiddle::TYPE_BOOL
)

@rb_memory_view_release = Fiddle::Function.new(
libruby["rb_memory_view_release"],
[
Fiddle::TYPE_VOIDP,
],
Fiddle::TYPE_BOOL
)
end

def assert_release(target)
# We should use sizeof(rb_memory_view_t) but it isn't available from Ruby.
# 256 must be larger than sizeof(rb_memory_view_t).
size = 256
Fiddle::Pointer.malloc(size, Fiddle::RUBY_FREE) do |view|
size.times do |i|
view[i] = 0xAA
end

assert do
@rb_memory_view_get.call(Fiddle.dlwrap(target), view, 0)
end

assert do
@rb_memory_view_release.call(view)
end
end
end

test("Int32Array") do
array = Arrow::Int32Array.new([1, 2, 3, 4, 5])
assert_release(array)
end

test("Buffer") do
buffer = Arrow::Buffer.new("hello")
assert_release(buffer)
end
end
end
Loading