fix obj_print_json<ObJsonType> random crash(master)

This commit is contained in:
obdev
2022-11-15 08:05:38 +00:00
committed by wangzelin.wzl
parent 0c50f30b7a
commit 2542756c05
2 changed files with 13 additions and 8 deletions

View File

@ -1550,8 +1550,10 @@ inline int obj_print_sql<ObJsonType>(const ObObj &obj, char *buffer, int64_t len
} else if (OB_FAIL(j_base->print(jbuf, false))) { // json binary to string } else if (OB_FAIL(j_base->print(jbuf, false))) { // json binary to string
COMMON_LOG(WARN, "fail to convert json to string", K(ret), K(obj)); COMMON_LOG(WARN, "fail to convert json to string", K(ret), K(obj));
} else if (OB_FAIL(databuff_printf(buffer, length, pos, "'"))) { } else if (OB_FAIL(databuff_printf(buffer, length, pos, "'"))) {
COMMON_LOG(WARN, "fail to print \"\'\"", K(ret), K(length), K(pos)); COMMON_LOG(WARN, "fail to print \"'\"", K(ret), K(length), K(pos));
} else if (OB_FAIL(databuff_printf(buffer, length, pos, "%s", jbuf.ptr()))) { } else if (OB_FAIL(databuff_printf(buffer, length, pos, "%.*s",
static_cast<int>(MIN(jbuf.length(), length - pos)),
jbuf.ptr()))) {
COMMON_LOG(WARN, "fail to print json doc", K(ret), K(length), K(pos), K(jbuf.length())); COMMON_LOG(WARN, "fail to print json doc", K(ret), K(length), K(pos), K(jbuf.length()));
} else if (OB_FAIL(databuff_printf(buffer, length, pos, "'"))) { } else if (OB_FAIL(databuff_printf(buffer, length, pos, "'"))) {
COMMON_LOG(WARN, "fail to print \"'\"", K(ret), K(length), K(pos)); COMMON_LOG(WARN, "fail to print \"'\"", K(ret), K(length), K(pos));
@ -1583,8 +1585,9 @@ inline int obj_print_plain_str<ObJsonType>(const ObObj &obj, char *buffer, int64
} else if (params.use_memcpy_) { } else if (params.use_memcpy_) {
ret = databuff_memcpy(buffer, length, pos, jbuf.length(), jbuf.ptr()); ret = databuff_memcpy(buffer, length, pos, jbuf.length(), jbuf.ptr());
} else { } else {
int32_t length = jbuf.length(); ret = databuff_printf(buffer, length, pos, "%.*s",
ret = databuff_printf(buffer, length, pos, "%.*s", length, jbuf.ptr()); static_cast<int>(MIN(jbuf.length(), length - pos)),
jbuf.ptr());
} }
return ret; return ret;
} }
@ -1603,7 +1606,9 @@ inline int obj_print_json<ObJsonType>(const ObObj &obj, char *buf, int64_t buf_l
COMMON_LOG(WARN, "fail to get json base", K(ret), K(in_type)); COMMON_LOG(WARN, "fail to get json base", K(ret), K(in_type));
} else if (OB_FAIL(j_base->print(jbuf, false))) { // json binary to string } else if (OB_FAIL(j_base->print(jbuf, false))) { // json binary to string
COMMON_LOG(WARN, "fail to convert json to string", K(ret), K(obj)); COMMON_LOG(WARN, "fail to convert json to string", K(ret), K(obj));
} else if (OB_FAIL(databuff_printf(buf, buf_len, pos, "%s", jbuf.ptr()))) { } else if (OB_FAIL(databuff_printf(buf, buf_len, pos, "%.*s",
static_cast<int>(MIN(jbuf.length(), buf_len - pos)),
jbuf.ptr()))) {
COMMON_LOG(WARN, "fail to print json doc", K(ret), K(buf_len), K(pos), K(jbuf.length())); COMMON_LOG(WARN, "fail to print json doc", K(ret), K(buf_len), K(pos), K(jbuf.length()));
} }
return ret; return ret;

View File

@ -265,9 +265,9 @@ int ObExprToOutfileRow::print_field(char *buf, const int64_t buf_len, int64_t &p
} }
return ret; return ret;
}; };
ObString tmp_str(out_info.tmp_buf_len_, tmp_pos, out_info.tmp_buf_); ObString tmp_str(out_info.tmp_buf_len_, tmp_pos, out_info.tmp_buf_);
OZ(ObCharsetUtils::foreach_char(tmp_str, out_info.print_params_.cs_type_, escape_func)); OZ(ObCharsetUtils::foreach_char(tmp_str, out_info.print_params_.cs_type_, escape_func));
} }
if (need_enclose) { if (need_enclose) {
OZ(out_info.enclose_.print_plain_str_literal(buf, buf_len, pos, out_info.print_params_)); OZ(out_info.enclose_.print_plain_str_literal(buf, buf_len, pos, out_info.print_params_));
} }