diff options
Diffstat (limited to 'data/vim/patches/8.1.0633')
-rw-r--r-- | data/vim/patches/8.1.0633 | 445 |
1 files changed, 0 insertions, 445 deletions
diff --git a/data/vim/patches/8.1.0633 b/data/vim/patches/8.1.0633 deleted file mode 100644 index dff65b41f..000000000 --- a/data/vim/patches/8.1.0633 +++ /dev/null @@ -1,445 +0,0 @@ -To: vim_dev@googlegroups.com -Subject: Patch 8.1.0633 -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.0633 -Problem: Crash when out of memory while opening a terminal window. -Solution: Handle out-of-memory more gracefully. -Files: src/terminal.c, src/libvterm/src/vterm.c, - src/libvterm/src/state.c, src/libvterm/src/termscreen.c - - -*** ../vim-8.1.0632/src/terminal.c 2018-12-21 20:55:18.892739645 +0100 ---- src/terminal.c 2018-12-24 21:22:28.150773840 +0100 -*************** -*** 3430,3435 **** ---- 3430,3436 ---- - { - int index = 0; - VTermState *state = vterm_obtain_state(vterm); -+ - for (; index < 16; index++) - { - VTermColor color; -*************** -*** 3703,3710 **** - - /* - * Create a new vterm and initialize it. - */ -! static void - create_vterm(term_T *term, int rows, int cols) - { - VTerm *vterm; ---- 3704,3712 ---- - - /* - * Create a new vterm and initialize it. -+ * Return FAIL when out of memory. - */ -! static int - create_vterm(term_T *term, int rows, int cols) - { - VTerm *vterm; -*************** -*** 3714,3720 **** ---- 3716,3733 ---- - - vterm = vterm_new_with_allocator(rows, cols, &vterm_allocator, NULL); - term->tl_vterm = vterm; -+ if (vterm == NULL) -+ return FAIL; -+ -+ // Allocate screen and state here, so we can bail out if that fails. -+ state = vterm_obtain_state(vterm); - screen = vterm_obtain_screen(vterm); -+ if (state == NULL || screen == NULL) -+ { -+ vterm_free(vterm); -+ return FAIL; -+ } -+ - vterm_screen_set_callbacks(screen, &screen_callbacks, term); - /* TODO: depends on 'encoding'. */ - vterm_set_utf8(vterm, 1); -*************** -*** 3722,3728 **** - init_default_colors(term); - - vterm_state_set_default_colors( -! vterm_obtain_state(vterm), - &term->tl_default_color.fg, - &term->tl_default_color.bg); - ---- 3735,3741 ---- - init_default_colors(term); - - vterm_state_set_default_colors( -! state, - &term->tl_default_color.fg, - &term->tl_default_color.bg); - -*************** -*** 3746,3754 **** - #else - value.boolean = 0; - #endif -- state = vterm_obtain_state(vterm); - vterm_state_set_termprop(state, VTERM_PROP_CURSORBLINK, &value); - vterm_state_set_unrecognised_fallbacks(state, &parser_fallbacks, term); - } - - /* ---- 3759,3768 ---- - #else - value.boolean = 0; - #endif - vterm_state_set_termprop(state, VTERM_PROP_CURSORBLINK, &value); - vterm_state_set_unrecognised_fallbacks(state, &parser_fallbacks, term); -+ -+ return OK; - } - - /* -*************** -*** 5629,5635 **** - vim_free(cwd_wchar); - vim_free(env_wchar); - -! create_vterm(term, term->tl_rows, term->tl_cols); - - #if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS) - if (opt->jo_set2 & JO2_ANSI_COLORS) ---- 5643,5650 ---- - vim_free(cwd_wchar); - vim_free(env_wchar); - -! if (create_vterm(term, term->tl_rows, term->tl_cols) == FAIL) -! goto failed; - - #if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS) - if (opt->jo_set2 & JO2_ANSI_COLORS) -*************** -*** 5710,5716 **** - char in_name[80], out_name[80]; - channel_T *channel = NULL; - -! create_vterm(term, term->tl_rows, term->tl_cols); - - vim_snprintf(in_name, sizeof(in_name), "\\\\.\\pipe\\vim-%d-in-%d", - GetCurrentProcessId(), ---- 5725,5732 ---- - char in_name[80], out_name[80]; - channel_T *channel = NULL; - -! if (create_vterm(term, term->tl_rows, term->tl_cols) == FAIL) -! return FAIL; - - vim_snprintf(in_name, sizeof(in_name), "\\\\.\\pipe\\vim-%d-in-%d", - GetCurrentProcessId(), -*************** -*** 5822,5828 **** - jobopt_T *opt, - jobopt_T *orig_opt UNUSED) - { -! create_vterm(term, term->tl_rows, term->tl_cols); - - #if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS) - if (opt->jo_set2 & JO2_ANSI_COLORS) ---- 5838,5845 ---- - jobopt_T *opt, - jobopt_T *orig_opt UNUSED) - { -! if (create_vterm(term, term->tl_rows, term->tl_cols) == FAIL) -! return FAIL; - - #if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS) - if (opt->jo_set2 & JO2_ANSI_COLORS) -*************** -*** 5844,5850 **** - static int - create_pty_only(term_T *term, jobopt_T *opt) - { -! create_vterm(term, term->tl_rows, term->tl_cols); - - term->tl_job = job_alloc(); - if (term->tl_job == NULL) ---- 5861,5868 ---- - static int - create_pty_only(term_T *term, jobopt_T *opt) - { -! if (create_vterm(term, term->tl_rows, term->tl_cols) == FAIL) -! return FAIL; - - term->tl_job = job_alloc(); - if (term->tl_job == NULL) -*** ../vim-8.1.0632/src/libvterm/src/vterm.c 2018-12-15 14:49:30.800096933 +0100 ---- src/libvterm/src/vterm.c 2018-12-24 21:26:14.100725256 +0100 -*************** -*** 1,5 **** ---- 1,6 ---- - #define DEFINE_INLINES - -+ /* vim: set sw=2 : */ - #include "vterm_internal.h" - - #include <stdio.h> -*************** -*** 41,46 **** ---- 42,49 ---- - /* Need to bootstrap using the allocator function directly */ - VTerm *vt = (*funcs->malloc)(sizeof(VTerm), allocdata); - -+ if (vt == NULL) -+ return NULL; - vt->allocator = funcs; - vt->allocdata = allocdata; - -*************** -*** 55,64 **** ---- 58,78 ---- - vt->parser.strbuffer_len = 500; /* should be able to hold an OSC string */ - vt->parser.strbuffer_cur = 0; - vt->parser.strbuffer = vterm_allocator_malloc(vt, vt->parser.strbuffer_len); -+ if (vt->parser.strbuffer == NULL) -+ { -+ vterm_allocator_free(vt, vt); -+ return NULL; -+ } - - vt->outbuffer_len = 200; - vt->outbuffer_cur = 0; - vt->outbuffer = vterm_allocator_malloc(vt, vt->outbuffer_len); -+ if (vt->outbuffer == NULL) -+ { -+ vterm_allocator_free(vt, vt->parser.strbuffer); -+ vterm_allocator_free(vt, vt); -+ return NULL; -+ } - - return vt; - } -*************** -*** 82,90 **** - return (*vt->allocator->malloc)(size, vt->allocdata); - } - - INTERNAL void vterm_allocator_free(VTerm *vt, void *ptr) - { -! (*vt->allocator->free)(ptr, vt->allocdata); - } - - void vterm_get_size(const VTerm *vt, int *rowsp, int *colsp) ---- 96,108 ---- - return (*vt->allocator->malloc)(size, vt->allocdata); - } - -+ /* -+ * Free "ptr" unless it is NULL. -+ */ - INTERNAL void vterm_allocator_free(VTerm *vt, void *ptr) - { -! if (ptr) -! (*vt->allocator->free)(ptr, vt->allocdata); - } - - void vterm_get_size(const VTerm *vt, int *rowsp, int *colsp) -*** ../vim-8.1.0632/src/libvterm/src/state.c 2018-07-09 20:39:12.824845063 +0200 ---- src/libvterm/src/state.c 2018-12-24 20:45:42.697972984 +0100 -*************** -*** 53,58 **** ---- 53,60 ---- - { - VTermState *state = vterm_allocator_malloc(vt, sizeof(VTermState)); - -+ if (state == NULL) -+ return NULL; - state->vt = vt; - - state->rows = vt->rows; -*************** -*** 1693,1698 **** ---- 1695,1704 ---- - on_resize /* resize */ - }; - -+ /* -+ * Return the existing state or create a new one. -+ * Returns NULL when out of memory. -+ */ - VTermState *vterm_obtain_state(VTerm *vt) - { - VTermState *state; -*************** -*** 1700,1705 **** ---- 1706,1713 ---- - return vt->state; - - state = vterm_state_new(vt); -+ if (state == NULL) -+ return NULL; - vt->state = state; - - state->combine_chars_size = 16; -*** ../vim-8.1.0632/src/libvterm/src/termscreen.c 2018-09-13 17:23:05.169150892 +0200 ---- src/libvterm/src/termscreen.c 2018-12-24 21:29:52.730781805 +0100 -*************** -*** 1,5 **** ---- 1,6 ---- - #include "vterm_internal.h" - -+ /* vim: set sw=2 : */ - #include <stdio.h> - #include <string.h> - -*************** -*** 95,102 **** - } - } - -! if(buffer) -! vterm_allocator_free(screen->vt, buffer); - - return new_buffer; - } ---- 96,102 ---- - } - } - -! vterm_allocator_free(screen->vt, buffer); - - return new_buffer; - } -*************** -*** 518,525 **** - screen->rows = new_rows; - screen->cols = new_cols; - -! if(screen->sb_buffer) -! vterm_allocator_free(screen->vt, screen->sb_buffer); - - screen->sb_buffer = vterm_allocator_malloc(screen->vt, sizeof(VTermScreenCell) * new_cols); - ---- 518,524 ---- - screen->rows = new_rows; - screen->cols = new_cols; - -! vterm_allocator_free(screen->vt, screen->sb_buffer); - - screen->sb_buffer = vterm_allocator_malloc(screen->vt, sizeof(VTermScreenCell) * new_cols); - -*************** -*** 619,634 **** - &setlineinfo /* setlineinfo */ - }; - - static VTermScreen *screen_new(VTerm *vt) - { - VTermState *state = vterm_obtain_state(vt); - VTermScreen *screen; - int rows, cols; - -! if(!state) - return NULL; -- - screen = vterm_allocator_malloc(vt, sizeof(VTermScreen)); - - vterm_get_size(vt, &rows, &cols); - ---- 618,638 ---- - &setlineinfo /* setlineinfo */ - }; - -+ /* -+ * Allocate a new screen and return it. -+ * Return NULL when out of memory. -+ */ - static VTermScreen *screen_new(VTerm *vt) - { - VTermState *state = vterm_obtain_state(vt); - VTermScreen *screen; - int rows, cols; - -! if (state == NULL) - return NULL; - screen = vterm_allocator_malloc(vt, sizeof(VTermScreen)); -+ if (screen == NULL) -+ return NULL; - - vterm_get_size(vt, &rows, &cols); - -*************** -*** 646,655 **** - screen->cbdata = NULL; - - screen->buffers[0] = realloc_buffer(screen, NULL, rows, cols); -- - screen->buffer = screen->buffers[0]; -- - screen->sb_buffer = vterm_allocator_malloc(screen->vt, sizeof(VTermScreenCell) * cols); - - vterm_state_set_callbacks(screen->state, &state_cbs, screen); - ---- 650,662 ---- - screen->cbdata = NULL; - - screen->buffers[0] = realloc_buffer(screen, NULL, rows, cols); - screen->buffer = screen->buffers[0]; - screen->sb_buffer = vterm_allocator_malloc(screen->vt, sizeof(VTermScreenCell) * cols); -+ if (screen->buffer == NULL || screen->sb_buffer == NULL) -+ { -+ vterm_screen_free(screen); -+ return NULL; -+ } - - vterm_state_set_callbacks(screen->state, &state_cbs, screen); - -*************** -*** 659,669 **** - INTERNAL void vterm_screen_free(VTermScreen *screen) - { - vterm_allocator_free(screen->vt, screen->buffers[0]); -! if(screen->buffers[1]) -! vterm_allocator_free(screen->vt, screen->buffers[1]); -! - vterm_allocator_free(screen->vt, screen->sb_buffer); -- - vterm_allocator_free(screen->vt, screen); - } - ---- 666,673 ---- - INTERNAL void vterm_screen_free(VTermScreen *screen) - { - vterm_allocator_free(screen->vt, screen->buffers[0]); -! vterm_allocator_free(screen->vt, screen->buffers[1]); - vterm_allocator_free(screen->vt, screen->sb_buffer); - vterm_allocator_free(screen->vt, screen); - } - -*** ../vim-8.1.0632/src/version.c 2018-12-24 20:23:39.440716979 +0100 ---- src/version.c 2018-12-24 21:34:22.808414341 +0100 -*************** -*** 801,802 **** ---- 801,804 ---- - { /* Add new patch number below this line */ -+ /**/ -+ 633, - /**/ - --- -"Oh, no! NOT the Spanish Inquisition!" -"NOBODY expects the Spanish Inquisition!!!" - -- Monty Python sketch -- -"Oh, no! NOT another option!" -"EVERYBODY expects another option!!!" - -- Discussion in vim-dev mailing list -- - - /// 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 /// |