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