Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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 @@ -31,6 +31,7 @@
# undef private
#endif

#include <cstring>
#include <sstream>

namespace red_arrow {
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