Skip to content

Commit

Permalink
Avoid passing Null to memcmp
Browse files Browse the repository at this point in the history
As per discussion in - open-source-parsers#404
Null should not be pass to memcmp, it may show undesired behaviour, so avoid doing that using assertion.
Also, changed one direct "assert" to JSON_ASSERT - it will be decided if exceptions are used or not.
  • Loading branch information
ya1gaurav committed Mar 1, 2016
1 parent d179e24 commit 4878913
Showing 1 changed file with 5 additions and 1 deletion.
6 changes: 5 additions & 1 deletion src/lib_json/json_value.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -267,6 +267,7 @@ bool Value::CZString::operator<(const CZString& other) const {
unsigned this_len = this->storage_.length_;
unsigned other_len = other.storage_.length_;
unsigned min_len = std::min(this_len, other_len);
JSON_ASSERT(this->cstr_ && other.cstr_);
int comp = memcmp(this->cstr_, other.cstr_, min_len);
if (comp < 0) return true;
if (comp > 0) return false;
Expand All @@ -280,6 +281,7 @@ bool Value::CZString::operator==(const CZString& other) const {
unsigned this_len = this->storage_.length_;
unsigned other_len = other.storage_.length_;
if (this_len != other_len) return false;
JSON_ASSERT(this->cstr_ && other.cstr_);
int comp = memcmp(this->cstr_, other.cstr_, this_len);
return comp == 0;
}
Expand Down Expand Up @@ -525,6 +527,7 @@ bool Value::operator<(const Value& other) const {
decodePrefixedString(this->allocated_, this->value_.string_, &this_len, &this_str);
decodePrefixedString(other.allocated_, other.value_.string_, &other_len, &other_str);
unsigned min_len = std::min(this_len, other_len);
JSON_ASSERT(this_str && other_str);
int comp = memcmp(this_str, other_str, min_len);
if (comp < 0) return true;
if (comp > 0) return false;
Expand Down Expand Up @@ -580,6 +583,7 @@ bool Value::operator==(const Value& other) const {
decodePrefixedString(this->allocated_, this->value_.string_, &this_len, &this_str);
decodePrefixedString(other.allocated_, other.value_.string_, &other_len, &other_str);
if (this_len != other_len) return false;
JSON_ASSERT(this_str && other_str);
int comp = memcmp(this_str, other_str, this_len);
return comp == 0;
}
Expand Down Expand Up @@ -914,7 +918,7 @@ void Value::resize(ArrayIndex newSize) {
for (ArrayIndex index = newSize; index < oldSize; ++index) {
value_.map_->erase(index);
}
assert(size() == newSize);
JSON_ASSERT(size() == newSize);
}
}

Expand Down

0 comments on commit 4878913

Please sign in to comment.