Skip to content

Commit

Permalink
Terminate Roaring UDF in case of an unsuccessfull deserialization (yd…
Browse files Browse the repository at this point in the history
  • Loading branch information
jsjant committed Jun 17, 2024
1 parent 45c88cf commit 6085e96
Showing 1 changed file with 10 additions and 3 deletions.
13 changes: 10 additions & 3 deletions ydb/library/yql/udfs/common/roaring/roaring.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,9 @@ namespace {

class TRoaringDeserialize: public TBoxedValue {
public:
TRoaringDeserialize() {
TRoaringDeserialize(TSourcePosition pos)
: Pos_(pos)
{
}

static TStringRef Name() {
Expand All @@ -212,8 +214,13 @@ namespace {
TUnboxedValue Run(const IValueBuilder* valueBuilder,
const TUnboxedValuePod* args) const override {
Y_UNUSED(valueBuilder);
return TUnboxedValuePod(new TRoaringWrapper(args[0].AsStringRef()));
try {
return TUnboxedValuePod(new TRoaringWrapper(args[0].AsStringRef()));
} catch (const std::exception& e) {
UdfTerminate((TStringBuilder() << Pos_ << " " << e.what()).data());
}
}
TSourcePosition Pos_;
};

class TRoaringSerialize: public TBoxedValue {
Expand Down Expand Up @@ -303,7 +310,7 @@ namespace {
builder.Returns<TResource<RoaringResourceName>>().Args()->Add<TAutoMap<char*>>();

if (!typesOnly) {
builder.Implementation(new TRoaringDeserialize());
builder.Implementation(new TRoaringDeserialize(builder.GetSourcePosition()));
}
} else if (TRoaringSerialize::Name() == name) {
builder.Returns(builder.SimpleType<char*>())
Expand Down

0 comments on commit 6085e96

Please sign in to comment.