comparison src/evalfunc.c @ 33503:f72004b37b2b v9.0.2001

patch 9.0.2001: Vim9: segfault with islocked() Commit: https://github.com/vim/vim/commit/9771b2a67f825bdc6e5c615141d22c665952dc86 Author: Ernie Rael <errael@raelity.com> Date: Sat Oct 7 22:05:40 2023 +0200 patch 9.0.2001: Vim9: segfault with islocked() Problem: Vim9: segfault with islocked() Solution: Check that the lval pointer is not null for objects and class variables closes: #13295 Signed-off-by: Christian Brabandt <cb@256bit.org> Co-authored-by: Ernie Rael <errael@raelity.com>
author Christian Brabandt <cb@256bit.org>
date Sat, 07 Oct 2023 22:15:09 +0200
parents dcfbfe57141c
children f99f5a56ff27
comparison
equal deleted inserted replaced
33502:4c2e97be0fbe 33503:f72004b37b2b
7345 // 3. the List or Dict value is locked. 7345 // 3. the List or Dict value is locked.
7346 rettv->vval.v_number = ((di->di_flags & DI_FLAGS_LOCK) 7346 rettv->vval.v_number = ((di->di_flags & DI_FLAGS_LOCK)
7347 || tv_islocked(&di->di_tv)); 7347 || tv_islocked(&di->di_tv));
7348 } 7348 }
7349 } 7349 }
7350 else if (lv.ll_object != NULL)
7351 {
7352 typval_T *tv = ((typval_T *)(lv.ll_object + 1)) + lv.ll_oi;
7353 rettv->vval.v_number = tv_islocked(tv);
7354 #ifdef LOG_LOCKVAR
7355 ch_log(NULL, "LKVAR: f_islocked(): name %s (obj)", lv.ll_name);
7356 #endif
7357 }
7358 else if (lv.ll_class != NULL)
7359 {
7360 typval_T *tv = &lv.ll_class->class_members_tv[lv.ll_oi];
7361 rettv->vval.v_number = tv_islocked(tv);
7362 #ifdef LOG_LOCKVAR
7363 ch_log(NULL, "LKVAR: f_islocked(): name %s (cl)", lv.ll_name);
7364 #endif
7365 }
7350 else if (lv.ll_range) 7366 else if (lv.ll_range)
7351 emsg(_(e_range_not_allowed)); 7367 emsg(_(e_range_not_allowed));
7352 else if (lv.ll_newkey != NULL) 7368 else if (lv.ll_newkey != NULL)
7353 semsg(_(e_key_not_present_in_dictionary_str), lv.ll_newkey); 7369 semsg(_(e_key_not_present_in_dictionary_str), lv.ll_newkey);
7354 else if (lv.ll_list != NULL) 7370 else if (lv.ll_list != NULL)