comparison src/structs.h @ 33420:aa7cd2253130 v9.0.1968

patch 9.0.1968: cmdline completion should consider key option Commit: https://github.com/vim/vim/commit/6ee7b521fa7531ef356ececc8be7575c3800f872 Author: Yee Cheng Chin <ychin.git@gmail.com> Date: Sun Oct 1 09:13:22 2023 +0200 patch 9.0.1968: cmdline completion should consider key option Problem: cmdline completion should consider key option Solution: Disable cmdline completion for key option, slightly refactor how P_NO_CMD_EXPAND is handled Harden crypto 'key' option: turn off cmdline completion, disable set-= "set-=" can be used maliciously with a crypto key, as it allows an attacker (who either has access to the computer or a plugin author) to guess a substring by observing the modified state. Simply turn off set+=/-=/^= for this option as there is no good reason for them to be used. Update docs to make that clear as well. Also, don't allow cmdline completion for 'key' as it just shows ***** which is not useful and confusing to the user what it means (if the user accidentally hits enter they will have replaced their key with "*****" instead). Move logic to better location, don't use above 32-bit for flags Move P_NO_CMD_EXPAND to use the unused 0x20 instead of going above 32-bits, as currently the flags parameter is only 32-bits on some systems. Left a comment to warn that future additions will need to change how the flags work either by making it 64-bit or split into two member vars. Also, move the logic for detecting P_NO_CMD_EXPAND earlier so it's not up to each handler to decide, and you won't see the temporary "..." that Vim shows while waiting for completion handler to complete. closes: #13224 Signed-off-by: Christian Brabandt <cb@256bit.org> Co-authored-by: Yee Cheng Chin <ychin.git@gmail.com>
author Christian Brabandt <cb@256bit.org>
date Sun, 01 Oct 2023 09:30:03 +0200
parents bb99820510ef
children 18f4a04384f3
comparison
equal deleted inserted replaced
33419:68fc658ae847 33420:aa7cd2253130
585 typedef enum { 585 typedef enum {
586 XP_PREFIX_NONE, // prefix not used 586 XP_PREFIX_NONE, // prefix not used
587 XP_PREFIX_NO, // "no" prefix for bool option 587 XP_PREFIX_NO, // "no" prefix for bool option
588 XP_PREFIX_INV, // "inv" prefix for bool option 588 XP_PREFIX_INV, // "inv" prefix for bool option
589 } xp_prefix_T; 589 } xp_prefix_T;
590
591 typedef enum {
592 OP_NONE = 0,
593 OP_ADDING, // "opt+=arg"
594 OP_PREPENDING, // "opt^=arg"
595 OP_REMOVING, // "opt-=arg"
596 } set_op_T;
590 597
591 /* 598 /*
592 * used for completion on the command line 599 * used for completion on the command line
593 */ 600 */
594 typedef struct expand 601 typedef struct expand
4874 // Pointer to the option variable. The variable can be a long (numeric 4881 // Pointer to the option variable. The variable can be a long (numeric
4875 // option), an int (boolean option) or a char pointer (string option). 4882 // option), an int (boolean option) or a char pointer (string option).
4876 char_u *os_varp; 4883 char_u *os_varp;
4877 int os_idx; 4884 int os_idx;
4878 int os_flags; 4885 int os_flags;
4886 set_op_T os_op;
4879 4887
4880 // old value of the option (can be a string, number or a boolean) 4888 // old value of the option (can be a string, number or a boolean)
4881 union 4889 union
4882 { 4890 {
4883 long number; 4891 long number;