summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkniv <[email protected]>2022-05-11 15:50:08 +0300
committerkniv <[email protected]>2022-05-11 15:50:08 +0300
commit2fa85bfea497fb80ee8c522afaac5c7894cde1ff (patch)
tree229c8757339d48350ebeb34c247f9c58b192a294
parent232076bf9294239867b01b8d55c34b283ec6d03f (diff)
YQL-12841: [String UDF] Limit padding length to 10^6
ref:21742db4572bdadd5698844247b553e9ecd906d0
-rw-r--r--ydb/library/yql/udfs/common/string/string_udf.cpp14
1 files changed, 12 insertions, 2 deletions
diff --git a/ydb/library/yql/udfs/common/string/string_udf.cpp b/ydb/library/yql/udfs/common/string/string_udf.cpp
index ad657feb2f5..170413e2249 100644
--- a/ydb/library/yql/udfs/common/string/string_udf.cpp
+++ b/ydb/library/yql/udfs/common/string/string_udf.cpp
@@ -376,6 +376,8 @@ namespace {
return TUnboxedValuePod(result);
}
+ static constexpr ui64 padLim = 1000000;
+
SIMPLE_UDF_OPTIONS(TRightPad, char*(TAutoMap<char*>, ui64, TOptional<char*>), builder.OptionalArgs(1)) {
TStringStream result;
const TStringBuf input(args[0].AsStringRef());
@@ -386,7 +388,11 @@ namespace {
}
paddingSymbol = TString(args[2].AsStringRef())[0];
}
- result << RightPad(input, args[1].Get<ui64>(), paddingSymbol);
+ const ui64 padLen = args[1].Get<ui64>();
+ if (padLen > padLim) {
+ ythrow yexception() << "Padding length (" << padLen << ") exceeds maximum: " << padLim;
+ }
+ result << RightPad(input, padLen, paddingSymbol);
return valueBuilder->NewString(TStringRef(result.Data(), result.Size()));
}
@@ -400,7 +406,11 @@ namespace {
}
paddingSymbol = TString(args[2].AsStringRef())[0];
}
- result << LeftPad(input, args[1].Get<ui64>(), paddingSymbol);
+ const ui64 padLen = args[1].Get<ui64>();
+ if (padLen > padLim) {
+ ythrow yexception() << "Padding length (" << padLen << ") exceeds maximum: " << padLim;
+ }
+ result << LeftPad(input, padLen, paddingSymbol);
return valueBuilder->NewString(TStringRef(result.Data(), result.Size()));
}