Skip to content

Commit

Permalink
Fixed undefined behavior in Prettyfier and Print (issue #354)
Browse files Browse the repository at this point in the history
  • Loading branch information
bblanchon committed Sep 17, 2016
1 parent 2f6f3d0 commit 8a9b918
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 7 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Expand Up @@ -6,6 +6,7 @@ HEAD

* Fixed `array[idx].as<JsonVariant>()` and `object[key].as<JsonVariant>()`
* Fixed return value of `JsonObject::set()` (issue #350)
* Fixed undefined behavior in `Prettyfier` and `Print` (issue #354)

v5.6.6
------
Expand Down
30 changes: 24 additions & 6 deletions include/ArduinoJson/Internals/Prettyfier.hpp
Expand Up @@ -66,28 +66,46 @@ class Prettyfier : public Print {
}

size_t writeBlockClose(uint8_t c) {
return unindentIfNeeded() + _sink.write(c);
size_t n = 0;
n += unindentIfNeeded();
n += _sink.write(c);
return n;
}

size_t writeBlockOpen(uint8_t c) {
return indentIfNeeded() + _sink.write(c);
size_t n = 0;
n += indentIfNeeded();
n += _sink.write(c);
return n;
}

size_t writeColon() {
return _sink.write(':') + _sink.write(' ');
size_t n = 0;
n += _sink.write(':');
n += _sink.write(' ');
return n;
}

size_t writeComma() {
return _sink.write(',') + _sink.println();
size_t n = 0;
n += _sink.write(',');
n += _sink.println();
return n;
}

size_t writeQuoteOpen() {
_inString = true;
return indentIfNeeded() + _sink.write('"');
size_t n = 0;
n += indentIfNeeded();
n += _sink.write('"');
return n;
}

size_t writeNormalChar(uint8_t c) {
return indentIfNeeded() + _sink.write(c);
size_t n = 0;
n += indentIfNeeded();
n += _sink.write(c);
return n;
}

size_t indentIfNeeded() {
Expand Down
7 changes: 6 additions & 1 deletion include/ArduinoJson/Print.hpp
Expand Up @@ -28,7 +28,12 @@ class Print {
return n;
}

size_t println() { return write('\r') + write('\n'); }
size_t println() {
size_t n = 0;
n += write('\r');
n += write('\n');
return n;
}
};
}

Expand Down

0 comments on commit 8a9b918

Please sign in to comment.