summaryrefslogtreecommitdiffstats
path: root/source/ap/vim/patches/7.3.109
diff options
context:
space:
mode:
Diffstat (limited to 'source/ap/vim/patches/7.3.109')
-rw-r--r--source/ap/vim/patches/7.3.109266
1 files changed, 266 insertions, 0 deletions
diff --git a/source/ap/vim/patches/7.3.109 b/source/ap/vim/patches/7.3.109
new file mode 100644
index 000000000..ce35fb0ad
--- /dev/null
+++ b/source/ap/vim/patches/7.3.109
@@ -0,0 +1,266 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.109
+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.109
+Problem: Processing new Esperanto spell file fails and crashes Vim.
+ (Dominique Pelle)
+Solution: When running out of memory give an error. Handle '?' in
+ COMPOUNDRULE properly.
+Files: src/spell.c
+
+
+*** ../vim-7.3.108/src/spell.c 2010-12-17 18:06:00.000000000 +0100
+--- src/spell.c 2011-02-01 13:43:52.000000000 +0100
+***************
+*** 3634,3640 ****
+ }
+
+ /* Add all flags to "sl_compallflags". */
+! if (vim_strchr((char_u *)"+*[]/", c) == NULL
+ && !byte_in_str(slang->sl_compallflags, c))
+ {
+ *ap++ = c;
+--- 3634,3640 ----
+ }
+
+ /* Add all flags to "sl_compallflags". */
+! if (vim_strchr((char_u *)"?*+[]/", c) == NULL
+ && !byte_in_str(slang->sl_compallflags, c))
+ {
+ *ap++ = c;
+***************
+*** 3664,3670 ****
+ /* Copy flag to "sl_comprules", unless we run into a wildcard. */
+ if (crp != NULL)
+ {
+! if (c == '+' || c == '*')
+ {
+ vim_free(slang->sl_comprules);
+ slang->sl_comprules = NULL;
+--- 3664,3670 ----
+ /* Copy flag to "sl_comprules", unless we run into a wildcard. */
+ if (crp != NULL)
+ {
+! if (c == '?' || c == '+' || c == '*')
+ {
+ vim_free(slang->sl_comprules);
+ slang->sl_comprules = NULL;
+***************
+*** 3682,3689 ****
+ }
+ else /* normal char, "[abc]" and '*' are copied as-is */
+ {
+! if (c == '+' || c == '~')
+! *pp++ = '\\'; /* "a+" becomes "a\+" */
+ #ifdef FEAT_MBYTE
+ if (enc_utf8)
+ pp += mb_char2bytes(c, pp);
+--- 3682,3689 ----
+ }
+ else /* normal char, "[abc]" and '*' are copied as-is */
+ {
+! if (c == '?' || c == '+' || c == '~')
+! *pp++ = '\\'; /* "a?" becomes "a\?", "a+" becomes "a\+" */
+ #ifdef FEAT_MBYTE
+ if (enc_utf8)
+ pp += mb_char2bytes(c, pp);
+***************
+*** 4951,4956 ****
+--- 4951,4958 ----
+
+ sblock_T *si_blocks; /* memory blocks used */
+ long si_blocks_cnt; /* memory blocks allocated */
++ int si_did_emsg; /* TRUE when ran out of memory */
++
+ long si_compress_cnt; /* words to add before lowering
+ compression limit */
+ wordnode_T *si_first_free; /* List of nodes that have been freed during
+***************
+*** 5477,5497 ****
+ }
+ else if (is_aff_rule(items, itemcnt, "COMPOUNDRULE", 2))
+ {
+! /* Concatenate this string to previously defined ones, using a
+! * slash to separate them. */
+! l = (int)STRLEN(items[1]) + 1;
+! if (compflags != NULL)
+! l += (int)STRLEN(compflags) + 1;
+! p = getroom(spin, l, FALSE);
+! if (p != NULL)
+ {
+ if (compflags != NULL)
+ {
+! STRCPY(p, compflags);
+! STRCAT(p, "/");
+ }
+- STRCAT(p, items[1]);
+- compflags = p;
+ }
+ }
+ else if (is_aff_rule(items, itemcnt, "COMPOUNDWORDMAX", 2)
+--- 5479,5503 ----
+ }
+ else if (is_aff_rule(items, itemcnt, "COMPOUNDRULE", 2))
+ {
+! /* Don't use the first rule if it is a number. */
+! if (compflags != NULL || *skipdigits(items[1]) != NUL)
+ {
++ /* Concatenate this string to previously defined ones,
++ * using a slash to separate them. */
++ l = (int)STRLEN(items[1]) + 1;
+ if (compflags != NULL)
++ l += (int)STRLEN(compflags) + 1;
++ p = getroom(spin, l, FALSE);
++ if (p != NULL)
+ {
+! if (compflags != NULL)
+! {
+! STRCPY(p, compflags);
+! STRCAT(p, "/");
+! }
+! STRCAT(p, items[1]);
+! compflags = p;
+ }
+ }
+ }
+ else if (is_aff_rule(items, itemcnt, "COMPOUNDWORDMAX", 2)
+***************
+*** 6291,6297 ****
+
+ for (p = compflags; *p != NUL; )
+ {
+! if (vim_strchr((char_u *)"/*+[]", *p) != NULL)
+ /* Copy non-flag characters directly. */
+ *tp++ = *p++;
+ else
+--- 6297,6303 ----
+
+ for (p = compflags; *p != NUL; )
+ {
+! if (vim_strchr((char_u *)"/?*+[]", *p) != NULL)
+ /* Copy non-flag characters directly. */
+ *tp++ = *p++;
+ else
+***************
+*** 6320,6326 ****
+ {
+ check_renumber(spin);
+ id = spin->si_newcompID--;
+! } while (vim_strchr((char_u *)"/+*[]\\-^", id) != NULL);
+ ci->ci_newID = id;
+ hash_add(&aff->af_comp, ci->ci_key);
+ }
+--- 6326,6332 ----
+ {
+ check_renumber(spin);
+ id = spin->si_newcompID--;
+! } while (vim_strchr((char_u *)"/?*+[]\\-^", id) != NULL);
+ ci->ci_newID = id;
+ hash_add(&aff->af_comp, ci->ci_key);
+ }
+***************
+*** 7364,7373 ****
+
+ if (bl == NULL || bl->sb_used + len > SBLOCKSIZE)
+ {
+! /* Allocate a block of memory. This is not freed until much later. */
+! bl = (sblock_T *)alloc_clear((unsigned)(sizeof(sblock_T) + SBLOCKSIZE));
+ if (bl == NULL)
+ return NULL;
+ bl->sb_next = spin->si_blocks;
+ spin->si_blocks = bl;
+ bl->sb_used = 0;
+--- 7370,7390 ----
+
+ if (bl == NULL || bl->sb_used + len > SBLOCKSIZE)
+ {
+! if (len >= SBLOCKSIZE)
+! bl = NULL;
+! else
+! /* Allocate a block of memory. It is not freed until much later. */
+! bl = (sblock_T *)alloc_clear(
+! (unsigned)(sizeof(sblock_T) + SBLOCKSIZE));
+ if (bl == NULL)
++ {
++ if (!spin->si_did_emsg)
++ {
++ EMSG(_("E845: Insufficient memory, word list will be incomplete"));
++ spin->si_did_emsg = TRUE;
++ }
+ return NULL;
++ }
+ bl->sb_next = spin->si_blocks;
+ spin->si_blocks = bl;
+ bl->sb_used = 0;
+***************
+*** 7382,7387 ****
+--- 7399,7405 ----
+
+ /*
+ * Make a copy of a string into memory allocated with getroom().
++ * Returns NULL when out of memory.
+ */
+ static char_u *
+ getroom_save(spin, s)
+***************
+*** 7416,7421 ****
+--- 7434,7440 ----
+
+ /*
+ * Allocate the root of a word tree.
++ * Returns NULL when out of memory.
+ */
+ static wordnode_T *
+ wordtree_alloc(spin)
+***************
+*** 7700,7705 ****
+--- 7719,7725 ----
+ /*
+ * Get a wordnode_T, either from the list of previously freed nodes or
+ * allocate a new one.
++ * Returns NULL when out of memory.
+ */
+ static wordnode_T *
+ get_wordnode(spin)
+***************
+*** 7717,7723 ****
+ --spin->si_free_count;
+ }
+ #ifdef SPELL_PRINTTREE
+! n->wn_nr = ++spin->si_wordnode_nr;
+ #endif
+ return n;
+ }
+--- 7737,7744 ----
+ --spin->si_free_count;
+ }
+ #ifdef SPELL_PRINTTREE
+! if (n != NULL)
+! n->wn_nr = ++spin->si_wordnode_nr;
+ #endif
+ return n;
+ }
+*** ../vim-7.3.108/src/version.c 2011-02-01 13:48:47.000000000 +0100
+--- src/version.c 2011-02-01 13:56:38.000000000 +0100
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 109,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+174. You know what a listserv is.
+
+ /// 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 ///