diff options
| author | ionagamed <[email protected]> | 2023-12-06 11:15:42 +0300 |
|---|---|---|
| committer | ionagamed <[email protected]> | 2023-12-06 11:59:15 +0300 |
| commit | bbdd76a9666c19dd2eb27a842909358e8b541a67 (patch) | |
| tree | 4dd28e53f070d9f33c58df8631357e0b7125ce54 /library/cpp/yson/json | |
| parent | 19dfab524551ce06a74e89eda1a7dd2c95663e9c (diff) | |
library/yson: Add NodeFromJsonStringIterative
AI для
Diffstat (limited to 'library/cpp/yson/json')
| -rw-r--r-- | library/cpp/yson/json/yson2json_adapter.cpp | 12 | ||||
| -rw-r--r-- | library/cpp/yson/json/yson2json_adapter.h | 6 |
2 files changed, 16 insertions, 2 deletions
diff --git a/library/cpp/yson/json/yson2json_adapter.cpp b/library/cpp/yson/json/yson2json_adapter.cpp index b5e7c49d4d8..1dbe770e5b2 100644 --- a/library/cpp/yson/json/yson2json_adapter.cpp +++ b/library/cpp/yson/json/yson2json_adapter.cpp @@ -1,9 +1,13 @@ #include "yson2json_adapter.h" namespace NYT { - TYson2JsonCallbacksAdapter::TYson2JsonCallbacksAdapter(::NYson::TYsonConsumerBase* impl, bool throwException) + TYson2JsonCallbacksAdapter::TYson2JsonCallbacksAdapter( + ::NYson::TYsonConsumerBase* impl, + bool throwException, + ui64 maxDepth) : NJson::TJsonCallbacks(throwException) , Impl_(impl) + , MaxDepth_(maxDepth) { } @@ -46,6 +50,9 @@ namespace NYT { bool TYson2JsonCallbacksAdapter::OnOpenArray() { WrapIfListItem(); State_.ContextStack.push(true); + if (State_.ContextStack.size() > MaxDepth_) { + return false; + } Impl_->OnBeginList(); return true; } @@ -59,6 +66,9 @@ namespace NYT { bool TYson2JsonCallbacksAdapter::OnOpenMap() { WrapIfListItem(); State_.ContextStack.push(false); + if (State_.ContextStack.size() > MaxDepth_) { + return false; + } Impl_->OnBeginMap(); return true; } diff --git a/library/cpp/yson/json/yson2json_adapter.h b/library/cpp/yson/json/yson2json_adapter.h index da1bf5ba709..b8270a6e625 100644 --- a/library/cpp/yson/json/yson2json_adapter.h +++ b/library/cpp/yson/json/yson2json_adapter.h @@ -21,7 +21,10 @@ namespace NYT { }; public: - TYson2JsonCallbacksAdapter(::NYson::TYsonConsumerBase* impl, bool throwException = false); + TYson2JsonCallbacksAdapter( + ::NYson::TYsonConsumerBase* impl, + bool throwException = false, + ui64 maxDepth = std::numeric_limits<ui64>::max()); bool OnNull() override; bool OnBoolean(bool val) override; @@ -49,5 +52,6 @@ namespace NYT { private: ::NYson::TYsonConsumerBase* Impl_; TState State_; + ui64 MaxDepth_; }; } |
