mirror of
https://github.com/open-source-parsers/jsoncpp.git
synced 2024-12-27 11:21:02 +08:00
Merge pull request #784 from Nekto89/cppcheck_fix
Multiple fixes for issues found by Cppcheck
This commit is contained in:
commit
c4103ab390
@ -427,12 +427,12 @@ Json::Value obj_value(Json::objectValue); // {}
|
||||
/// \post type() is unchanged
|
||||
void clear();
|
||||
|
||||
/// Resize the array to size elements.
|
||||
/// Resize the array to newSize elements.
|
||||
/// New elements are initialized to null.
|
||||
/// May only be called on nullValue or arrayValue.
|
||||
/// \pre type() is arrayValue or nullValue
|
||||
/// \post type() is arrayValue
|
||||
void resize(ArrayIndex size);
|
||||
void resize(ArrayIndex newSize);
|
||||
|
||||
/// Access an array element (zero based index ).
|
||||
/// If the array contains less than index element, then null value are
|
||||
@ -562,10 +562,10 @@ Json::Value obj_value(Json::objectValue); // {}
|
||||
/** \brief Remove the indexed array element.
|
||||
|
||||
O(n) expensive operations.
|
||||
Update 'removed' iff removed.
|
||||
\return true iff removed (no exceptions)
|
||||
Update 'removed' if removed.
|
||||
\return true if removed (no exceptions)
|
||||
*/
|
||||
bool removeIndex(ArrayIndex i, Value* removed);
|
||||
bool removeIndex(ArrayIndex index, Value* removed);
|
||||
|
||||
/// Return true if the object has a member named key.
|
||||
/// \note 'key' must be null-terminated.
|
||||
@ -720,7 +720,7 @@ private:
|
||||
const InArgs& in,
|
||||
InArgs::const_iterator& itInArg,
|
||||
PathArgument::Kind kind);
|
||||
void invalidPath(const JSONCPP_STRING& path, int location);
|
||||
static void invalidPath(const JSONCPP_STRING& path, int location);
|
||||
|
||||
Args args_;
|
||||
};
|
||||
|
@ -249,7 +249,7 @@ private:
|
||||
void unindent();
|
||||
void writeCommentBeforeValue(const Value& root);
|
||||
void writeCommentAfterValueOnSameLine(const Value& root);
|
||||
bool hasCommentForValue(const Value& value);
|
||||
static bool hasCommentForValue(const Value& value);
|
||||
static JSONCPP_STRING normalizeEOL(const JSONCPP_STRING& text);
|
||||
|
||||
typedef std::vector<JSONCPP_STRING> ChildValues;
|
||||
@ -300,7 +300,7 @@ public:
|
||||
/**
|
||||
* \param indentation Each level will be indented by this amount extra.
|
||||
*/
|
||||
StyledStreamWriter(JSONCPP_STRING indentation = "\t");
|
||||
StyledStreamWriter(const JSONCPP_STRING& indentation = "\t");
|
||||
~StyledStreamWriter() {}
|
||||
|
||||
public:
|
||||
@ -323,7 +323,7 @@ private:
|
||||
void unindent();
|
||||
void writeCommentBeforeValue(const Value& root);
|
||||
void writeCommentAfterValueOnSameLine(const Value& root);
|
||||
bool hasCommentForValue(const Value& value);
|
||||
static bool hasCommentForValue(const Value& value);
|
||||
static JSONCPP_STRING normalizeEOL(const JSONCPP_STRING& text);
|
||||
|
||||
typedef std::vector<JSONCPP_STRING> ChildValues;
|
||||
|
@ -106,9 +106,9 @@ static void printValueTree(FILE* fout,
|
||||
for (Json::ArrayIndex index = 0; index < size; ++index) {
|
||||
static char buffer[16];
|
||||
#if defined(_MSC_VER) && defined(__STDC_SECURE_LIB__)
|
||||
sprintf_s(buffer, sizeof(buffer), "[%d]", index);
|
||||
sprintf_s(buffer, sizeof(buffer), "[%u]", index);
|
||||
#else
|
||||
snprintf(buffer, sizeof(buffer), "[%d]", index);
|
||||
snprintf(buffer, sizeof(buffer), "[%u]", index);
|
||||
#endif
|
||||
printValueTree(fout, value[index], path + buffer);
|
||||
}
|
||||
|
@ -112,8 +112,8 @@ bool Reader::parse(const std::string& document,
|
||||
return parse(begin, end, root, collectComments);
|
||||
}
|
||||
|
||||
bool Reader::parse(std::istream& sin, Value& root, bool collectComments) {
|
||||
// std::istream_iterator<char> begin(sin);
|
||||
bool Reader::parse(std::istream& is, Value& root, bool collectComments) {
|
||||
// std::istream_iterator<char> begin(is);
|
||||
// std::istream_iterator<char> end;
|
||||
// Those would allow streamed input from a file, if parse() were a
|
||||
// template function.
|
||||
@ -121,7 +121,7 @@ bool Reader::parse(std::istream& sin, Value& root, bool collectComments) {
|
||||
// Since JSONCPP_STRING is reference-counted, this at least does not
|
||||
// create an extra copy.
|
||||
JSONCPP_STRING doc;
|
||||
std::getline(sin, doc, (char)EOF);
|
||||
std::getline(is, doc, (char)EOF);
|
||||
return parse(doc.data(), doc.data() + doc.size(), root, collectComments);
|
||||
}
|
||||
|
||||
@ -460,12 +460,12 @@ bool Reader::readString() {
|
||||
return c == '"';
|
||||
}
|
||||
|
||||
bool Reader::readObject(Token& tokenStart) {
|
||||
bool Reader::readObject(Token& token) {
|
||||
Token tokenName;
|
||||
JSONCPP_STRING name;
|
||||
Value init(objectValue);
|
||||
currentValue().swapPayload(init);
|
||||
currentValue().setOffsetStart(tokenStart.start_ - begin_);
|
||||
currentValue().setOffsetStart(token.start_ - begin_);
|
||||
while (readToken(tokenName)) {
|
||||
bool initialTokenOk = true;
|
||||
while (tokenName.type_ == tokenComment && initialTokenOk)
|
||||
@ -516,10 +516,10 @@ bool Reader::readObject(Token& tokenStart) {
|
||||
tokenObjectEnd);
|
||||
}
|
||||
|
||||
bool Reader::readArray(Token& tokenStart) {
|
||||
bool Reader::readArray(Token& token) {
|
||||
Value init(arrayValue);
|
||||
currentValue().swapPayload(init);
|
||||
currentValue().setOffsetStart(tokenStart.start_ - begin_);
|
||||
currentValue().setOffsetStart(token.start_ - begin_);
|
||||
skipSpaces();
|
||||
if (current_ != end_ && *current_ == ']') // empty array
|
||||
{
|
||||
@ -536,19 +536,19 @@ bool Reader::readArray(Token& tokenStart) {
|
||||
if (!ok) // error already set
|
||||
return recoverFromError(tokenArrayEnd);
|
||||
|
||||
Token token;
|
||||
Token currentToken;
|
||||
// Accept Comment after last item in the array.
|
||||
ok = readToken(token);
|
||||
while (token.type_ == tokenComment && ok) {
|
||||
ok = readToken(token);
|
||||
ok = readToken(currentToken);
|
||||
while (currentToken.type_ == tokenComment && ok) {
|
||||
ok = readToken(currentToken);
|
||||
}
|
||||
bool badTokenType =
|
||||
(token.type_ != tokenArraySeparator && token.type_ != tokenArrayEnd);
|
||||
bool badTokenType = (currentToken.type_ != tokenArraySeparator &&
|
||||
currentToken.type_ != tokenArrayEnd);
|
||||
if (!ok || badTokenType) {
|
||||
return addErrorAndRecover("Missing ',' or ']' in array declaration",
|
||||
token, tokenArrayEnd);
|
||||
currentToken, tokenArrayEnd);
|
||||
}
|
||||
if (token.type_ == tokenArrayEnd)
|
||||
if (currentToken.type_ == tokenArrayEnd)
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
@ -706,8 +706,8 @@ bool Reader::decodeUnicodeCodePoint(Token& token,
|
||||
return addError(
|
||||
"additional six characters expected to parse unicode surrogate pair.",
|
||||
token, current);
|
||||
unsigned int surrogatePair;
|
||||
if (*(current++) == '\\' && *(current++) == 'u') {
|
||||
unsigned int surrogatePair;
|
||||
if (decodeUnicodeEscapeSequence(token, current, end, surrogatePair)) {
|
||||
unicode = 0x10000 + ((unicode & 0x3FF) << 10) + (surrogatePair & 0x3FF);
|
||||
} else
|
||||
@ -1450,12 +1450,12 @@ bool OurReader::readStringSingleQuote() {
|
||||
return c == '\'';
|
||||
}
|
||||
|
||||
bool OurReader::readObject(Token& tokenStart) {
|
||||
bool OurReader::readObject(Token& token) {
|
||||
Token tokenName;
|
||||
JSONCPP_STRING name;
|
||||
Value init(objectValue);
|
||||
currentValue().swapPayload(init);
|
||||
currentValue().setOffsetStart(tokenStart.start_ - begin_);
|
||||
currentValue().setOffsetStart(token.start_ - begin_);
|
||||
while (readToken(tokenName)) {
|
||||
bool initialTokenOk = true;
|
||||
while (tokenName.type_ == tokenComment && initialTokenOk)
|
||||
@ -1512,10 +1512,10 @@ bool OurReader::readObject(Token& tokenStart) {
|
||||
tokenObjectEnd);
|
||||
}
|
||||
|
||||
bool OurReader::readArray(Token& tokenStart) {
|
||||
bool OurReader::readArray(Token& token) {
|
||||
Value init(arrayValue);
|
||||
currentValue().swapPayload(init);
|
||||
currentValue().setOffsetStart(tokenStart.start_ - begin_);
|
||||
currentValue().setOffsetStart(token.start_ - begin_);
|
||||
skipSpaces();
|
||||
if (current_ != end_ && *current_ == ']') // empty array
|
||||
{
|
||||
@ -1532,19 +1532,19 @@ bool OurReader::readArray(Token& tokenStart) {
|
||||
if (!ok) // error already set
|
||||
return recoverFromError(tokenArrayEnd);
|
||||
|
||||
Token token;
|
||||
Token currentToken;
|
||||
// Accept Comment after last item in the array.
|
||||
ok = readToken(token);
|
||||
while (token.type_ == tokenComment && ok) {
|
||||
ok = readToken(token);
|
||||
ok = readToken(currentToken);
|
||||
while (currentToken.type_ == tokenComment && ok) {
|
||||
ok = readToken(currentToken);
|
||||
}
|
||||
bool badTokenType =
|
||||
(token.type_ != tokenArraySeparator && token.type_ != tokenArrayEnd);
|
||||
bool badTokenType = (currentToken.type_ != tokenArraySeparator &&
|
||||
currentToken.type_ != tokenArrayEnd);
|
||||
if (!ok || badTokenType) {
|
||||
return addErrorAndRecover("Missing ',' or ']' in array declaration",
|
||||
token, tokenArrayEnd);
|
||||
currentToken, tokenArrayEnd);
|
||||
}
|
||||
if (token.type_ == tokenArrayEnd)
|
||||
if (currentToken.type_ == tokenArrayEnd)
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
@ -1726,8 +1726,8 @@ bool OurReader::decodeUnicodeCodePoint(Token& token,
|
||||
return addError(
|
||||
"additional six characters expected to parse unicode surrogate pair.",
|
||||
token, current);
|
||||
unsigned int surrogatePair;
|
||||
if (*(current++) == '\\' && *(current++) == 'u') {
|
||||
unsigned int surrogatePair;
|
||||
if (decodeUnicodeEscapeSequence(token, current, end, surrogatePair)) {
|
||||
unicode = 0x10000 + ((unicode & 0x3FF) << 10) + (surrogatePair & 0x3FF);
|
||||
} else
|
||||
|
@ -241,15 +241,15 @@ void Value::CommentInfo::setComment(const char* text, size_t len) {
|
||||
// Notes: policy_ indicates if the string was allocated when
|
||||
// a string is stored.
|
||||
|
||||
Value::CZString::CZString(ArrayIndex aindex) : cstr_(0), index_(aindex) {}
|
||||
Value::CZString::CZString(ArrayIndex index) : cstr_(0), index_(index) {}
|
||||
|
||||
Value::CZString::CZString(char const* str,
|
||||
unsigned ulength,
|
||||
unsigned length,
|
||||
DuplicationPolicy allocate)
|
||||
: cstr_(str) {
|
||||
// allocate != duplicate
|
||||
storage_.policy_ = allocate & 0x3;
|
||||
storage_.length_ = ulength & 0x3FFFFFFF;
|
||||
storage_.length_ = length & 0x3FFFFFFF;
|
||||
}
|
||||
|
||||
Value::CZString::CZString(const CZString& other) {
|
||||
@ -357,10 +357,10 @@ bool Value::CZString::isStaticString() const {
|
||||
* memset( this, 0, sizeof(Value) )
|
||||
* This optimization is used in ValueInternalMap fast allocator.
|
||||
*/
|
||||
Value::Value(ValueType vtype) {
|
||||
Value::Value(ValueType type) {
|
||||
static char const emptyString[] = "";
|
||||
initBasic(vtype);
|
||||
switch (vtype) {
|
||||
initBasic(type);
|
||||
switch (type) {
|
||||
case nullValue:
|
||||
break;
|
||||
case intValue:
|
||||
@ -418,10 +418,10 @@ Value::Value(const char* value) {
|
||||
value, static_cast<unsigned>(strlen(value)));
|
||||
}
|
||||
|
||||
Value::Value(const char* beginValue, const char* endValue) {
|
||||
Value::Value(const char* begin, const char* end) {
|
||||
initBasic(stringValue, true);
|
||||
value_.string_ = duplicateAndPrefixStringValue(
|
||||
beginValue, static_cast<unsigned>(endValue - beginValue));
|
||||
value_.string_ =
|
||||
duplicateAndPrefixStringValue(begin, static_cast<unsigned>(end - begin));
|
||||
}
|
||||
|
||||
Value::Value(const JSONCPP_STRING& value) {
|
||||
@ -645,14 +645,14 @@ unsigned Value::getCStringLength() const {
|
||||
}
|
||||
#endif
|
||||
|
||||
bool Value::getString(char const** str, char const** cend) const {
|
||||
bool Value::getString(char const** begin, char const** end) const {
|
||||
if (type_ != stringValue)
|
||||
return false;
|
||||
if (value_.string_ == 0)
|
||||
return false;
|
||||
unsigned length;
|
||||
decodePrefixedString(this->allocated_, this->value_.string_, &length, str);
|
||||
*cend = *str + length;
|
||||
decodePrefixedString(this->allocated_, this->value_.string_, &length, begin);
|
||||
*end = *begin + length;
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -1003,8 +1003,8 @@ const Value& Value::operator[](int index) const {
|
||||
return (*this)[ArrayIndex(index)];
|
||||
}
|
||||
|
||||
void Value::initBasic(ValueType vtype, bool allocated) {
|
||||
type_ = vtype;
|
||||
void Value::initBasic(ValueType type, bool allocated) {
|
||||
type_ = type;
|
||||
allocated_ = allocated;
|
||||
comments_ = 0;
|
||||
start_ = 0;
|
||||
@ -1101,13 +1101,13 @@ Value& Value::resolveReference(const char* key) {
|
||||
}
|
||||
|
||||
// @param key is not null-terminated.
|
||||
Value& Value::resolveReference(char const* key, char const* cend) {
|
||||
Value& Value::resolveReference(char const* key, char const* end) {
|
||||
JSON_ASSERT_MESSAGE(
|
||||
type_ == nullValue || type_ == objectValue,
|
||||
"in Json::Value::resolveReference(key, end): requires objectValue");
|
||||
if (type_ == nullValue)
|
||||
*this = Value(objectValue);
|
||||
CZString actualKey(key, static_cast<unsigned>(cend - key),
|
||||
CZString actualKey(key, static_cast<unsigned>(end - key),
|
||||
CZString::duplicateOnCopy);
|
||||
ObjectValues::iterator it = value_.map_->lower_bound(actualKey);
|
||||
if (it != value_.map_->end() && (*it).first == actualKey)
|
||||
@ -1126,13 +1126,13 @@ Value Value::get(ArrayIndex index, const Value& defaultValue) const {
|
||||
|
||||
bool Value::isValidIndex(ArrayIndex index) const { return index < size(); }
|
||||
|
||||
Value const* Value::find(char const* key, char const* cend) const {
|
||||
Value const* Value::find(char const* begin, char const* end) const {
|
||||
JSON_ASSERT_MESSAGE(type_ == nullValue || type_ == objectValue,
|
||||
"in Json::Value::find(key, end, found): requires "
|
||||
"objectValue or nullValue");
|
||||
if (type_ == nullValue)
|
||||
return NULL;
|
||||
CZString actualKey(key, static_cast<unsigned>(cend - key),
|
||||
CZString actualKey(begin, static_cast<unsigned>(end - begin),
|
||||
CZString::noDuplication);
|
||||
ObjectValues::const_iterator it = value_.map_->find(actualKey);
|
||||
if (it == value_.map_->end())
|
||||
@ -1184,10 +1184,10 @@ Value& Value::append(Value&& value) {
|
||||
}
|
||||
#endif
|
||||
|
||||
Value Value::get(char const* key,
|
||||
char const* cend,
|
||||
Value Value::get(char const* begin,
|
||||
char const* end,
|
||||
Value const& defaultValue) const {
|
||||
Value const* found = find(key, cend);
|
||||
Value const* found = find(begin, end);
|
||||
return !found ? defaultValue : *found;
|
||||
}
|
||||
Value Value::get(char const* key, Value const& defaultValue) const {
|
||||
@ -1197,11 +1197,11 @@ Value Value::get(JSONCPP_STRING const& key, Value const& defaultValue) const {
|
||||
return get(key.data(), key.data() + key.length(), defaultValue);
|
||||
}
|
||||
|
||||
bool Value::removeMember(const char* key, const char* cend, Value* removed) {
|
||||
bool Value::removeMember(const char* begin, const char* end, Value* removed) {
|
||||
if (type_ != objectValue) {
|
||||
return false;
|
||||
}
|
||||
CZString actualKey(key, static_cast<unsigned>(cend - key),
|
||||
CZString actualKey(begin, static_cast<unsigned>(end - begin),
|
||||
CZString::noDuplication);
|
||||
ObjectValues::iterator it = value_.map_->find(actualKey);
|
||||
if (it == value_.map_->end())
|
||||
@ -1264,8 +1264,8 @@ Value Value::get(const CppTL::ConstString& key,
|
||||
}
|
||||
#endif
|
||||
|
||||
bool Value::isMember(char const* key, char const* cend) const {
|
||||
Value const* value = find(key, cend);
|
||||
bool Value::isMember(char const* begin, char const* end) const {
|
||||
Value const* value = find(begin, end);
|
||||
return NULL != value;
|
||||
}
|
||||
bool Value::isMember(char const* key) const {
|
||||
|
@ -643,7 +643,7 @@ bool StyledWriter::hasCommentForValue(const Value& value) {
|
||||
// Class StyledStreamWriter
|
||||
// //////////////////////////////////////////////////////////////////
|
||||
|
||||
StyledStreamWriter::StyledStreamWriter(JSONCPP_STRING indentation)
|
||||
StyledStreamWriter::StyledStreamWriter(const JSONCPP_STRING& indentation)
|
||||
: document_(NULL), rightMargin_(74), indentation_(indentation),
|
||||
addChildValues_(), indented_(false) {}
|
||||
|
||||
@ -1245,10 +1245,10 @@ void StreamWriterBuilder::setDefaults(Json::Value* settings) {
|
||||
//! [StreamWriterBuilderDefaults]
|
||||
}
|
||||
|
||||
JSONCPP_STRING writeString(StreamWriter::Factory const& builder,
|
||||
JSONCPP_STRING writeString(StreamWriter::Factory const& factory,
|
||||
Value const& root) {
|
||||
JSONCPP_OSTRINGSTREAM sout;
|
||||
StreamWriterPtr const writer(builder.newStreamWriter());
|
||||
StreamWriterPtr const writer(factory.newStreamWriter());
|
||||
writer->write(root, &sout);
|
||||
return sout.str();
|
||||
}
|
||||
|
@ -140,16 +140,6 @@ TestResult& TestResult::popPredicateContext() {
|
||||
|
||||
bool TestResult::failed() const { return !failures_.empty(); }
|
||||
|
||||
unsigned int TestResult::getAssertionNestingLevel() const {
|
||||
unsigned int level = 0;
|
||||
const PredicateContext* lastNode = &rootPredicateNode_;
|
||||
while (lastNode->next_ != 0) {
|
||||
lastNode = lastNode->next_;
|
||||
++level;
|
||||
}
|
||||
return level;
|
||||
}
|
||||
|
||||
void TestResult::printFailure(bool printTestName) const {
|
||||
if (failures_.empty()) {
|
||||
return;
|
||||
@ -165,7 +155,7 @@ void TestResult::printFailure(bool printTestName) const {
|
||||
const Failure& failure = *it;
|
||||
JSONCPP_STRING indent(failure.nestingLevel_ * 2, ' ');
|
||||
if (failure.file_) {
|
||||
printf("%s%s(%d): ", indent.c_str(), failure.file_, failure.line_);
|
||||
printf("%s%s(%u): ", indent.c_str(), failure.file_, failure.line_);
|
||||
}
|
||||
if (!failure.expr_.empty()) {
|
||||
printf("%s\n", failure.expr_.c_str());
|
||||
@ -281,7 +271,7 @@ bool Runner::runAllTest(bool printSummary) const {
|
||||
|
||||
if (failures.empty()) {
|
||||
if (printSummary) {
|
||||
printf("All %d tests passed\n", count);
|
||||
printf("All %u tests passed\n", count);
|
||||
}
|
||||
return true;
|
||||
} else {
|
||||
@ -293,7 +283,7 @@ bool Runner::runAllTest(bool printSummary) const {
|
||||
if (printSummary) {
|
||||
unsigned int failedCount = static_cast<unsigned int>(failures.size());
|
||||
unsigned int passedCount = count - failedCount;
|
||||
printf("%d/%d tests passed (%d failure(s))\n", passedCount, count,
|
||||
printf("%u/%u tests passed (%u failure(s))\n", passedCount, count,
|
||||
failedCount);
|
||||
}
|
||||
return false;
|
||||
|
@ -97,7 +97,6 @@ public:
|
||||
|
||||
private:
|
||||
TestResult& addToLastFailure(const JSONCPP_STRING& message);
|
||||
unsigned int getAssertionNestingLevel() const;
|
||||
/// Adds a failure or a predicate context
|
||||
void addFailureInfo(const char* file,
|
||||
unsigned int line,
|
||||
@ -168,7 +167,7 @@ private: // prevents copy construction and assignment
|
||||
|
||||
private:
|
||||
void listTests() const;
|
||||
bool testIndex(const JSONCPP_STRING& testName, unsigned int& index) const;
|
||||
bool testIndex(const JSONCPP_STRING& testName, unsigned int& indexOut) const;
|
||||
static void preventDialogOnCrash();
|
||||
|
||||
private:
|
||||
|
Loading…
x
Reference in New Issue
Block a user