summaryrefslogtreecommitdiffstats
path: root/library/cpp/yson/json
diff options
context:
space:
mode:
authorionagamed <[email protected]>2023-12-06 11:15:42 +0300
committerionagamed <[email protected]>2023-12-06 11:59:15 +0300
commitbbdd76a9666c19dd2eb27a842909358e8b541a67 (patch)
tree4dd28e53f070d9f33c58df8631357e0b7125ce54 /library/cpp/yson/json
parent19dfab524551ce06a74e89eda1a7dd2c95663e9c (diff)
library/yson: Add NodeFromJsonStringIterative
AI для
Diffstat (limited to 'library/cpp/yson/json')
-rw-r--r--library/cpp/yson/json/yson2json_adapter.cpp12
-rw-r--r--library/cpp/yson/json/yson2json_adapter.h6
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_;
};
}