From d01e355c6aa9fa6e60688634c3c93947ca94fddd Mon Sep 17 00:00:00 2001 From: lf0 Date: Mon, 25 Oct 2021 16:24:42 +0800 Subject: [PATCH] Fix stack overflow of recursive get_name --- src/sql/resolver/expr/ob_raw_expr.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/sql/resolver/expr/ob_raw_expr.cpp b/src/sql/resolver/expr/ob_raw_expr.cpp index 46d370db4a..da58bd5229 100644 --- a/src/sql/resolver/expr/ob_raw_expr.cpp +++ b/src/sql/resolver/expr/ob_raw_expr.cpp @@ -265,7 +265,12 @@ void ObRawExpr::reset() int ObRawExpr::get_name(char* buf, const int64_t buf_len, int64_t& pos, ExplainType type) const { int ret = OB_SUCCESS; - if (OB_NOT_NULL(orig_expr_) && EXPLAIN_DBLINK_STMT == type) { + bool is_stack_overflow = false; + if (OB_FAIL(check_stack_overflow(is_stack_overflow))) { + LOG_WARN("fail to check stack overflow", K(ret), K(is_stack_overflow)); + } else if (is_stack_overflow) { + LOG_DEBUG("too deep recursive", K(ret), K(is_stack_overflow)); + } else if (OB_NOT_NULL(orig_expr_) && EXPLAIN_DBLINK_STMT == type) { if (OB_FAIL(orig_expr_->get_name(buf, buf_len, pos, type))) { LOG_WARN("fail to get name for orig expr", K(ret)); }