summaryrefslogtreecommitdiffstatshomepage
path: root/py/vstr.c
diff options
context:
space:
mode:
authorPaul Sokolovsky <pfalcon@users.sourceforge.net>2016-05-09 22:39:57 +0300
committerPaul Sokolovsky <pfalcon@users.sourceforge.net>2016-05-09 22:39:57 +0300
commita1f2245a81cb9e99cc620797e54a003bf0907b16 (patch)
tree556c63e3ab6c0cc31b7916ca7a4bc0821a8b7b65 /py/vstr.c
parent6de8dbb4880e58c68a08205cb2b9c15940143439 (diff)
downloadmicropython-a1f2245a81cb9e99cc620797e54a003bf0907b16.tar.gz
micropython-a1f2245a81cb9e99cc620797e54a003bf0907b16.zip
py/vstr: vstr_null_terminated_str(): Extend string by at most one byte.
vstr_null_terminated_str is almost certainly a vstr finalization operation, so it should add the requested NUL byte, and not try to pre-allocate more. The previous implementation could actually allocate double of the buffer size.
Diffstat (limited to 'py/vstr.c')
-rw-r--r--py/vstr.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/py/vstr.c b/py/vstr.c
index 3367ae581d..f558e3fcb1 100644
--- a/py/vstr.c
+++ b/py/vstr.c
@@ -181,9 +181,15 @@ char *vstr_add_len(vstr_t *vstr, size_t len) {
// Doesn't increase len, just makes sure there is a null byte at the end
char *vstr_null_terminated_str(vstr_t *vstr) {
- if (vstr->had_error || !vstr_ensure_extra(vstr, 1)) {
+ if (vstr->had_error) {
return NULL;
}
+ // If there's no more room, add single byte
+ if (vstr->alloc == vstr->len) {
+ if (vstr_extend(vstr, 1) == NULL) {
+ return NULL;
+ }
+ }
vstr->buf[vstr->len] = '\0';
return vstr->buf;
}