mirror of
https://github.com/neovim/neovim.git
synced 2025-09-24 03:58:32 +00:00
Merge pull request #35849 from zeertzjq/vim-9.1.1774
vim-patch:9.1.{1774,1778}: cannot calculate sha256 of a Blob
This commit is contained in:
@@ -9468,12 +9468,13 @@ setwinvar({nr}, {varname}, {val}) *setwinvar()*
|
|||||||
Return: ~
|
Return: ~
|
||||||
(`any`)
|
(`any`)
|
||||||
|
|
||||||
sha256({string}) *sha256()*
|
sha256({expr}) *sha256()*
|
||||||
Returns a String with 64 hex characters, which is the SHA256
|
Returns a String with 64 hex characters, which is the SHA256
|
||||||
checksum of {string}.
|
checksum of {expr}.
|
||||||
|
{expr} is a String or a Blob.
|
||||||
|
|
||||||
Parameters: ~
|
Parameters: ~
|
||||||
• {string} (`string`)
|
• {expr} (`string`)
|
||||||
|
|
||||||
Return: ~
|
Return: ~
|
||||||
(`string`)
|
(`string`)
|
||||||
|
7
runtime/lua/vim/_meta/vimfn.lua
generated
7
runtime/lua/vim/_meta/vimfn.lua
generated
@@ -8631,11 +8631,12 @@ function vim.fn.settagstack(nr, dict, action) end
|
|||||||
function vim.fn.setwinvar(nr, varname, val) end
|
function vim.fn.setwinvar(nr, varname, val) end
|
||||||
|
|
||||||
--- Returns a String with 64 hex characters, which is the SHA256
|
--- Returns a String with 64 hex characters, which is the SHA256
|
||||||
--- checksum of {string}.
|
--- checksum of {expr}.
|
||||||
|
--- {expr} is a String or a Blob.
|
||||||
---
|
---
|
||||||
--- @param string string
|
--- @param expr string
|
||||||
--- @return string
|
--- @return string
|
||||||
function vim.fn.sha256(string) end
|
function vim.fn.sha256(expr) end
|
||||||
|
|
||||||
--- Escape {string} for use as a shell command argument.
|
--- Escape {string} for use as a shell command argument.
|
||||||
---
|
---
|
||||||
|
@@ -10419,13 +10419,14 @@ M.funcs = {
|
|||||||
base = 1,
|
base = 1,
|
||||||
desc = [=[
|
desc = [=[
|
||||||
Returns a String with 64 hex characters, which is the SHA256
|
Returns a String with 64 hex characters, which is the SHA256
|
||||||
checksum of {string}.
|
checksum of {expr}.
|
||||||
|
{expr} is a String or a Blob.
|
||||||
|
|
||||||
]=],
|
]=],
|
||||||
name = 'sha256',
|
name = 'sha256',
|
||||||
params = { { 'string', 'string' } },
|
params = { { 'expr', 'string' } },
|
||||||
returns = 'string',
|
returns = 'string',
|
||||||
signature = 'sha256({string})',
|
signature = 'sha256({expr})',
|
||||||
},
|
},
|
||||||
shellescape = {
|
shellescape = {
|
||||||
args = { 1, 2 },
|
args = { 1, 2 },
|
||||||
|
@@ -7189,15 +7189,22 @@ static void f_settagstack(typval_T *argvars, typval_T *rettv, EvalFuncData fptr)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// f_sha256 - sha256({string}) function
|
/// "sha256({expr})" function
|
||||||
static void f_sha256(typval_T *argvars, typval_T *rettv, EvalFuncData fptr)
|
static void f_sha256(typval_T *argvars, typval_T *rettv, EvalFuncData fptr)
|
||||||
{
|
{
|
||||||
|
rettv->v_type = VAR_STRING;
|
||||||
|
rettv->vval.v_string = NULL;
|
||||||
|
|
||||||
|
if (argvars[0].v_type == VAR_BLOB) {
|
||||||
|
blob_T *blob = argvars[0].vval.v_blob;
|
||||||
|
const uint8_t *p = blob != NULL ? (uint8_t *)blob->bv_ga.ga_data : (uint8_t *)"";
|
||||||
|
int len = blob != NULL ? blob->bv_ga.ga_len : 0;
|
||||||
|
rettv->vval.v_string = xstrdup(sha256_bytes(p, (size_t)len, NULL, 0));
|
||||||
|
} else {
|
||||||
const char *p = tv_get_string(&argvars[0]);
|
const char *p = tv_get_string(&argvars[0]);
|
||||||
const char *hash = sha256_bytes((const uint8_t *)p, strlen(p), NULL, 0);
|
const char *hash = sha256_bytes((const uint8_t *)p, strlen(p), NULL, 0);
|
||||||
|
|
||||||
// make a copy of the hash (sha256_bytes returns a static buffer)
|
|
||||||
rettv->vval.v_string = xstrdup(hash);
|
rettv->vval.v_string = xstrdup(hash);
|
||||||
rettv->v_type = VAR_STRING;
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// "shellescape({string})" function
|
/// "shellescape({string})" function
|
||||||
|
@@ -5,18 +5,31 @@ source check.vim
|
|||||||
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(v:_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"))
|
||||||
|
|
||||||
|
" tests for blob:
|
||||||
|
" empty blob
|
||||||
|
call assert_equal('e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', sha256(0z))
|
||||||
|
" null blob
|
||||||
|
call assert_equal('e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', sha256(v:_null_blob))
|
||||||
|
" blob with single byte
|
||||||
|
call assert_equal('ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb', sha256(0z61))
|
||||||
|
" blob with "abc"
|
||||||
|
call assert_equal('ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad', sha256(0z616263))
|
||||||
|
" blob with non-ascii bytes
|
||||||
|
call assert_equal('5f78c33274e43fa9de5659265c1d917e25c03722dcb0b8d27db8d5feaa813953', sha256(0zdeadbeef))
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
" vim: shiftwidth=2 sts=2 expandtab
|
||||||
|
Reference in New Issue
Block a user