mirror of
https://github.com/vim/vim.git
synced 2025-09-24 03:44:06 -04:00
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 <zeertzjq@outlook.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
committed by
Christian Brabandt
parent
841becdc2d
commit
2f3b7ea19a
@@ -11760,12 +11760,9 @@ f_sha256(typval_T *argvars, typval_T *rettv)
|
|||||||
if (argvars[0].v_type == VAR_BLOB)
|
if (argvars[0].v_type == VAR_BLOB)
|
||||||
{
|
{
|
||||||
blob_T *blob = argvars[0].vval.v_blob;
|
blob_T *blob = argvars[0].vval.v_blob;
|
||||||
if (blob != NULL)
|
p = blob != NULL ? (char_u *)blob->bv_ga.ga_data : (char_u *)"";
|
||||||
{
|
len = blob != NULL ? blob->bv_ga.ga_len : 0;
|
||||||
p = (char_u *)blob->bv_ga.ga_data;
|
rettv->vval.v_string = vim_strsave(sha256_bytes(p, len, NULL, 0));
|
||||||
len = blob->bv_ga.ga_len;
|
|
||||||
rettv->vval.v_string = vim_strsave(sha256_bytes(p, len, NULL, 0));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@@ -4,24 +4,25 @@ CheckFeature cryptv
|
|||||||
CheckFunction sha256
|
CheckFunction sha256
|
||||||
|
|
||||||
function Test_sha256()
|
function Test_sha256()
|
||||||
" test for empty string:
|
" tests for string:
|
||||||
|
" empty string
|
||||||
call assert_equal('e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', sha256(""))
|
call assert_equal('e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', sha256(""))
|
||||||
|
" null string
|
||||||
"'test for 1 char:
|
call assert_equal('e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', sha256(test_null_string()))
|
||||||
|
" string with 1 char
|
||||||
call assert_equal('ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb', sha256("a"))
|
call assert_equal('ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb', sha256("a"))
|
||||||
"
|
" string with 3 chars
|
||||||
"test for 3 chars:
|
|
||||||
call assert_equal('ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad', "abc"->sha256())
|
call assert_equal('ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad', "abc"->sha256())
|
||||||
|
" string containing meta char
|
||||||
" test for contains meta char:
|
|
||||||
call assert_equal('807eff6267f3f926a21d234f7b0cf867a86f47e07a532f15e8cc39ed110ca776', sha256("foo\nbar"))
|
call assert_equal('807eff6267f3f926a21d234f7b0cf867a86f47e07a532f15e8cc39ed110ca776', sha256("foo\nbar"))
|
||||||
|
" string containing non-ascii char
|
||||||
" test for contains non-ascii char:
|
|
||||||
call assert_equal('5f78c33274e43fa9de5659265c1d917e25c03722dcb0b8d27db8d5feaa813953', sha256("\xde\xad\xbe\xef"))
|
call assert_equal('5f78c33274e43fa9de5659265c1d917e25c03722dcb0b8d27db8d5feaa813953', sha256("\xde\xad\xbe\xef"))
|
||||||
|
|
||||||
" test for blob:
|
" tests for blob:
|
||||||
" empty blob
|
" empty blob
|
||||||
call assert_equal('e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', sha256(0z))
|
call assert_equal('e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', sha256(0z))
|
||||||
|
" null blob
|
||||||
|
call assert_equal('e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', sha256(test_null_blob()))
|
||||||
" blob with single byte
|
" blob with single byte
|
||||||
call assert_equal('ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb', sha256(0z61))
|
call assert_equal('ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb', sha256(0z61))
|
||||||
" blob with "abc"
|
" blob with "abc"
|
||||||
|
@@ -724,6 +724,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
1778,
|
||||||
/**/
|
/**/
|
||||||
1777,
|
1777,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user