summaryrefslogtreecommitdiff
path: root/data/vim/patches/8.1.1219
diff options
context:
space:
mode:
Diffstat (limited to 'data/vim/patches/8.1.1219')
-rw-r--r--data/vim/patches/8.1.1219480
1 files changed, 480 insertions, 0 deletions
diff --git a/data/vim/patches/8.1.1219 b/data/vim/patches/8.1.1219
new file mode 100644
index 000000000..f651f4738
--- /dev/null
+++ b/data/vim/patches/8.1.1219
@@ -0,0 +1,480 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.1219
+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.1219
+Problem: Not checking for NULL return from alloc().
+Solution: Add checks. (Martin Kunev, closes #4303, closes #4174)
+Files: src/beval.c, src/blowfish.c, src/crypt.c, src/crypt_zip.c,
+ src/ops.c, src/option.c, src/popupmnu.c, src/proto/blowfish.pro,
+ src/proto/crypt_zip.pro, src/gui_gtk_f.c, src/gui_gtk_x11.c,
+ src/libvterm/src/state.c, src/libvterm/src/termscreen.c
+
+
+*** ../vim-8.1.1218/src/beval.c 2019-01-17 15:43:21.753878419 +0100
+--- src/beval.c 2019-04-27 21:44:39.226975332 +0200
+***************
+*** 127,132 ****
+--- 127,134 ----
+ #ifdef FEAT_VARTABS
+ vim_free(beval->vts);
+ beval->vts = tabstop_copy(wp->w_buffer->b_p_vts_array);
++ if (wp->w_buffer->b_p_vts_array != NULL && beval->vts == NULL)
++ return FAIL;
+ #endif
+ beval->ts = wp->w_buffer->b_p_ts;
+ return OK;
+*** ../vim-8.1.1218/src/blowfish.c 2019-02-17 17:44:36.199875566 +0100
+--- src/blowfish.c 2019-04-27 21:36:48.073670930 +0200
+***************
+*** 636,642 ****
+ }
+ }
+
+! void
+ crypt_blowfish_init(
+ cryptstate_T *state,
+ char_u* key,
+--- 636,642 ----
+ }
+ }
+
+! int
+ crypt_blowfish_init(
+ cryptstate_T *state,
+ char_u* key,
+***************
+*** 647,652 ****
+--- 647,654 ----
+ {
+ bf_state_T *bfs = (bf_state_T *)alloc_clear(sizeof(bf_state_T));
+
++ if (bfs == NULL)
++ return FAIL;
+ state->method_state = bfs;
+
+ /* "blowfish" uses a 64 byte buffer, causing it to repeat 8 byte groups 8
+***************
+*** 654,663 ****
+ bfs->cfb_len = state->method_nr == CRYPT_M_BF ? BF_MAX_CFB_LEN : BF_BLOCK;
+
+ if (blowfish_self_test() == FAIL)
+! return;
+
+ bf_key_init(bfs, key, salt, salt_len);
+ bf_cfb_init(bfs, seed, seed_len);
+ }
+
+ /*
+--- 656,667 ----
+ bfs->cfb_len = state->method_nr == CRYPT_M_BF ? BF_MAX_CFB_LEN : BF_BLOCK;
+
+ if (blowfish_self_test() == FAIL)
+! return FAIL;
+
+ bf_key_init(bfs, key, salt, salt_len);
+ bf_cfb_init(bfs, seed, seed_len);
++
++ return OK;
+ }
+
+ /*
+*** ../vim-8.1.1218/src/crypt.c 2019-04-21 00:00:07.942354840 +0200
+--- src/crypt.c 2019-04-27 21:38:11.065263015 +0200
+***************
+*** 43,49 ****
+ int (* self_test_fn)();
+
+ // Function pointer for initializing encryption/decryption.
+! void (* init_fn)(cryptstate_T *state, char_u *key,
+ char_u *salt, int salt_len, char_u *seed, int seed_len);
+
+ /* Function pointers for encoding/decoding from one buffer into another.
+--- 43,49 ----
+ int (* self_test_fn)();
+
+ // Function pointer for initializing encryption/decryption.
+! int (* init_fn)(cryptstate_T *state, char_u *key,
+ char_u *salt, int salt_len, char_u *seed, int seed_len);
+
+ /* Function pointers for encoding/decoding from one buffer into another.
+***************
+*** 243,248 ****
+--- 243,249 ----
+
+ /*
+ * Allocate a crypt state and initialize it.
++ * Return NULL for failure.
+ */
+ cryptstate_T *
+ crypt_create(
+***************
+*** 255,262 ****
+ {
+ cryptstate_T *state = (cryptstate_T *)alloc((int)sizeof(cryptstate_T));
+
+ state->method_nr = method_nr;
+! cryptmethods[method_nr].init_fn(state, key, salt, salt_len, seed, seed_len);
+ return state;
+ }
+
+--- 256,271 ----
+ {
+ cryptstate_T *state = (cryptstate_T *)alloc((int)sizeof(cryptstate_T));
+
++ if (state == NULL)
++ return state;
++
+ state->method_nr = method_nr;
+! if (cryptmethods[method_nr].init_fn(
+! state, key, salt, salt_len, seed, seed_len) == FAIL)
+! {
+! vim_free(state);
+! return NULL;
+! }
+ return state;
+ }
+
+*** ../vim-8.1.1218/src/crypt_zip.c 2019-03-30 18:46:57.340077448 +0100
+--- src/crypt_zip.c 2019-04-27 21:39:16.576855289 +0200
+***************
+*** 78,84 ****
+ /*
+ * Initialize for encryption/decryption.
+ */
+! void
+ crypt_zip_init(
+ cryptstate_T *state,
+ char_u *key,
+--- 78,84 ----
+ /*
+ * Initialize for encryption/decryption.
+ */
+! int
+ crypt_zip_init(
+ cryptstate_T *state,
+ char_u *key,
+***************
+*** 91,96 ****
+--- 91,98 ----
+ zip_state_T *zs;
+
+ zs = (zip_state_T *)alloc(sizeof(zip_state_T));
++ if (zs == NULL)
++ return FAIL;
+ state->method_state = zs;
+
+ make_crc_tab();
+***************
+*** 99,104 ****
+--- 101,108 ----
+ zs->keys[2] = 878082192L;
+ for (p = key; *p != NUL; ++p)
+ UPDATE_KEYS_ZIP(zs->keys, (int)*p);
++
++ return OK;
+ }
+
+ /*
+*** ../vim-8.1.1218/src/ops.c 2019-03-30 18:46:57.356077354 +0100
+--- src/ops.c 2019-04-27 21:43:12.119465720 +0200
+***************
+*** 6170,6190 ****
+ y_ptr->y_size = linecount;
+ y_ptr->y_time_set = timestamp;
+ if (linecount == 0)
+ y_ptr->y_array = NULL;
+! else
+ {
+! y_ptr->y_array =
+! (char_u **)alloc((unsigned)(linecount * sizeof(char_u *)));
+! for (i = 0; i < linecount; i++)
+ {
+! if (vp[i + 6].bv_allocated)
+! {
+! y_ptr->y_array[i] = vp[i + 6].bv_string;
+! vp[i + 6].bv_string = NULL;
+! }
+! else
+! y_ptr->y_array[i] = vim_strsave(vp[i + 6].bv_string);
+ }
+ }
+ }
+
+--- 6170,6194 ----
+ y_ptr->y_size = linecount;
+ y_ptr->y_time_set = timestamp;
+ if (linecount == 0)
++ {
+ y_ptr->y_array = NULL;
+! return;
+! }
+! y_ptr->y_array = (char_u **)alloc((unsigned)(linecount * sizeof(char_u *)));
+! if (y_ptr->y_array == NULL)
+! {
+! y_ptr->y_size = 0; // ensure object state is consistent
+! return;
+! }
+! for (i = 0; i < linecount; i++)
+ {
+! if (vp[i + 6].bv_allocated)
+ {
+! y_ptr->y_array[i] = vp[i + 6].bv_string;
+! vp[i + 6].bv_string = NULL;
+ }
++ else
++ y_ptr->y_array[i] = vim_strsave(vp[i + 6].bv_string);
+ }
+ }
+
+*** ../vim-8.1.1218/src/option.c 2019-04-11 11:19:21.549778651 +0200
+--- src/option.c 2019-04-27 21:44:17.207098326 +0200
+***************
+*** 13011,13023 ****
+ int *newts;
+ int t;
+
+! if (oldts == 0)
+! return 0;
+!
+! newts = (int *) alloc((unsigned) ((oldts[0] + 1) * sizeof(int)));
+! for (t = 0; t <= oldts[0]; ++t)
+! newts[t] = oldts[t];
+!
+ return newts;
+ }
+ #endif
+--- 13011,13022 ----
+ int *newts;
+ int t;
+
+! if (oldts == NULL)
+! return NULL;
+! newts = (int *)alloc((unsigned)((oldts[0] + 1) * sizeof(int)));
+! if (newts != NULL)
+! for (t = 0; t <= oldts[0]; ++t)
+! newts[t] = oldts[t];
+ return newts;
+ }
+ #endif
+*** ../vim-8.1.1218/src/popupmnu.c 2019-04-08 18:15:36.468223210 +0200
+--- src/popupmnu.c 2019-04-27 21:45:50.918579053 +0200
+***************
+*** 1102,1113 ****
+ else
+ thislen = item->bytelen;
+
+! /* put indent at the start */
+ p = alloc(thislen + item->indent * 2 + 1);
+ for (ind = 0; ind < item->indent * 2; ++ind)
+ p[ind] = ' ';
+
+! /* exclude spaces at the end of the string */
+ for (copylen = thislen; copylen > 0; --copylen)
+ if (item->start[skip + copylen - 1] != ' ')
+ break;
+--- 1102,1120 ----
+ else
+ thislen = item->bytelen;
+
+! // put indent at the start
+ p = alloc(thislen + item->indent * 2 + 1);
++ if (p == NULL)
++ {
++ for (line = 0; line <= height - 1; ++line)
++ vim_free((*array)[line].pum_text);
++ vim_free(*array);
++ goto failed;
++ }
+ for (ind = 0; ind < item->indent * 2; ++ind)
+ p[ind] = ' ';
+
+! // exclude spaces at the end of the string
+ for (copylen = thislen; copylen > 0; --copylen)
+ if (item->start[skip + copylen - 1] != ' ')
+ break;
+*** ../vim-8.1.1218/src/proto/blowfish.pro 2018-05-17 13:52:28.000000000 +0200
+--- src/proto/blowfish.pro 2019-04-27 21:32:10.894967886 +0200
+***************
+*** 1,6 ****
+ /* blowfish.c */
+ void crypt_blowfish_encode(cryptstate_T *state, char_u *from, size_t len, char_u *to);
+ void crypt_blowfish_decode(cryptstate_T *state, char_u *from, size_t len, char_u *to);
+! void crypt_blowfish_init(cryptstate_T *state, char_u *key, char_u *salt, int salt_len, char_u *seed, int seed_len);
+ int blowfish_self_test(void);
+ /* vim: set ft=c : */
+--- 1,6 ----
+ /* blowfish.c */
+ void crypt_blowfish_encode(cryptstate_T *state, char_u *from, size_t len, char_u *to);
+ void crypt_blowfish_decode(cryptstate_T *state, char_u *from, size_t len, char_u *to);
+! int crypt_blowfish_init(cryptstate_T *state, char_u *key, char_u *salt, int salt_len, char_u *seed, int seed_len);
+ int blowfish_self_test(void);
+ /* vim: set ft=c : */
+*** ../vim-8.1.1218/src/proto/crypt_zip.pro 2018-05-17 13:52:30.000000000 +0200
+--- src/proto/crypt_zip.pro 2019-04-27 21:32:10.894967886 +0200
+***************
+*** 1,5 ****
+ /* crypt_zip.c */
+! void crypt_zip_init(cryptstate_T *state, char_u *key, char_u *salt, int salt_len, char_u *seed, int seed_len);
+ void crypt_zip_encode(cryptstate_T *state, char_u *from, size_t len, char_u *to);
+ void crypt_zip_decode(cryptstate_T *state, char_u *from, size_t len, char_u *to);
+ /* vim: set ft=c : */
+--- 1,5 ----
+ /* crypt_zip.c */
+! int crypt_zip_init(cryptstate_T *state, char_u *key, char_u *salt, int salt_len, char_u *seed, int seed_len);
+ void crypt_zip_encode(cryptstate_T *state, char_u *from, size_t len, char_u *to);
+ void crypt_zip_decode(cryptstate_T *state, char_u *from, size_t len, char_u *to);
+ /* vim: set ft=c : */
+*** ../vim-8.1.1218/src/gui_gtk_f.c 2019-03-02 10:13:36.792974862 +0100
+--- src/gui_gtk_f.c 2019-04-27 21:48:42.633651485 +0200
+***************
+*** 130,135 ****
+--- 130,137 ----
+
+ /* LINTED: avoid warning: conversion to 'unsigned long' */
+ child = g_new(GtkFormChild, 1);
++ if (child == NULL)
++ return;
+
+ child->widget = child_widget;
+ child->window = NULL;
+*** ../vim-8.1.1218/src/gui_gtk_x11.c 2019-03-02 10:13:36.792974862 +0100
+--- src/gui_gtk_x11.c 2019-04-27 21:51:52.784651485 +0200
+***************
+*** 1576,1587 ****
+ if (string != NULL)
+ {
+ tmpbuf = alloc(length + 2);
+! tmpbuf[0] = 0xff;
+! tmpbuf[1] = 0xfe;
+! mch_memmove(tmpbuf + 2, string, (size_t)length);
+! vim_free(string);
+! string = tmpbuf;
+! length += 2;
+
+ #if !GTK_CHECK_VERSION(3,0,0)
+ /* Looks redundant even for GTK2 because these values are
+--- 1576,1590 ----
+ if (string != NULL)
+ {
+ tmpbuf = alloc(length + 2);
+! if (tmpbuf != NULL)
+! {
+! tmpbuf[0] = 0xff;
+! tmpbuf[1] = 0xfe;
+! mch_memmove(tmpbuf + 2, string, (size_t)length);
+! vim_free(string);
+! string = tmpbuf;
+! length += 2;
+! }
+
+ #if !GTK_CHECK_VERSION(3,0,0)
+ /* Looks redundant even for GTK2 because these values are
+***************
+*** 1606,1615 ****
+ tmpbuf[0] = motion_type;
+ STRCPY(tmpbuf + 1, p_enc);
+ mch_memmove(tmpbuf + l + 2, string, (size_t)length);
+ }
+- length += l + 2;
+- vim_free(string);
+- string = tmpbuf;
+ type = vimenc_atom;
+ }
+
+--- 1609,1618 ----
+ tmpbuf[0] = motion_type;
+ STRCPY(tmpbuf + 1, p_enc);
+ mch_memmove(tmpbuf + l + 2, string, (size_t)length);
++ length += l + 2;
++ vim_free(string);
++ string = tmpbuf;
+ }
+ type = vimenc_atom;
+ }
+
+*** ../vim-8.1.1218/src/libvterm/src/state.c 2019-04-06 17:33:20.651486473 +0200
+--- src/libvterm/src/state.c 2019-04-27 21:57:43.626854093 +0200
+***************
+*** 253,258 ****
+--- 253,260 ----
+ // We'll have at most len codepoints, plus one from a previous incomplete
+ // sequence.
+ codepoints = vterm_allocator_malloc(state->vt, (len + 1) * sizeof(uint32_t));
++ if (codepoints == NULL)
++ return 0;
+
+ encoding =
+ state->gsingle_set ? &state->encoding[state->gsingle_set] :
+***************
+*** 330,335 ****
+--- 332,339 ----
+ break;
+
+ chars = vterm_allocator_malloc(state->vt, (glyph_ends - glyph_starts + 1) * sizeof(uint32_t));
++ if (chars == NULL)
++ break;
+
+ for( ; i < glyph_ends; i++) {
+ int this_width;
+***************
+*** 1626,1631 ****
+--- 1630,1637 ----
+
+ if(cols != state->cols) {
+ unsigned char *newtabstops = vterm_allocator_malloc(state->vt, (cols + 7) / 8);
++ if (newtabstops == NULL)
++ return 0;
+
+ /* TODO: This can all be done much more efficiently bytewise */
+ int col;
+***************
+*** 1651,1656 ****
+--- 1657,1664 ----
+
+ if(rows != state->rows) {
+ VTermLineInfo *newlineinfo = vterm_allocator_malloc(state->vt, rows * sizeof(VTermLineInfo));
++ if (newlineinfo == NULL)
++ return 0;
+
+ int row;
+ for(row = 0; row < state->rows && row < rows; row++) {
+*** ../vim-8.1.1218/src/libvterm/src/termscreen.c 2018-12-24 21:38:40.814173687 +0100
+--- src/libvterm/src/termscreen.c 2019-04-27 21:58:10.334718969 +0200
+***************
+*** 83,88 ****
+--- 83,90 ----
+ ScreenCell *new_buffer = vterm_allocator_malloc(screen->vt, sizeof(ScreenCell) * new_rows * new_cols);
+ int row, col;
+
++ if (new_buffer == NULL)
++ return NULL;
+ for(row = 0; row < new_rows; row++) {
+ for(col = 0; col < new_cols; col++) {
+ ScreenCell *new_cell = new_buffer + row*new_cols + col;
+*** ../vim-8.1.1218/src/version.c 2019-04-27 20:36:52.534303564 +0200
+--- src/version.c 2019-04-27 21:33:25.082620378 +0200
+***************
+*** 769,770 ****
+--- 769,772 ----
+ { /* Add new patch number below this line */
++ /**/
++ 1219,
+ /**/
+
+--
+WOMAN: King of the who?
+ARTHUR: The Britons.
+WOMAN: Who are the Britons?
+ARTHUR: Well, we all are. we're all Britons and I am your king.
+ The Quest for the Holy Grail (Monty Python)
+
+ /// 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 ///