fix ObKVParser problem

This commit is contained in:
ym0
2021-09-27 21:44:02 +08:00
committed by wangzelin.wzl
parent 4a2b2145a7
commit d47e35a2f8
2 changed files with 13 additions and 6 deletions

View File

@ -115,13 +115,18 @@ int ObKVParser::parse(const char* data, int64_t data_length)
{ {
int ret = OB_SUCCESS; int ret = OB_SUCCESS;
bool finish = false; bool finish = false;
if (OB_ISNULL(data)) { const int64_t length = data_length + 1;
if (OB_ISNULL(data) || data_length <= 0) {
ret = OB_INVALID_ARGUMENT; ret = OB_INVALID_ARGUMENT;
LOG_WARN("null data ptr", K(ret)); LOG_WARN("null data ptr", K(ret));
} else if (OB_ISNULL(data_ = static_cast<char *>(allocator_.alloc(length)))) {
ret = OB_ALLOCATE_MEMORY_FAILED;
LOG_WARN("fail to alloc memory", K(ret), K(length));
} else { } else {
cur_ = data; MEMSET(data_, '\0', length);
data_length_ = data_length; STRNCPY(data_, data, data_length);
data_ = data; cur_ = data_;
data_length_ = length;
if (OB_FAIL(get_token())) { if (OB_FAIL(get_token())) {
LOG_WARN("failed to get_token", K(ret)); LOG_WARN("failed to get_token", K(ret));
} }

View File

@ -14,6 +14,7 @@
#define __OCEANBASE_SHARE_KV_PARSER_H__ #define __OCEANBASE_SHARE_KV_PARSER_H__
#include "share/ob_define.h" #include "share/ob_define.h"
#include "lib/allocator/page_arena.h"
namespace oceanbase { namespace oceanbase {
namespace share { namespace share {
@ -85,10 +86,11 @@ private:
char key_buf_[MAX_TOKEN_SIZE]; char key_buf_[MAX_TOKEN_SIZE];
char value_buf_[MAX_TOKEN_SIZE]; char value_buf_[MAX_TOKEN_SIZE];
const char* cur_; const char* cur_;
const char* data_; // Raw data char* data_;
int64_t data_length_; // Original data length int64_t data_length_;
// Call back every time a KV pair is parsed // Call back every time a KV pair is parsed
ObKVMatchCb* cb_; ObKVMatchCb* cb_;
common::ObArenaAllocator allocator_;
DISALLOW_COPY_AND_ASSIGN(ObKVParser); DISALLOW_COPY_AND_ASSIGN(ObKVParser);
}; };