patch 9.1.1144: no way to create raw strings from a blob Commit: https://github.com/vim/vim/commit/b3854bfc543f0628699f58315ce6ec02dd59e415 Author: Bakudankun <bakudan...@gmail.com> Date: Sun Feb 23 20:29:21 2025 +0100
patch 9.1.1144: no way to create raw strings from a blob Problem: no way to create raw strings from a blob Solution: support the "encoding": "none" option to create raw strings (which may be invalid!) (Bakudankun) closes: #16666 Signed-off-by: Bakudankun <bakudan...@gmail.com> Signed-off-by: Christian Brabandt <c...@256bit.org> diff --git a/runtime/doc/builtin.txt b/runtime/doc/builtin.txt index 344dfdfd8..80b8a9cc4 100644 --- a/runtime/doc/builtin.txt +++ b/runtime/doc/builtin.txt @@ -1,4 +1,4 @@ -*builtin.txt* For Vim version 9.1. Last change: 2025 Feb 17 +*builtin.txt* For Vim version 9.1. Last change: 2025 Feb 23 VIM REFERENCE MANUAL by Bram Moolenaar @@ -1309,10 +1309,14 @@ blob2str({blob} [, {options}]) *blob2str()* items: encoding Decode the bytes in {blob} using this encoding. The value is a |String|. See - |encoding-names| for the supported values. + |encoding-names| for the supported values + (plus the special value "none"). *E1515* - An error is given and an empty List is returned if - an invalid byte sequence is encountered in {blob}, + When current 'encoding' is "utf-8", an error is given and an + empty List is returned if an invalid byte sequence is + encountered in {blob}. To suppress this validation and get + potentially invalid string, set "encoding" in {options} to + "none". Returns an empty List if blob is empty. @@ -10645,7 +10649,8 @@ str2blob({list} [, {options}]) *str2blob()* The argument {options} is a |Dict| and supports the following items: - encoding Encode the characters using this encoding. + encoding Convert the characters using this encoding + before making the Blob. The value is a |String|. See |encoding-names| for the supported values. diff --git a/src/strings.c b/src/strings.c index 5de3162bb..9e39c45ac 100644 --- a/src/strings.c +++ b/src/strings.c @@ -1289,7 +1289,7 @@ f_blob2str(typval_T *argvars, typval_T *rettv) blob_T *blob; int blen; long idx; - int utf8_inuse = FALSE; + int validate_utf8 = FALSE; if (check_for_blob_arg(argvars, 0) == FAIL || check_for_opt_dict_arg(argvars, 1) == FAIL) @@ -1316,7 +1316,14 @@ f_blob2str(typval_T *argvars, typval_T *rettv) } if (STRCMP(p_enc, "utf-8") == 0 || STRCMP(p_enc, "utf8") == 0) - utf8_inuse = TRUE; + validate_utf8 = TRUE; + + if (from_encoding != NULL && STRCMP(from_encoding, "none") == 0) + { + validate_utf8 = FALSE; + vim_free(from_encoding); + from_encoding = NULL; + } idx = 0; while (idx < blen) @@ -1340,7 +1347,7 @@ f_blob2str(typval_T *argvars, typval_T *rettv) } } - if (utf8_inuse) + if (validate_utf8) { if (!utf_valid_string(converted_str, NULL)) { diff --git a/src/testdir/test_functions.vim b/src/testdir/test_functions.vim index 8ecc3a671..6928cda8d 100644 --- a/src/testdir/test_functions.vim +++ b/src/testdir/test_functions.vim @@ -4446,6 +4446,9 @@ func Test_blob2str() call assert_equal(['a'], blob2str(0z61, test_null_dict())) call assert_equal(['a'], blob2str(0z61, {'encoding': test_null_string()})) + call assert_equal(["\x80"], blob2str(0z80, {'encoding': 'none'})) + call assert_equal(['a', "\x80"], blob2str(0z610A80, {'encoding': 'none'})) + #" Invalid encoding call assert_fails("call blob2str(0z80)", "E1515: Unable to convert from 'utf-8' encoding") call assert_fails("call blob2str(0z610A80)", "E1515: Unable to convert from 'utf-8' encoding") diff --git a/src/version.c b/src/version.c index 07bede551..5652fc34d 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1144, /**/ 1143, /**/ -- -- You received this message from the "vim_dev" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php --- You received this message because you are subscribed to the Google Groups "vim_dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to vim_dev+unsubscr...@googlegroups.com. To view this discussion visit https://groups.google.com/d/msgid/vim_dev/E1tmHuS-008s7d-2N%40256bit.org.