mirror of
https://github.com/neovim/neovim.git
synced 2025-10-04 00:46:30 +00:00
vim-patch:9.1.1774: cannot calculate sha256 of a Blob
Problem: cannot calculate sha256() of a Blob
Solution: Change sha256() to accept a Blob or String argument
(thinca).
closes: vim/vim#18336
4150283b83
Co-authored-by: thinca <thinca@gmail.com>
This commit is contained in:
@@ -10419,13 +10419,14 @@ M.funcs = {
|
||||
base = 1,
|
||||
desc = [=[
|
||||
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',
|
||||
params = { { 'string', 'string' } },
|
||||
params = { { 'expr', 'string' } },
|
||||
returns = 'string',
|
||||
signature = 'sha256({string})',
|
||||
signature = 'sha256({expr})',
|
||||
},
|
||||
shellescape = {
|
||||
args = { 1, 2 },
|
||||
|
@@ -7189,15 +7189,24 @@ 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)
|
||||
{
|
||||
const char *p = tv_get_string(&argvars[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->v_type = VAR_STRING;
|
||||
rettv->vval.v_string = NULL;
|
||||
|
||||
if (argvars[0].v_type == VAR_BLOB) {
|
||||
blob_T *blob = argvars[0].vval.v_blob;
|
||||
if (blob != NULL) {
|
||||
const uint8_t *p = (uint8_t *)blob->bv_ga.ga_data;
|
||||
int len = blob->bv_ga.ga_len;
|
||||
rettv->vval.v_string = xstrdup(sha256_bytes(p, (size_t)len, NULL, 0));
|
||||
}
|
||||
} else {
|
||||
const char *p = tv_get_string(&argvars[0]);
|
||||
const char *hash = sha256_bytes((const uint8_t *)p, strlen(p), NULL, 0);
|
||||
rettv->vval.v_string = xstrdup(hash);
|
||||
}
|
||||
}
|
||||
|
||||
/// "shellescape({string})" function
|
||||
|
Reference in New Issue
Block a user