diff options
author | Paul Sokolovsky <pfalcon@users.sourceforge.net> | 2016-05-09 22:39:57 +0300 |
---|---|---|
committer | Paul Sokolovsky <pfalcon@users.sourceforge.net> | 2016-05-09 22:39:57 +0300 |
commit | a1f2245a81cb9e99cc620797e54a003bf0907b16 (patch) | |
tree | 556c63e3ab6c0cc31b7916ca7a4bc0821a8b7b65 /py | |
parent | 6de8dbb4880e58c68a08205cb2b9c15940143439 (diff) | |
download | micropython-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')
-rw-r--r-- | py/vstr.c | 8 |
1 files changed, 7 insertions, 1 deletions
@@ -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; } |