diff options
Diffstat (limited to 'data/vim/patches/8.1.1355')
-rw-r--r-- | data/vim/patches/8.1.1355 | 460 |
1 files changed, 0 insertions, 460 deletions
diff --git a/data/vim/patches/8.1.1355 b/data/vim/patches/8.1.1355 deleted file mode 100644 index 282277597..000000000 --- a/data/vim/patches/8.1.1355 +++ /dev/null @@ -1,460 +0,0 @@ -To: vim_dev@googlegroups.com -Subject: Patch 8.1.1355 -Fcc: outbox -From: Bram Moolenaar <Bram@moolenaar.net> -Mime-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit ------------- - -Patch 8.1.1355 -Problem: Obvious mistakes are accepted as valid expressions. -Solution: Be more strict about parsing numbers. (Yasuhiro Matsumoto, - closes #3981) -Files: src/charset.c, src/eval.c, src/evalfunc.c, src/ex_cmds.c, - src/ex_getln.c, src/json.c, src/misc2.c, src/ops.c, src/option.c, - src/proto/charset.pro, src/testdir/test_expr.vim, - src/testdir/test_json.vim - - -*** ../vim-8.1.1354/src/charset.c 2019-03-21 21:45:30.883282076 +0100 ---- src/charset.c 2019-05-19 19:02:56.822368539 +0200 -*************** -*** 1776,1800 **** - * If "what" contains STR2NR_HEX recognize hex numbers - * If "what" contains STR2NR_FORCE always assume bin/oct/hex. - * If maxlen > 0, check at a maximum maxlen chars. - */ - void - vim_str2nr( - char_u *start, -! int *prep, /* return: type of number 0 = decimal, 'x' -! or 'X' is hex, '0' = octal, 'b' or 'B' -! is bin */ -! int *len, /* return: detected length of number */ -! int what, /* what numbers to recognize */ -! varnumber_T *nptr, /* return: signed result */ -! uvarnumber_T *unptr, /* return: unsigned result */ -! int maxlen) /* max length of string to check */ - { - char_u *ptr = start; -! int pre = 0; /* default is decimal */ - int negative = FALSE; - uvarnumber_T un = 0; - int n; - - if (ptr[0] == '-') - { - negative = TRUE; ---- 1776,1805 ---- - * If "what" contains STR2NR_HEX recognize hex numbers - * If "what" contains STR2NR_FORCE always assume bin/oct/hex. - * If maxlen > 0, check at a maximum maxlen chars. -+ * If strict is TRUE, check the number strictly. return *len = 0 if fail. - */ - void - vim_str2nr( - char_u *start, -! int *prep, // return: type of number 0 = decimal, 'x' -! // or 'X' is hex, '0' = octal, 'b' or 'B' -! // is bin -! int *len, // return: detected length of number -! int what, // what numbers to recognize -! varnumber_T *nptr, // return: signed result -! uvarnumber_T *unptr, // return: unsigned result -! int maxlen, // max length of string to check -! int strict) // check strictly - { - char_u *ptr = start; -! int pre = 0; // default is decimal - int negative = FALSE; - uvarnumber_T un = 0; - int n; - -+ if (len != NULL) -+ *len = 0; -+ - if (ptr[0] == '-') - { - negative = TRUE; -*************** -*** 1836,1844 **** - } - } - -! /* -! * Do the string-to-numeric conversion "manually" to avoid sscanf quirks. -! */ - n = 1; - if (pre == 'B' || pre == 'b' || what == STR2NR_BIN + STR2NR_FORCE) - { ---- 1841,1847 ---- - } - } - -! // Do the conversion manually to avoid sscanf() quirks. - n = 1; - if (pre == 'B' || pre == 'b' || what == STR2NR_BIN + STR2NR_FORCE) - { -*************** -*** 1907,1912 **** ---- 1910,1919 ---- - break; - } - } -+ // Check for an alpha-numeric character immediately following, that is -+ // most likely a typo. -+ if (strict && n - 1 != maxlen && ASCII_ISALNUM(*ptr)) -+ return; - - if (prep != NULL) - *prep = pre; -*** ../vim-8.1.1354/src/eval.c 2019-05-19 18:41:23.262148495 +0200 ---- src/eval.c 2019-05-19 18:53:32.114127645 +0200 -*************** -*** 4453,4459 **** - else - { - // decimal, hex or octal number -! vim_str2nr(*arg, NULL, &len, STR2NR_ALL, &n, NULL, 0); - *arg += len; - if (evaluate) - { ---- 4453,4465 ---- - else - { - // decimal, hex or octal number -! vim_str2nr(*arg, NULL, &len, STR2NR_ALL, &n, NULL, 0, TRUE); -! if (len == 0) -! { -! semsg(_(e_invexpr2), *arg); -! ret = FAIL; -! break; -! } - *arg += len; - if (evaluate) - { -*************** -*** 7460,7466 **** - case VAR_STRING: - if (varp->vval.v_string != NULL) - vim_str2nr(varp->vval.v_string, NULL, NULL, -! STR2NR_ALL, &n, NULL, 0); - return n; - case VAR_LIST: - emsg(_("E745: Using a List as a Number")); ---- 7466,7472 ---- - case VAR_STRING: - if (varp->vval.v_string != NULL) - vim_str2nr(varp->vval.v_string, NULL, NULL, -! STR2NR_ALL, &n, NULL, 0, FALSE); - return n; - case VAR_LIST: - emsg(_("E745: Using a List as a Number")); -*** ../vim-8.1.1354/src/evalfunc.c 2019-05-19 15:27:09.394109547 +0200 ---- src/evalfunc.c 2019-05-19 18:53:32.118127617 +0200 -*************** -*** 13199,13205 **** - case 16: what = STR2NR_HEX + STR2NR_FORCE; break; - default: what = 0; - } -! vim_str2nr(p, NULL, NULL, what, &n, NULL, 0); - if (isneg) - rettv->vval.v_number = -n; - else ---- 13199,13206 ---- - case 16: what = STR2NR_HEX + STR2NR_FORCE; break; - default: what = 0; - } -! vim_str2nr(p, NULL, NULL, what, &n, NULL, 0, FALSE); -! // Text after the number is silently ignored. - if (isneg) - rettv->vval.v_number = -n; - else -*** ../vim-8.1.1354/src/ex_cmds.c 2019-05-19 15:19:53.820445439 +0200 ---- src/ex_cmds.c 2019-05-19 18:53:32.118127617 +0200 -*************** -*** 558,564 **** - { - nrs[lnum - eap->line1].st_u.num.is_number = TRUE; - vim_str2nr(s, NULL, NULL, sort_what, -! &nrs[lnum - eap->line1].st_u.num.value, NULL, 0); - } - } - #ifdef FEAT_FLOAT ---- 558,565 ---- - { - nrs[lnum - eap->line1].st_u.num.is_number = TRUE; - vim_str2nr(s, NULL, NULL, sort_what, -! &nrs[lnum - eap->line1].st_u.num.value, -! NULL, 0, FALSE); - } - } - #ifdef FEAT_FLOAT -*** ../vim-8.1.1354/src/ex_getln.c 2019-05-09 15:12:45.168723969 +0200 ---- src/ex_getln.c 2019-05-19 18:53:32.118127617 +0200 -*************** -*** 6470,6476 **** - *str = skipwhite(*str); - if (**str == '-' || vim_isdigit(**str)) /* parse "from" part of range */ - { -! vim_str2nr(*str, NULL, &len, 0, &num, NULL, 0); - *str += len; - *num1 = (int)num; - first = TRUE; ---- 6470,6476 ---- - *str = skipwhite(*str); - if (**str == '-' || vim_isdigit(**str)) /* parse "from" part of range */ - { -! vim_str2nr(*str, NULL, &len, 0, &num, NULL, 0, FALSE); - *str += len; - *num1 = (int)num; - first = TRUE; -*************** -*** 6479,6485 **** - if (**str == ',') /* parse "to" part of range */ - { - *str = skipwhite(*str + 1); -! vim_str2nr(*str, NULL, &len, 0, &num, NULL, 0); - if (len > 0) - { - *num2 = (int)num; ---- 6479,6485 ---- - if (**str == ',') /* parse "to" part of range */ - { - *str = skipwhite(*str + 1); -! vim_str2nr(*str, NULL, &len, 0, &num, NULL, 0, FALSE); - if (len > 0) - { - *num2 = (int)num; -*** ../vim-8.1.1354/src/json.c 2019-04-12 21:19:01.265386241 +0200 ---- src/json.c 2019-05-19 18:53:32.118127617 +0200 -*************** -*** 452,458 **** - nr = 0; - len = 0; - vim_str2nr(p + 2, NULL, &len, -! STR2NR_HEX + STR2NR_FORCE, &nr, NULL, 4); - p += len + 2; - if (0xd800 <= nr && nr <= 0xdfff - && (int)(reader->js_end - p) >= 6 ---- 452,463 ---- - nr = 0; - len = 0; - vim_str2nr(p + 2, NULL, &len, -! STR2NR_HEX + STR2NR_FORCE, &nr, NULL, 4, TRUE); -! if (len == 0) -! { -! ga_clear(&ga); -! return FAIL; -! } - p += len + 2; - if (0xd800 <= nr && nr <= 0xdfff - && (int)(reader->js_end - p) >= 6 -*************** -*** 463,469 **** - /* decode surrogate pair: \ud812\u3456 */ - len = 0; - vim_str2nr(p + 2, NULL, &len, -! STR2NR_HEX + STR2NR_FORCE, &nr2, NULL, 4); - if (0xdc00 <= nr2 && nr2 <= 0xdfff) - { - p += len + 2; ---- 468,479 ---- - /* decode surrogate pair: \ud812\u3456 */ - len = 0; - vim_str2nr(p + 2, NULL, &len, -! STR2NR_HEX + STR2NR_FORCE, &nr2, NULL, 4, TRUE); -! if (len == 0) -! { -! ga_clear(&ga); -! return FAIL; -! } - if (0xdc00 <= nr2 && nr2 <= 0xdfff) - { - p += len + 2; -*************** -*** 783,789 **** - - vim_str2nr(reader->js_buf + reader->js_used, - NULL, &len, 0, /* what */ -! &nr, NULL, 0); - if (cur_item != NULL) - { - cur_item->v_type = VAR_NUMBER; ---- 793,805 ---- - - vim_str2nr(reader->js_buf + reader->js_used, - NULL, &len, 0, /* what */ -! &nr, NULL, 0, TRUE); -! if (len == 0) -! { -! emsg(_(e_invarg)); -! retval = FAIL; -! goto theend; -! } - if (cur_item != NULL) - { - cur_item->v_type = VAR_NUMBER; -*** ../vim-8.1.1354/src/misc2.c 2019-05-09 15:12:45.172723940 +0200 ---- src/misc2.c 2019-05-19 18:53:32.118127617 +0200 -*************** -*** 2832,2838 **** - bp += 3; /* skip t_xx, xx may be '-' or '>' */ - else if (STRNICMP(bp, "char-", 5) == 0) - { -! vim_str2nr(bp + 5, NULL, &l, STR2NR_ALL, NULL, NULL, 0); - bp += l + 5; - break; - } ---- 2832,2843 ---- - bp += 3; /* skip t_xx, xx may be '-' or '>' */ - else if (STRNICMP(bp, "char-", 5) == 0) - { -! vim_str2nr(bp + 5, NULL, &l, STR2NR_ALL, NULL, NULL, 0, TRUE); -! if (l == 0) -! { -! emsg(_(e_invarg)); -! return 0; -! } - bp += l + 5; - break; - } -*************** -*** 2864,2870 **** - && VIM_ISDIGIT(last_dash[6])) - { - /* <Char-123> or <Char-033> or <Char-0x33> */ -! vim_str2nr(last_dash + 6, NULL, NULL, STR2NR_ALL, NULL, &n, 0); - key = (int)n; - } - else ---- 2869,2880 ---- - && VIM_ISDIGIT(last_dash[6])) - { - /* <Char-123> or <Char-033> or <Char-0x33> */ -! vim_str2nr(last_dash + 6, NULL, &l, STR2NR_ALL, NULL, &n, 0, TRUE); -! if (l == 0) -! { -! emsg(_(e_invarg)); -! return 0; -! } - key = (int)n; - } - else -*** ../vim-8.1.1354/src/ops.c 2019-05-19 15:19:53.824445415 +0200 ---- src/ops.c 2019-05-19 18:53:32.122127587 +0200 -*************** -*** 5794,5800 **** - 0 + (dobin ? STR2NR_BIN : 0) - + (dooct ? STR2NR_OCT : 0) - + (dohex ? STR2NR_HEX : 0), -! NULL, &n, maxlen); - - /* ignore leading '-' for hex and octal and bin numbers */ - if (pre && negative) ---- 5794,5800 ---- - 0 + (dobin ? STR2NR_BIN : 0) - + (dooct ? STR2NR_OCT : 0) - + (dohex ? STR2NR_HEX : 0), -! NULL, &n, maxlen, FALSE); - - /* ignore leading '-' for hex and octal and bin numbers */ - if (pre && negative) -*** ../vim-8.1.1354/src/option.c 2019-05-09 15:12:45.176723907 +0200 ---- src/option.c 2019-05-19 18:53:32.122127587 +0200 -*************** -*** 4762,4771 **** - /* Allow negative (for 'undolevels'), octal and - * hex numbers. */ - vim_str2nr(arg, NULL, &i, STR2NR_ALL, -! &value, NULL, 0); -! if (arg[i] != NUL && !VIM_ISWHITE(arg[i])) - { -! errmsg = e_invarg; - goto skip; - } - } ---- 4762,4771 ---- - /* Allow negative (for 'undolevels'), octal and - * hex numbers. */ - vim_str2nr(arg, NULL, &i, STR2NR_ALL, -! &value, NULL, 0, TRUE); -! if (i == 0 || (arg[i] != NUL && !VIM_ISWHITE(arg[i]))) - { -! errmsg = N_("E521: Number required after ="); - goto skip; - } - } -*** ../vim-8.1.1354/src/proto/charset.pro 2018-05-17 13:52:29.000000000 +0200 ---- src/proto/charset.pro 2019-05-19 18:53:32.122127587 +0200 -*************** -*** 54,60 **** - char_u *skiptowhite_esc(char_u *p); - long getdigits(char_u **pp); - int vim_isblankline(char_u *lbuf); -! void vim_str2nr(char_u *start, int *prep, int *len, int what, varnumber_T *nptr, uvarnumber_T *unptr, int maxlen); - int hex2nr(int c); - int hexhex2nr(char_u *p); - int rem_backslash(char_u *str); ---- 54,60 ---- - char_u *skiptowhite_esc(char_u *p); - long getdigits(char_u **pp); - int vim_isblankline(char_u *lbuf); -! void vim_str2nr(char_u *start, int *prep, int *len, int what, varnumber_T *nptr, uvarnumber_T *unptr, int maxlen, int strict); - int hex2nr(int c); - int hexhex2nr(char_u *p); - int rem_backslash(char_u *str); -*** ../vim-8.1.1354/src/testdir/test_expr.vim 2018-12-15 16:08:52.998468517 +0100 ---- src/testdir/test_expr.vim 2019-05-19 18:57:21.312514000 +0200 -*************** -*** 512,514 **** ---- 512,525 ---- - call assert_equal('b', 'a'[4:0] . 'b') - call assert_equal('b', 'b' . 'a'[4:0]) - endfunc -+ -+ func Test_broken_number() -+ let X = 'bad' -+ call assert_fails('echo 1X', 'E15:') -+ call assert_fails('echo 0b1X', 'E15:') -+ call assert_fails('echo 0b12', 'E15:') -+ call assert_fails('echo 0x1X', 'E15:') -+ call assert_fails('echo 011X', 'E15:') -+ call assert_equal(2, str2nr('2a')) -+ call assert_fails('inoremap <Char-0b1z> b', 'E474:') -+ endfunc -*** ../vim-8.1.1354/src/testdir/test_json.vim 2019-04-12 21:19:01.265386241 +0200 ---- src/testdir/test_json.vim 2019-05-19 18:53:32.122127587 +0200 -*************** -*** 176,181 **** ---- 176,185 ---- - - call assert_fails('call json_decode("{{}:42}")', "E474:") - call assert_fails('call json_decode("{[]:42}")', "E474:") -+ -+ call assert_fails('call json_decode("\"\\u111Z\"")', 'E474:') -+ call assert_equal('[😂]', json_decode('"[\uD83D\uDE02]"')) -+ call assert_equal('a😂b', json_decode('"a\uD83D\uDE02b"')) - endfunc - - let s:jsl5 = '[7,,,]' -*** ../vim-8.1.1354/src/version.c 2019-05-19 18:41:23.262148495 +0200 ---- src/version.c 2019-05-19 18:56:01.189060580 +0200 -*************** -*** 769,770 **** ---- 769,772 ---- - { /* Add new patch number below this line */ -+ /**/ -+ 1355, - /**/ - --- -Bad fashion can discourage normal people from interacting with the engineer -and talking about the cute things their children do. - (Scott Adams - The Dilbert principle) - - /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ -/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ -\\\ an exciting new programming language -- http://www.Zimbu.org /// - \\\ help me help AIDS victims -- http://ICCF-Holland.org /// |