diff options
Diffstat (limited to 'source/ap/vim/patches/7.3.148')
-rw-r--r-- | source/ap/vim/patches/7.3.148 | 252 |
1 files changed, 0 insertions, 252 deletions
diff --git a/source/ap/vim/patches/7.3.148 b/source/ap/vim/patches/7.3.148 deleted file mode 100644 index 30492c0b..00000000 --- a/source/ap/vim/patches/7.3.148 +++ /dev/null @@ -1,252 +0,0 @@ -To: vim_dev@googlegroups.com -Subject: Patch 7.3.148 -Fcc: outbox -From: Bram Moolenaar <Bram@moolenaar.net> -Mime-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit ------------- - -Patch 7.3.148 -Problem: A syntax file with a huge number of items or clusters causes weird - behavior, a hang or a crash. (Yukihiro Nakadaira) -Solution: Check running out of IDs. (partly by Ben Schmidt) -Files: src/syntax.c - - -*** ../vim-7.3.147/src/syntax.c 2011-01-22 00:58:15.000000000 +0100 ---- src/syntax.c 2011-04-01 14:25:39.000000000 +0200 -*************** -*** 219,234 **** - - /* - * Syntax group IDs have different types: -! * 0 - 9999 normal syntax groups -! * 10000 - 14999 ALLBUT indicator (current_syn_inc_tag added) -! * 15000 - 19999 TOP indicator (current_syn_inc_tag added) -! * 20000 - 24999 CONTAINED indicator (current_syn_inc_tag added) -! * >= 25000 cluster IDs (subtract SYNID_CLUSTER for the cluster ID) -! */ -! #define SYNID_ALLBUT 10000 /* syntax group ID for contains=ALLBUT */ -! #define SYNID_TOP 15000 /* syntax group ID for contains=TOP */ -! #define SYNID_CONTAINED 20000 /* syntax group ID for contains=CONTAINED */ -! #define SYNID_CLUSTER 25000 /* first syntax group ID for clusters */ - - /* - * Annoying Hack(TM): ":syn include" needs this pointer to pass to ---- 219,238 ---- - - /* - * Syntax group IDs have different types: -! * 0 - 19999 normal syntax groups -! * 20000 - 20999 ALLBUT indicator (current_syn_inc_tag added) -! * 21000 - 21999 TOP indicator (current_syn_inc_tag added) -! * 22000 - 22999 CONTAINED indicator (current_syn_inc_tag added) -! * 23000 - 32767 cluster IDs (subtract SYNID_CLUSTER for the cluster ID) -! */ -! #define SYNID_ALLBUT 20000 /* syntax group ID for contains=ALLBUT */ -! #define SYNID_TOP 21000 /* syntax group ID for contains=TOP */ -! #define SYNID_CONTAINED 22000 /* syntax group ID for contains=CONTAINED */ -! #define SYNID_CLUSTER 23000 /* first syntax group ID for clusters */ -! -! #define MAX_SYNID SYNID_ALLBUT -! #define MAX_SYN_INC_TAG 999 /* maximum before the above overflow */ -! #define MAX_CLUSTER_ID (32767 - SYNID_CLUSTER) - - /* - * Annoying Hack(TM): ":syn include" needs this pointer to pass to -*************** -*** 3442,3447 **** ---- 3446,3454 ---- - /* free the stored states */ - syn_stack_free_all(block); - invalidate_current_state(); -+ -+ /* Reset the counter for ":syn include" */ -+ running_syn_inc_tag = 0; - } - - /* -*************** -*** 4661,4666 **** ---- 4668,4675 ---- - return; - } - sgl_id = syn_check_cluster(arg, (int)(group_name_end - arg)); -+ if (sgl_id == 0) -+ return; - /* separate_nextcmd() and expand_filename() depend on this */ - eap->arg = rest; - } -*************** -*** 4689,4694 **** ---- 4698,4708 ---- - * Save and restore the existing top-level grouplist id and ":syn - * include" tag around the actual inclusion. - */ -+ if (running_syn_inc_tag >= MAX_SYN_INC_TAG) -+ { -+ EMSG((char_u *)_("E847: Too many syntax includes")); -+ return; -+ } - prev_syn_inc_tag = current_syn_inc_tag; - current_syn_inc_tag = ++running_syn_inc_tag; - prev_toplvl_grp = curwin->w_s->b_syn_topgrp; -*************** -*** 4712,4718 **** - char_u *group_name_end; - int syn_id; - char_u *rest; -! char_u *keyword_copy; - char_u *p; - char_u *kw; - syn_opt_arg_T syn_opt_arg; ---- 4726,4732 ---- - char_u *group_name_end; - int syn_id; - char_u *rest; -! char_u *keyword_copy = NULL; - char_u *p; - char_u *kw; - syn_opt_arg_T syn_opt_arg; -*************** -*** 4724,4732 **** - if (rest != NULL) - { - syn_id = syn_check_group(arg, (int)(group_name_end - arg)); -! -! /* allocate a buffer, for removing the backslashes in the keyword */ -! keyword_copy = alloc((unsigned)STRLEN(rest) + 1); - if (keyword_copy != NULL) - { - syn_opt_arg.flags = 0; ---- 4738,4746 ---- - if (rest != NULL) - { - syn_id = syn_check_group(arg, (int)(group_name_end - arg)); -! if (syn_id != 0) -! /* allocate a buffer, for removing backslashes in the keyword */ -! keyword_copy = alloc((unsigned)STRLEN(rest) + 1); - if (keyword_copy != NULL) - { - syn_opt_arg.flags = 0; -*************** -*** 5133,5139 **** - (item == ITEM_SKIP) ? SPTYPE_SKIP : SPTYPE_END; - SYN_ITEMS(curwin->w_s)[idx].sp_flags |= syn_opt_arg.flags; - SYN_ITEMS(curwin->w_s)[idx].sp_syn.id = syn_id; -! SYN_ITEMS(curwin->w_s)[idx].sp_syn.inc_tag = current_syn_inc_tag; - SYN_ITEMS(curwin->w_s)[idx].sp_syn_match_id = - ppp->pp_matchgroup_id; - #ifdef FEAT_CONCEAL ---- 5147,5154 ---- - (item == ITEM_SKIP) ? SPTYPE_SKIP : SPTYPE_END; - SYN_ITEMS(curwin->w_s)[idx].sp_flags |= syn_opt_arg.flags; - SYN_ITEMS(curwin->w_s)[idx].sp_syn.id = syn_id; -! SYN_ITEMS(curwin->w_s)[idx].sp_syn.inc_tag = -! current_syn_inc_tag; - SYN_ITEMS(curwin->w_s)[idx].sp_syn_match_id = - ppp->pp_matchgroup_id; - #ifdef FEAT_CONCEAL -*************** -*** 5426,5431 **** ---- 5441,5454 ---- - curwin->w_s->b_syn_clusters.ga_growsize = 10; - } - -+ len = curwin->w_s->b_syn_clusters.ga_len; -+ if (len >= MAX_CLUSTER_ID) -+ { -+ EMSG((char_u *)_("E848: Too many syntax clusters")); -+ vim_free(name); -+ return 0; -+ } -+ - /* - * Make room for at least one other cluster entry. - */ -*************** -*** 5434,5440 **** - vim_free(name); - return 0; - } -- len = curwin->w_s->b_syn_clusters.ga_len; - - vim_memset(&(SYN_CLSTR(curwin->w_s)[len]), 0, sizeof(syn_cluster_T)); - SYN_CLSTR(curwin->w_s)[len].scl_name = name; ---- 5457,5462 ---- -*************** -*** 5476,5483 **** - - if (rest != NULL) - { -! scl_id = syn_check_cluster(arg, (int)(group_name_end - arg)) -! - SYNID_CLUSTER; - - for (;;) - { ---- 5498,5507 ---- - - if (rest != NULL) - { -! scl_id = syn_check_cluster(arg, (int)(group_name_end - arg)); -! if (scl_id == 0) -! return; -! scl_id -= SYNID_CLUSTER; - - for (;;) - { -*************** -*** 5516,5522 **** - if (got_clstr) - { - redraw_curbuf_later(SOME_VALID); -! syn_stack_free_all(curwin->w_s); /* Need to recompute all syntax. */ - } - } - ---- 5540,5546 ---- - if (got_clstr) - { - redraw_curbuf_later(SOME_VALID); -! syn_stack_free_all(curwin->w_s); /* Need to recompute all. */ - } - } - -*************** -*** 8972,8977 **** ---- 8996,9008 ---- - highlight_ga.ga_growsize = 10; - } - -+ if (highlight_ga.ga_len >= MAX_SYNID) -+ { -+ EMSG(_("E849: Too many syntax groups")); -+ vim_free(name); -+ return 0; -+ } -+ - /* - * Make room for at least one other syntax_highlight entry. - */ -*** ../vim-7.3.147/src/version.c 2011-04-01 13:05:37.000000000 +0200 ---- src/version.c 2011-04-01 14:26:44.000000000 +0200 -*************** -*** 716,717 **** ---- 716,719 ---- - { /* Add new patch number below this line */ -+ /**/ -+ 148, - /**/ - --- -BLACK KNIGHT: None shall pass. -ARTHUR: I have no quarrel with you, brave Sir knight, but I must cross - this bridge. -BLACK KNIGHT: Then you shall die. - "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD - - /// 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 /// |