mirror of
git://slackware.nl/current.git
synced 2025-02-15 08:50:09 +01:00
![Patrick J Volkerding](/assets/img/avatar_default.png)
Mon Apr 25 13:37:00 UTC 2011 Slackware 13.37 x86_64 stable is released! Thanks to everyone who pitched in on this release: the Slackware team, the folks producing upstream code, and linuxquestions.org for providing a great forum for collaboration and testing. The ISOs are off to be replicated, a 6 CD-ROM 32-bit set and a dual-sided 32-bit/64-bit x86/x86_64 DVD. Please consider supporting the Slackware project by picking up a copy from store.slackware.com. We're taking pre-orders now, and offer a discount if you sign up for a subscription. As always, thanks to the Slackware community for testing, suggestions, and feedback. :-) Have fun!
252 lines
7.4 KiB
Text
252 lines
7.4 KiB
Text
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 ///
|