diff --git a/CHANGELOG.md b/CHANGELOG.md index e077339b6..cd8b3aab9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ All notable changes to this project will be documented in this file. ### Fixed - Berry `bytes().asstring()` now truncates a string if buffer contains NULL +- Berry string literals containing NULL are truncated ### Removed diff --git a/lib/libesp32/berry/src/be_lexer.c b/lib/libesp32/berry/src/be_lexer.c index f0b74bab9..6aee7afa8 100644 --- a/lib/libesp32/berry/src/be_lexer.c +++ b/lib/libesp32/berry/src/be_lexer.c @@ -284,7 +284,8 @@ static void tr_string(blexer *lexer) break; } } - lexer->buf.len = dst - lexbuf(lexer); + size_t len = dst - lexbuf(lexer); + lexer->buf.len = strnlen(lexbuf(lexer), len); } static int skip_newline(blexer *lexer) diff --git a/lib/libesp32/berry/tests/lexer.be b/lib/libesp32/berry/tests/lexer.be index 8470d779c..e6eda69a5 100644 --- a/lib/libesp32/berry/tests/lexer.be +++ b/lib/libesp32/berry/tests/lexer.be @@ -84,3 +84,6 @@ var malformed_numbers = [ for i : malformed_numbers test_source(i, 'malformed number') end + +#- ensure that string literal with NULL character is truncated -# +assert(size('aa\000bb\000cc') == 2)