diff --git a/CHANGELOG.md b/CHANGELOG.md index de07e9c3b..e077339b6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ All notable changes to this project will be documented in this file. ### Changed ### Fixed +- Berry `bytes().asstring()` now truncates a string if buffer contains NULL ### Removed diff --git a/lib/libesp32/berry/src/be_byteslib.c b/lib/libesp32/berry/src/be_byteslib.c index d692286d9..046505aef 100644 --- a/lib/libesp32/berry/src/be_byteslib.c +++ b/lib/libesp32/berry/src/be_byteslib.c @@ -806,7 +806,8 @@ static int m_asstring(bvm *vm) { buf_impl attr = bytes_check_data(vm, 0); check_ptr(vm, &attr); - be_pushnstring(vm, (const char*) attr.bufptr, attr.len); + size_t safe_len = strnlen((const char*) attr.bufptr, attr.len); + be_pushnstring(vm, (const char*) attr.bufptr, safe_len); be_return(vm); } diff --git a/lib/libesp32/berry/tests/bytes.be b/lib/libesp32/berry/tests/bytes.be index 3533acc2a..6462fc1d0 100644 --- a/lib/libesp32/berry/tests/bytes.be +++ b/lib/libesp32/berry/tests/bytes.be @@ -354,3 +354,9 @@ assert(b.appendb64(c, 2) == bytes("AABBCC49673D3D")) b = bytes("AABBCC") assert(bytes().fromstring(bytes("11").tob64()) == bytes('45513D3D')) assert(b.appendb64(c, 1, 1) == bytes("AABBCC45513D3D")) + +#- asstring truncates if NULL is present -# +s=bytes("414243").asstring() +assert(size(s) == 3) +s=bytes("410000").asstring() +assert(size(s) == 1)