aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/eval/typval.c
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2022-09-12 14:08:51 +0800
committerzeertzjq <zeertzjq@outlook.com>2022-09-12 14:56:49 +0800
commit49aa9e17fa6f9b22550bff8f468c375ddf03fece (patch)
treee1acc84917bf6d932cff455c141c0eba4d4c9c1a /src/nvim/eval/typval.c
parent38059b4f31d8c9374002e209bc9ee2df28ac17fa (diff)
downloadrneovim-49aa9e17fa6f9b22550bff8f468c375ddf03fece.tar.gz
rneovim-49aa9e17fa6f9b22550bff8f468c375ddf03fece.tar.bz2
rneovim-49aa9e17fa6f9b22550bff8f468c375ddf03fece.zip
vim-patch:8.2.2664: Vim9: not enough function arguments checked for string
Problem: Vim9: not enough function arguments checked for string. Solution: Check in balloon functions. Refactor function arguments. https://github.com/vim/vim/commit/32105ae88f3aa6a6af30336f0bc9f8eb81292cd7 Cherry-pick removal of useless check from patch 8.2.3840. vim-patch:8.2.3083: crash when passing null string to charclass() Problem: Crash when passing null string to charclass(). Solution: Bail out when string pointer is NULL. (Christian Brabandt, closes vim/vim#8498, closes vim/vim#8260) https://github.com/vim/vim/commit/72463f883cdfd08e29ab0018ef3889284848d5f1
Diffstat (limited to 'src/nvim/eval/typval.c')
-rw-r--r--src/nvim/eval/typval.c26
1 files changed, 9 insertions, 17 deletions
diff --git a/src/nvim/eval/typval.c b/src/nvim/eval/typval.c
index 3bc3cdbd6b..c75d16e4fc 100644
--- a/src/nvim/eval/typval.c
+++ b/src/nvim/eval/typval.c
@@ -3805,34 +3805,26 @@ float_T tv_get_float(const typval_T *const tv)
return 0;
}
-/// Give an error and return FAIL unless "tv" is a string.
-int tv_check_for_string(const typval_T *const tv, const int arg)
+/// Give an error and return FAIL unless "args[idx]" is a string.
+int tv_check_for_string_arg(const typval_T *const args, const int idx)
FUNC_ATTR_NONNULL_ALL FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_PURE
{
- if (tv->v_type != VAR_STRING) {
- if (arg > 0) {
- semsg(_(e_string_required_for_argument_nr), arg);
- } else {
- emsg(_(e_stringreq));
- }
+ if (args[idx].v_type != VAR_STRING) {
+ semsg(_(e_string_required_for_argument_nr), idx + 1);
return FAIL;
}
return OK;
}
-/// Give an error and return FAIL unless "tv" is a non-empty string.
-int tv_check_for_nonempty_string(const typval_T *const tv, const int arg)
+/// Give an error and return FAIL unless "args[idx]" is a non-empty string.
+int tv_check_for_nonempty_string_arg(const typval_T *const args, const int idx)
FUNC_ATTR_NONNULL_ALL FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_PURE
{
- if (tv_check_for_string(tv, arg) == FAIL) {
+ if (tv_check_for_string_arg(args, idx) == FAIL) {
return FAIL;
}
- if (tv->vval.v_string == NULL || *tv->vval.v_string == NUL) {
- if (arg > 0) {
- semsg(_(e_non_empty_string_required_for_argument_nr), arg);
- } else {
- emsg(_(e_non_empty_string_required));
- }
+ if (args[idx].vval.v_string == NULL || *args[idx].vval.v_string == NUL) {
+ semsg(_(e_non_empty_string_required_for_argument_nr), idx + 1);
return FAIL;
}
return OK;