Merge pull request #26 from pah/fixes/errorreturn-castqual
Fix segfault and build error on Linux
This commit is contained in:
commit
b2b12a6367
@ -202,7 +202,7 @@ public:
|
|||||||
*/
|
*/
|
||||||
template <typename SourceAllocator>
|
template <typename SourceAllocator>
|
||||||
GenericValue& CopyFrom(const GenericValue<Encoding,SourceAllocator>& rhs, Allocator& allocator) {
|
GenericValue& CopyFrom(const GenericValue<Encoding,SourceAllocator>& rhs, Allocator& allocator) {
|
||||||
RAPIDJSON_ASSERT((void*)this != (void*)&rhs);
|
RAPIDJSON_ASSERT((void*)this != (void const*)&rhs);
|
||||||
this->~GenericValue();
|
this->~GenericValue();
|
||||||
new (this) GenericValue(rhs,allocator);
|
new (this) GenericValue(rhs,allocator);
|
||||||
return *this;
|
return *this;
|
||||||
|
@ -243,12 +243,16 @@ public:
|
|||||||
case '[': ParseArray<parseFlags>(is, handler); break;
|
case '[': ParseArray<parseFlags>(is, handler); break;
|
||||||
default: RAPIDJSON_PARSE_ERROR_NORETURN("Expect either an object or array at root", is.Tell());
|
default: RAPIDJSON_PARSE_ERROR_NORETURN("Expect either an object or array at root", is.Tell());
|
||||||
}
|
}
|
||||||
|
if (HasParseError())
|
||||||
|
goto out;
|
||||||
|
|
||||||
SkipWhitespace(is);
|
SkipWhitespace(is);
|
||||||
|
|
||||||
if (is.Peek() != '\0')
|
if (is.Peek() != '\0')
|
||||||
RAPIDJSON_PARSE_ERROR_NORETURN("Nothing should follow the root object or array.", is.Tell());
|
RAPIDJSON_PARSE_ERROR_NORETURN("Nothing should follow the root object or array.", is.Tell());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
out:
|
||||||
stack_.Clear();
|
stack_.Clear();
|
||||||
return !HasParseError();
|
return !HasParseError();
|
||||||
}
|
}
|
||||||
@ -414,6 +418,8 @@ private:
|
|||||||
if (parseFlags & kParseInsituFlag) {
|
if (parseFlags & kParseInsituFlag) {
|
||||||
Ch *head = s.PutBegin();
|
Ch *head = s.PutBegin();
|
||||||
ParseStringToStream<parseFlags, SourceEncoding, SourceEncoding>(s, s);
|
ParseStringToStream<parseFlags, SourceEncoding, SourceEncoding>(s, s);
|
||||||
|
if (HasParseError())
|
||||||
|
return;
|
||||||
size_t length = s.PutEnd(head) - 1;
|
size_t length = s.PutEnd(head) - 1;
|
||||||
RAPIDJSON_ASSERT(length <= 0xFFFFFFFF);
|
RAPIDJSON_ASSERT(length <= 0xFFFFFFFF);
|
||||||
handler.String((typename TargetEncoding::Ch*)head, SizeType(length), false);
|
handler.String((typename TargetEncoding::Ch*)head, SizeType(length), false);
|
||||||
@ -421,6 +427,8 @@ private:
|
|||||||
else {
|
else {
|
||||||
StackStream stackStream(stack_);
|
StackStream stackStream(stack_);
|
||||||
ParseStringToStream<parseFlags, SourceEncoding, TargetEncoding>(s, stackStream);
|
ParseStringToStream<parseFlags, SourceEncoding, TargetEncoding>(s, stackStream);
|
||||||
|
if (HasParseError())
|
||||||
|
return;
|
||||||
handler.String(stack_.template Pop<typename TargetEncoding::Ch>(stackStream.length_), stackStream.length_ - 1, true);
|
handler.String(stack_.template Pop<typename TargetEncoding::Ch>(stackStream.length_), stackStream.length_ - 1, true);
|
||||||
}
|
}
|
||||||
is = s; // Restore is
|
is = s; // Restore is
|
||||||
|
Loading…
x
Reference in New Issue
Block a user