diff options
| author | kniv <[email protected]> | 2022-05-11 15:50:08 +0300 |
|---|---|---|
| committer | kniv <[email protected]> | 2022-05-11 15:50:08 +0300 |
| commit | 2fa85bfea497fb80ee8c522afaac5c7894cde1ff (patch) | |
| tree | 229c8757339d48350ebeb34c247f9c58b192a294 | |
| parent | 232076bf9294239867b01b8d55c34b283ec6d03f (diff) | |
YQL-12841: [String UDF] Limit padding length to 10^6
ref:21742db4572bdadd5698844247b553e9ecd906d0
| -rw-r--r-- | ydb/library/yql/udfs/common/string/string_udf.cpp | 14 |
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())); } |
