summaryrefslogtreecommitdiff
path: root/data/vim/patches/8.1.1452
diff options
context:
space:
mode:
Diffstat (limited to 'data/vim/patches/8.1.1452')
-rw-r--r--data/vim/patches/8.1.1452288
1 files changed, 288 insertions, 0 deletions
diff --git a/data/vim/patches/8.1.1452 b/data/vim/patches/8.1.1452
new file mode 100644
index 000000000..5caad9370
--- /dev/null
+++ b/data/vim/patches/8.1.1452
@@ -0,0 +1,288 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.1452
+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.1452
+Problem: Line and col property of popup windows not properly checked.
+Solution: Check for "+" or "-" sign.
+Files: src/popupwin.c, src/dict.c, src/proto/dict.pro,
+ src/window.c, src/testdir/test_popupwin.vim
+
+
+*** ../vim-8.1.1451/src/popupwin.c 2019-06-02 15:34:15.458696427 +0200
+--- src/popupwin.c 2019-06-02 16:47:24.668428506 +0200
+***************
+*** 29,35 ****
+ };
+
+ /*
+! * Get option value for"key", which is "line" or "col".
+ * Handles "cursor+N" and "cursor-N".
+ */
+ static int
+--- 29,35 ----
+ };
+
+ /*
+! * Get option value for "key", which is "line" or "col".
+ * Handles "cursor+N" and "cursor-N".
+ */
+ static int
+***************
+*** 47,59 ****
+
+ val = tv_get_string(&di->di_tv);
+ if (STRNCMP(val, "cursor", 6) != 0)
+! return dict_get_number(dict, key);
+
+ setcursor_mayforce(TRUE);
+ s = val + 6;
+ if (*s != NUL)
+ {
+! n = strtol((char *)s, (char **)&endp, 10);
+ if (endp != NULL && *skipwhite(endp) != NUL)
+ {
+ semsg(_(e_invexpr2), val);
+--- 47,61 ----
+
+ val = tv_get_string(&di->di_tv);
+ if (STRNCMP(val, "cursor", 6) != 0)
+! return dict_get_number_check(dict, key);
+
+ setcursor_mayforce(TRUE);
+ s = val + 6;
+ if (*s != NUL)
+ {
+! endp = s;
+! if (*skipwhite(s) == '+' || *skipwhite(s) == '-')
+! n = strtol((char *)s, (char **)&endp, 10);
+ if (endp != NULL && *skipwhite(endp) != NUL)
+ {
+ semsg(_(e_invexpr2), val);
+***************
+*** 902,908 ****
+ dict_add_number(dict, "core_height", wp->w_height);
+
+ dict_add_number(dict, "visible",
+! (wp->w_popup_flags & POPF_HIDDEN) == 0);
+ }
+ }
+
+--- 904,910 ----
+ dict_add_number(dict, "core_height", wp->w_height);
+
+ dict_add_number(dict, "visible",
+! win_valid(wp) && (wp->w_popup_flags & POPF_HIDDEN) == 0);
+ }
+ }
+
+*** ../vim-8.1.1451/src/dict.c 2019-05-28 23:08:12.056648758 +0200
+--- src/dict.c 2019-06-02 16:15:26.717634023 +0200
+***************
+*** 605,610 ****
+--- 605,631 ----
+ }
+
+ /*
++ * Get a number item from a dictionary.
++ * Returns 0 if the entry doesn't exist.
++ * Give an error if the entry is not a number.
++ */
++ varnumber_T
++ dict_get_number_check(dict_T *d, char_u *key)
++ {
++ dictitem_T *di;
++
++ di = dict_find(d, key, -1);
++ if (di == NULL)
++ return 0;
++ if (di->di_tv.v_type != VAR_NUMBER)
++ {
++ semsg(_(e_invarg2), tv_get_string(&di->di_tv));
++ return 0;
++ }
++ return tv_get_number(&di->di_tv);
++ }
++
++ /*
+ * Return an allocated string with the string representation of a Dictionary.
+ * May return NULL.
+ */
+*** ../vim-8.1.1451/src/proto/dict.pro 2019-04-28 18:04:56.058492178 +0200
+--- src/proto/dict.pro 2019-06-02 16:15:30.649613201 +0200
+***************
+*** 25,30 ****
+--- 25,31 ----
+ dictitem_T *dict_find(dict_T *d, char_u *key, int len);
+ char_u *dict_get_string(dict_T *d, char_u *key, int save);
+ varnumber_T dict_get_number(dict_T *d, char_u *key);
++ varnumber_T dict_get_number_check(dict_T *d, char_u *key);
+ char_u *dict2string(typval_T *tv, int copyID, int restore_copyID);
+ int dict_get_tv(char_u **arg, typval_T *rettv, int evaluate);
+ void dict_extend(dict_T *d1, dict_T *d2, char_u *action);
+*** ../vim-8.1.1451/src/window.c 2019-06-01 22:49:23.701685671 +0200
+--- src/window.c 2019-06-02 16:46:22.068740562 +0200
+***************
+*** 1368,1373 ****
+--- 1368,1376 ----
+ win_copy_options(oldp, newp);
+ }
+
++ /*
++ * Return TRUE if "win" is a global popup or a popup in the current tab page.
++ */
+ static int
+ win_valid_popup(win_T *win UNUSED)
+ {
+***************
+*** 1418,1423 ****
+--- 1421,1431 ----
+ if (wp == win)
+ return TRUE;
+ }
++ #ifdef FEAT_TEXT_PROP
++ for (wp = tp->tp_first_popupwin; wp != NULL; wp = wp->w_next)
++ if (wp == win)
++ return TRUE;
++ #endif
+ }
+ return win_valid_popup(win);
+ }
+*** ../vim-8.1.1451/src/testdir/test_popupwin.vim 2019-06-02 15:34:15.458696427 +0200
+--- src/testdir/test_popupwin.vim 2019-06-02 16:50:01.087644950 +0200
+***************
+*** 224,229 ****
+--- 224,315 ----
+ call delete('XtestPopupCorners')
+ endfunc
+
++ func Test_popup_in_tab()
++ " default popup is local to tab, not visible when in other tab
++ let winid = popup_create("text", {})
++ call assert_equal(1, popup_getpos(winid).visible)
++ tabnew
++ call assert_equal(0, popup_getpos(winid).visible)
++ quit
++ call assert_equal(1, popup_getpos(winid).visible)
++ popupclear
++
++ " global popup is visible in any tab
++ let winid = popup_create("text", {'tab': -1})
++ call assert_equal(1, popup_getpos(winid).visible)
++ tabnew
++ call assert_equal(1, popup_getpos(winid).visible)
++ quit
++ call assert_equal(1, popup_getpos(winid).visible)
++ popupclear
++ endfunc
++
++ func Test_popup_valid_arguments()
++ " Zero value is like the property wasn't there
++ let winid = popup_create("text", {"col": 0})
++ let pos = popup_getpos(winid)
++ call assert_inrange(&columns / 2 - 1, &columns / 2 + 1, pos.col)
++ popupclear
++
++ " using cursor column has minimum value of 1
++ let winid = popup_create("text", {"col": 'cursor-100'})
++ let pos = popup_getpos(winid)
++ call assert_equal(1, pos.col)
++ popupclear
++
++ " center
++ let winid = popup_create("text", {"pos": 'center'})
++ let pos = popup_getpos(winid)
++ let around = (&columns - pos.width) / 2
++ call assert_inrange(around - 1, around + 1, pos.col)
++ let around = (&lines - pos.height) / 2
++ call assert_inrange(around - 1, around + 1, pos.line)
++ popupclear
++ endfunc
++
++ func Test_popup_invalid_arguments()
++ call assert_fails('call popup_create(666, {})', 'E714:')
++ popupclear
++ call assert_fails('call popup_create("text", "none")', 'E715:')
++ popupclear
++
++ call assert_fails('call popup_create("text", {"col": "xxx"})', 'E475:')
++ popupclear
++ call assert_fails('call popup_create("text", {"col": "cursor8"})', 'E15:')
++ popupclear
++ call assert_fails('call popup_create("text", {"col": "cursor+x"})', 'E15:')
++ popupclear
++ call assert_fails('call popup_create("text", {"col": "cursor+8x"})', 'E15:')
++ popupclear
++
++ call assert_fails('call popup_create("text", {"line": "xxx"})', 'E475:')
++ popupclear
++ call assert_fails('call popup_create("text", {"line": "cursor8"})', 'E15:')
++ popupclear
++ call assert_fails('call popup_create("text", {"line": "cursor+x"})', 'E15:')
++ popupclear
++ call assert_fails('call popup_create("text", {"line": "cursor+8x"})', 'E15:')
++ popupclear
++
++ call assert_fails('call popup_create("text", {"pos": "there"})', 'E475:')
++ popupclear
++ call assert_fails('call popup_create("text", {"padding": "none"})', 'E714:')
++ popupclear
++ call assert_fails('call popup_create("text", {"border": "none"})', 'E714:')
++ popupclear
++ call assert_fails('call popup_create("text", {"borderhighlight": "none"})', 'E714:')
++ popupclear
++ call assert_fails('call popup_create("text", {"borderchars": "none"})', 'E714:')
++ popupclear
++
++ call assert_fails('call popup_create([{"text": "text"}, 666], {})', 'E715:')
++ popupclear
++ call assert_fails('call popup_create([{"text": "text", "props": "none"}], {})', 'E714:')
++ popupclear
++ call assert_fails('call popup_create([{"text": "text", "props": ["none"]}], {})', 'E715:')
++ popupclear
++ endfunc
++
+ func Test_win_execute_closing_curwin()
+ split
+ let winid = popup_create('some text', {})
+***************
+*** 593,598 ****
+--- 679,693 ----
+ call assert_equal(4, pos.line)
+ call popup_close(winid)
+
++ " cursor in first line, popup in line 2
++ call cursor(1, 1)
++ redraw
++ let winid = popup_atcursor(['vim', 'is', 'great'], {})
++ redraw
++ let pos = popup_getpos(winid)
++ call assert_equal(2, pos.line)
++ call popup_close(winid)
++
+ bwipe!
+ endfunc
+
+*** ../vim-8.1.1451/src/version.c 2019-06-02 15:56:11.839730143 +0200
+--- src/version.c 2019-06-02 16:51:00.935343965 +0200
+***************
+*** 769,770 ****
+--- 769,772 ----
+ { /* Add new patch number below this line */
++ /**/
++ 1452,
+ /**/
+
+--
+From "know your smileys":
+ :----} You lie like Pinocchio
+
+ /// 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 ///