summaryrefslogtreecommitdiff
path: root/ruby
diff options
context:
space:
mode:
authorJose <jose@zeroc.com>2020-12-29 16:01:03 +0100
committerJose <jose@zeroc.com>2020-12-29 16:02:36 +0100
commitb64ae5943c8db10a07343b583324f7e79a892165 (patch)
tree5e39e9e9ca357377d8bfe06c504eddb1d5e03f8a /ruby
parentUpdate codeql-analysis.yml (diff)
downloadice-b64ae5943c8db10a07343b583324f7e79a892165.tar.bz2
ice-b64ae5943c8db10a07343b583324f7e79a892165.tar.xz
ice-b64ae5943c8db10a07343b583324f7e79a892165.zip
Fix segfault unmarshalling exception class data member - Close #1224
Diffstat (limited to 'ruby')
-rw-r--r--ruby/src/IceRuby/Types.cpp2
1 files changed, 2 insertions, 0 deletions
diff --git a/ruby/src/IceRuby/Types.cpp b/ruby/src/IceRuby/Types.cpp
index 324f8778793..8642e984c8b 100644
--- a/ruby/src/IceRuby/Types.cpp
+++ b/ruby/src/IceRuby/Types.cpp
@@ -2889,6 +2889,7 @@ IceRuby::ExceptionReader::ExceptionReader(const ExceptionInfoPtr& info) :
IceRuby::ExceptionReader::~ExceptionReader()
throw()
{
+ rb_gc_unregister_address(&_ex);
}
string
@@ -2924,6 +2925,7 @@ IceRuby::ExceptionReader::_read(Ice::InputStream* is)
is->startException();
const_cast<VALUE&>(_ex) = _info->unmarshal(is);
+ rb_gc_register_address(&_ex);
const_cast<Ice::SlicedDataPtr&>(_slicedData) = is->endException(_info->preserve);
}