fix ObKVParser problem
This commit is contained in:
@ -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));
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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);
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user