patch 9.1.1778: sha256() treats empty blob and null blob differently
Commit:
https://github.com/vim/vim/commit/2f3b7ea19a476a7637b6ad2c43e3a33755b1178b
Author: zeertzjq <[email protected]>
Date: Sat Sep 20 14:37:40 2025 +0000
patch 9.1.1778: sha256() treats empty blob and null blob differently
Problem: sha256() treats empty blob and null blob differently
(after 9.1.1774).
Solution: Handle null blob the same as empty blob (zeertzjq).
closes: #18341
Signed-off-by: zeertzjq <[email protected]>
Signed-off-by: Christian Brabandt <[email protected]>
diff --git a/src/evalfunc.c b/src/evalfunc.c
index a1076f07d..34e3291ab 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -11760,12 +11760,9 @@ f_sha256(typval_T *argvars, typval_T *rettv)
if (argvars[0].v_type == VAR_BLOB)
{
blob_T *blob = argvars[0].vval.v_blob;
- if (blob != NULL)
- {
- p = (char_u *)blob->bv_ga.ga_data;
- len = blob->bv_ga.ga_len;
- rettv->vval.v_string = vim_strsave(sha256_bytes(p, len, NULL, 0));
- }
+ p = blob != NULL ? (char_u *)blob->bv_ga.ga_data : (char_u *)"";
+ len = blob != NULL ? blob->bv_ga.ga_len : 0;
+ rettv->vval.v_string = vim_strsave(sha256_bytes(p, len, NULL, 0));
}
else
{
diff --git a/src/testdir/test_sha256.vim b/src/testdir/test_sha256.vim
index 4da4a6f94..16cfac894 100644
--- a/src/testdir/test_sha256.vim
+++ b/src/testdir/test_sha256.vim
@@ -4,24 +4,25 @@ CheckFeature cryptv
CheckFunction sha256
function Test_sha256()
- " test for empty string:
+ " tests for string:
+ " empty string
call
assert_equal('e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855',
sha256(""))
-
- "'test for 1 char:
+ " null string
+ call
assert_equal('e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855',
sha256(test_null_string()))
+ " string with 1 char
call
assert_equal('ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb',
sha256("a"))
- "
- "test for 3 chars:
+ " string with 3 chars
call
assert_equal('ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad',
"abc"->sha256())
-
- " test for contains meta char:
+ " string containing meta char
call
assert_equal('807eff6267f3f926a21d234f7b0cf867a86f47e07a532f15e8cc39ed110ca776',
sha256("foo
bar"))
-
- " test for contains non-ascii char:
+ " string containing non-ascii char
call
assert_equal('5f78c33274e43fa9de5659265c1d917e25c03722dcb0b8d27db8d5feaa813953',
sha256("\xde\xad\xbe\xef"))
- " test for blob:
+ " tests for blob:
" empty blob
call
assert_equal('e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855',
sha256(0z))
+ " null blob
+ call
assert_equal('e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855',
sha256(test_null_blob()))
" blob with single byte
call
assert_equal('ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb',
sha256(0z61))
" blob with "abc"
diff --git a/src/version.c b/src/version.c
index 80affcf8d..53fef7dd9 100644
--- a/src/version.c
+++ b/src/version.c
@@ -724,6 +724,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 1778,
/**/
1777,
/**/
--
--
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 [email protected].
To view this discussion visit
https://groups.google.com/d/msgid/vim_dev/E1uzypn-000lX8-89%40256bit.org.