Merge pull request #1904 from Tencent/issue1899_pointerappend
Fix Pointer::Append() crash for custom allocator on Windows
This commit is contained in:
commit
b557259f88
@ -163,7 +163,7 @@ public:
|
||||
GenericPointer(const Token* tokens, size_t tokenCount) : allocator_(), ownAllocator_(), nameBuffer_(), tokens_(const_cast<Token*>(tokens)), tokenCount_(tokenCount), parseErrorOffset_(), parseErrorCode_(kPointerParseErrorNone) {}
|
||||
|
||||
//! Copy constructor.
|
||||
GenericPointer(const GenericPointer& rhs) : allocator_(rhs.allocator_), ownAllocator_(), nameBuffer_(), tokens_(), tokenCount_(), parseErrorOffset_(), parseErrorCode_(kPointerParseErrorNone) {
|
||||
GenericPointer(const GenericPointer& rhs) : allocator_(), ownAllocator_(), nameBuffer_(), tokens_(), tokenCount_(), parseErrorOffset_(), parseErrorCode_(kPointerParseErrorNone) {
|
||||
*this = rhs;
|
||||
}
|
||||
|
||||
|
@ -475,7 +475,9 @@ TEST(Pointer, CopyConstructor) {
|
||||
EXPECT_EQ(1u, q.GetTokens()[1].length);
|
||||
EXPECT_STREQ("0", q.GetTokens()[1].name);
|
||||
EXPECT_EQ(0u, q.GetTokens()[1].index);
|
||||
EXPECT_EQ(&p.GetAllocator(), &q.GetAllocator());
|
||||
|
||||
// Copied pointer needs to have its own allocator
|
||||
EXPECT_NE(&p.GetAllocator(), &q.GetAllocator());
|
||||
}
|
||||
|
||||
// Static tokens
|
||||
@ -1668,3 +1670,14 @@ TEST(Pointer, Issue483) {
|
||||
value.SetString(mystr.c_str(), static_cast<SizeType>(mystr.length()), document.GetAllocator());
|
||||
myjson::Pointer(path.c_str()).Set(document, value, document.GetAllocator());
|
||||
}
|
||||
|
||||
TEST(Pointer, Issue1899) {
|
||||
typedef GenericPointer<Value, MemoryPoolAllocator<> > PointerType;
|
||||
PointerType p;
|
||||
PointerType q = p.Append("foo");
|
||||
EXPECT_TRUE(PointerType("/foo") == q);
|
||||
q = q.Append(1234);
|
||||
EXPECT_TRUE(PointerType("/foo/1234") == q);
|
||||
q = q.Append("");
|
||||
EXPECT_TRUE(PointerType("/foo/1234/") == q);
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user