]> granicus.if.org Git - vim/commitdiff
updated for version 7.3.161 v7.3.161
authorBram Moolenaar <Bram@vim.org>
Mon, 11 Apr 2011 19:35:11 +0000 (21:35 +0200)
committerBram Moolenaar <Bram@vim.org>
Mon, 11 Apr 2011 19:35:11 +0000 (21:35 +0200)
Problem:    Items on the stack may be too big.
Solution:   Make items static or allocate them.

14 files changed:
src/eval.c
src/ex_cmds.c
src/ex_cmds2.c
src/ex_docmd.c
src/fileio.c
src/hardcopy.c
src/main.c
src/netbeans.c
src/quickfix.c
src/spell.c
src/tag.c
src/version.c
src/vim.h
src/xxd/xxd.c

index 45d3cbf68071035e7e68111854b23fcb14fe726d..c940109aaf9df1ce7bba6d9173a5cd2f29307903 100644 (file)
@@ -11100,18 +11100,22 @@ f_getcwd(argvars, rettv)
     typval_T   *argvars UNUSED;
     typval_T   *rettv;
 {
-    char_u     cwd[MAXPATHL];
+    char_u     *cwd;
 
     rettv->v_type = VAR_STRING;
-    if (mch_dirname(cwd, MAXPATHL) == FAIL)
-       rettv->vval.v_string = NULL;
-    else
+    rettv->vval.v_string = NULL;
+    cwd = alloc(MAXPATHL);
+    if (cwd != NULL)
     {
-       rettv->vval.v_string = vim_strsave(cwd);
+       if (mch_dirname(cwd, MAXPATHL) != FAIL)
+       {
+           rettv->vval.v_string = vim_strsave(cwd);
 #ifdef BACKSLASH_IN_FILENAME
-       if (rettv->vval.v_string != NULL)
-           slash_adjust(rettv->vval.v_string);
+           if (rettv->vval.v_string != NULL)
+               slash_adjust(rettv->vval.v_string);
 #endif
+       }
+       vim_free(cwd);
     }
 }
 
@@ -14938,6 +14942,9 @@ f_resolve(argvars, rettv)
     typval_T   *rettv;
 {
     char_u     *p;
+#ifdef HAVE_READLINK
+    char_u     *buf = NULL;
+#endif
 
     p = get_tv_string(&argvars[0]);
 #ifdef FEAT_SHORTCUT
@@ -14953,7 +14960,6 @@ f_resolve(argvars, rettv)
 #else
 # ifdef HAVE_READLINK
     {
-       char_u  buf[MAXPATHL + 1];
        char_u  *cpy;
        int     len;
        char_u  *remain = NULL;
@@ -14981,6 +14987,10 @@ f_resolve(argvars, rettv)
            q[-1] = NUL;
        }
 
+       buf = alloc(MAXPATHL + 1);
+       if (buf == NULL)
+           goto fail;
+
        for (;;)
        {
            for (;;)
@@ -15124,6 +15134,7 @@ f_resolve(argvars, rettv)
 
 #ifdef HAVE_READLINK
 fail:
+    vim_free(buf);
 #endif
     rettv->v_type = VAR_STRING;
 }
@@ -17604,18 +17615,22 @@ f_tagfiles(argvars, rettv)
     typval_T   *argvars UNUSED;
     typval_T   *rettv;
 {
-    char_u     fname[MAXPATHL + 1];
+    char_u     *fname;
     tagname_T  tn;
     int                first;
 
     if (rettv_list_alloc(rettv) == FAIL)
        return;
+    fname = alloc(MAXPATHL);
+    if (fname == NULL)
+       return;
 
     for (first = TRUE; ; first = FALSE)
        if (get_tagfname(&tn, first, fname) == FAIL
                || list_append_string(rettv->vval.v_list, fname, -1) == FAIL)
            break;
     tagname_free(&tn);
+    vim_free(fname);
 }
 
 /*
index 3b2557efc9555c3121e4fa6a762ca55a31fdfac7..fba7aa101ed7868bc3e534c31279c062af111839 100644 (file)
@@ -2777,7 +2777,7 @@ check_overwrite(eap, buf, fname, ffname, other)
 #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
            if (p_confirm || cmdmod.confirm)
            {
-               char_u  buff[IOSIZE];
+               char_u  buff[DIALOG_MSG_SIZE];
 
                dialog_msg(buff, _("Overwrite existing file \"%s\"?"), fname);
                if (vim_dialog_yesno(VIM_QUESTION, NULL, buff, 2) != VIM_YES)
@@ -2795,7 +2795,7 @@ check_overwrite(eap, buf, fname, ffname, other)
        /* For ":w! filename" check that no swap file exists for "filename". */
        if (other && !emsg_silent)
        {
-           char_u      dir[MAXPATHL];
+           char_u      *dir;
            char_u      *p;
            int         r;
            char_u      *swapname;
@@ -2806,20 +2806,29 @@ check_overwrite(eap, buf, fname, ffname, other)
             * Use 'shortname' of the current buffer, since there is no buffer
             * for the written file. */
            if (*p_dir == NUL)
+           {
+               dir = alloc(5);
+               if (dir == NULL)
+                   return FAIL;
                STRCPY(dir, ".");
+           }
            else
            {
+               dir = alloc(MAXPATHL);
+               if (dir == NULL)
+                   return FAIL;
                p = p_dir;
                copy_option_part(&p, dir, MAXPATHL, ",");
            }
            swapname = makeswapname(fname, ffname, curbuf, dir);
+           vim_free(dir);
            r = vim_fexists(swapname);
            if (r)
            {
 #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
                if (p_confirm || cmdmod.confirm)
                {
-                   char_u      buff[IOSIZE];
+                   char_u      buff[DIALOG_MSG_SIZE];
 
                    dialog_msg(buff,
                            _("Swap file \"%s\" exists, overwrite anyway?"),
@@ -2969,7 +2978,7 @@ check_readonly(forceit, buf)
 #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
        if ((p_confirm || cmdmod.confirm) && buf->b_fname != NULL)
        {
-           char_u      buff[IOSIZE];
+           char_u      buff[DIALOG_MSG_SIZE];
 
            if (buf->b_p_ro)
                dialog_msg(buff, _("'readonly' option is set for \"%s\".\nDo you wish to write anyway?"),
index 54e4f07b811677d05e4fb3747b432a937cf76d09..78460fbf69ea94eb76be96447f6c2d230dbd4697 100644 (file)
@@ -1492,7 +1492,7 @@ dialog_changed(buf, checkall)
     buf_T      *buf;
     int                checkall;       /* may abandon all changed buffers */
 {
-    char_u     buff[IOSIZE];
+    char_u     buff[DIALOG_MSG_SIZE];
     int                ret;
     buf_T      *buf2;
 
index ae9bb0fcf3f987824a386907a65a8dacbeaa2b88..b67c00be5e15db4f58221d5d7d0b070c0ba293a0 100644 (file)
@@ -5093,14 +5093,14 @@ check_more(message, forceit)
 #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
            if ((p_confirm || cmdmod.confirm) && curbuf->b_fname != NULL)
            {
-               char_u  buff[IOSIZE];
+               char_u  buff[DIALOG_MSG_SIZE];
 
                if (n == 1)
                    vim_strncpy(buff,
                            (char_u *)_("1 more file to edit.  Quit anyway?"),
-                                                                 IOSIZE - 1);
+                                                        DIALOG_MSG_SIZE - 1);
                else
-                   vim_snprintf((char *)buff, IOSIZE,
+                   vim_snprintf((char *)buff, DIALOG_MSG_SIZE,
                              _("%d more files to edit.  Quit anyway?"), n);
                if (vim_dialog_yesno(VIM_QUESTION, NULL, buff, 1) == VIM_YES)
                    return OK;
@@ -8926,35 +8926,42 @@ ex_mkrc(eap)
                failed = TRUE;
            if (eap->cmdidx == CMD_mksession)
            {
-               char_u dirnow[MAXPATHL];        /* current directory */
+               char_u *dirnow;  /* current directory */
 
-               /*
-                * Change to session file's dir.
-                */
-               if (mch_dirname(dirnow, MAXPATHL) == FAIL
-                                           || mch_chdir((char *)dirnow) != 0)
-                   *dirnow = NUL;
-               if (*dirnow != NUL && (ssop_flags & SSOP_SESDIR))
-               {
-                   if (vim_chdirfile(fname) == OK)
-                       shorten_fnames(TRUE);
-               }
-               else if (*dirnow != NUL
-                       && (ssop_flags & SSOP_CURDIR) && globaldir != NULL)
+               dirnow = alloc(MAXPATHL);
+               if (dirnow == NULL)
+                   failed = TRUE;
+               else
                {
-                   if (mch_chdir((char *)globaldir) == 0)
-                       shorten_fnames(TRUE);
-               }
+                   /*
+                    * Change to session file's dir.
+                    */
+                   if (mch_dirname(dirnow, MAXPATHL) == FAIL
+                                           || mch_chdir((char *)dirnow) != 0)
+                       *dirnow = NUL;
+                   if (*dirnow != NUL && (ssop_flags & SSOP_SESDIR))
+                   {
+                       if (vim_chdirfile(fname) == OK)
+                           shorten_fnames(TRUE);
+                   }
+                   else if (*dirnow != NUL
+                          && (ssop_flags & SSOP_CURDIR) && globaldir != NULL)
+                   {
+                       if (mch_chdir((char *)globaldir) == 0)
+                           shorten_fnames(TRUE);
+                   }
 
-               failed |= (makeopens(fd, dirnow) == FAIL);
+                   failed |= (makeopens(fd, dirnow) == FAIL);
 
-               /* restore original dir */
-               if (*dirnow != NUL && ((ssop_flags & SSOP_SESDIR)
+                   /* restore original dir */
+                   if (*dirnow != NUL && ((ssop_flags & SSOP_SESDIR)
                        || ((ssop_flags & SSOP_CURDIR) && globaldir != NULL)))
-               {
-                   if (mch_chdir((char *)dirnow) != 0)
-                       EMSG(_(e_prev_dir));
-                   shorten_fnames(TRUE);
+                   {
+                       if (mch_chdir((char *)dirnow) != 0)
+                           EMSG(_(e_prev_dir));
+                       shorten_fnames(TRUE);
+                   }
+                   vim_free(dirnow);
                }
            }
            else
@@ -8985,10 +8992,15 @@ ex_mkrc(eap)
        else if (eap->cmdidx == CMD_mksession)
        {
            /* successful session write - set this_session var */
-           char_u      tbuf[MAXPATHL];
+           char_u      *tbuf;
 
-           if (vim_FullName(fname, tbuf, MAXPATHL, FALSE) == OK)
-               set_vim_var_string(VV_THIS_SESSION, tbuf, -1);
+           tbuf = alloc(MAXPATHL);
+           if (tbuf != NULL)
+           {
+               if (vim_FullName(fname, tbuf, MAXPATHL, FALSE) == OK)
+                   set_vim_var_string(VV_THIS_SESSION, tbuf, -1);
+               vim_free(tbuf);
+           }
        }
 #endif
 #ifdef MKSESSION_NL
@@ -10677,7 +10689,7 @@ ses_arglist(fd, cmd, gap, fullname, flagp)
     unsigned   *flagp;
 {
     int                i;
-    char_u     buf[MAXPATHL];
+    char_u     *buf = NULL;
     char_u     *s;
 
     if (gap->ga_len == 0)
@@ -10692,11 +10704,19 @@ ses_arglist(fd, cmd, gap, fullname, flagp)
        {
            if (fullname)
            {
-               (void)vim_FullName(s, buf, MAXPATHL, FALSE);
-               s = buf;
+               buf = alloc(MAXPATHL);
+               if (buf != NULL)
+               {
+                   (void)vim_FullName(s, buf, MAXPATHL, FALSE);
+                   s = buf;
+               }
            }
            if (fputs(" ", fd) < 0 || ses_put_fname(fd, s, flagp) == FAIL)
+           {
+               vim_free(buf);
                return FAIL;
+           }
+           vim_free(buf);
        }
     }
     return put_eol(fd);
@@ -10925,7 +10945,7 @@ ex_viminfo(eap)
 
 #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG) || defined(PROTO)
 /*
- * Make a dialog message in "buff[IOSIZE]".
+ * Make a dialog message in "buff[DIALOG_MSG_SIZE]".
  * "format" must contain "%s".
  */
     void
@@ -10936,7 +10956,7 @@ dialog_msg(buff, format, fname)
 {
     if (fname == NULL)
        fname = (char_u *)_("Untitled");
-    vim_snprintf((char *)buff, IOSIZE, format, fname);
+    vim_snprintf((char *)buff, DIALOG_MSG_SIZE, format, fname);
 }
 #endif
 
index a0b75572af1fe67b916644139301d776681a10af..62adf72dc50f1b9336cd34a4e666e3a1aaca8b0f 100644 (file)
@@ -6023,15 +6023,19 @@ make_bom(buf, name)
 shorten_fname1(full_path)
     char_u     *full_path;
 {
-    char_u     dirname[MAXPATHL];
+    char_u     *dirname;
     char_u     *p = full_path;
 
+    dirname = alloc(MAXPATHL);
+    if (dirname == NULL)
+       return full_path;
     if (mch_dirname(dirname, MAXPATHL) == OK)
     {
        p = shorten_fname(full_path, dirname);
        if (p == NULL || *p == NUL)
            p = full_path;
     }
+    vim_free(dirname);
     return p;
 }
 #endif
index 2310484f92cd84fb096294bb232af0828699b9d8..f7733a10867a27f8315940cd06436d05962325a0 100644 (file)
@@ -1759,7 +1759,12 @@ prt_find_resource(name, resource)
     char       *name;
     struct prt_ps_resource_S *resource;
 {
-    char_u     buffer[MAXPATHL + 1];
+    char_u     *buffer;
+    int                retval;
+
+    buffer = alloc(MAXPATHL + 1);
+    if (buffer == NULL)
+       return FALSE;
 
     vim_strncpy(resource->name, (char_u *)name, 63);
     /* Look for named resource file in runtimepath */
@@ -1768,9 +1773,11 @@ prt_find_resource(name, resource)
     vim_strcat(buffer, (char_u *)name, MAXPATHL);
     vim_strcat(buffer, (char_u *)".ps", MAXPATHL);
     resource->filename[0] = NUL;
-    return (do_in_runtimepath(buffer, FALSE, prt_resource_name,
+    retval = (do_in_runtimepath(buffer, FALSE, prt_resource_name,
                                                           resource->filename)
            && resource->filename[0] != NUL);
+    vim_free(buffer);
+    return retval;
 }
 
 /* PS CR and LF characters have platform independent values */
@@ -2848,15 +2855,33 @@ mch_print_begin(psettings)
     double      right;
     double      top;
     double      bottom;
-    struct prt_ps_resource_S res_prolog;
-    struct prt_ps_resource_S res_encoding;
+    struct prt_ps_resource_S *res_prolog;
+    struct prt_ps_resource_S *res_encoding;
     char       buffer[256];
     char_u      *p_encoding;
     char_u     *p;
 #ifdef FEAT_MBYTE
-    struct prt_ps_resource_S res_cidfont;
-    struct prt_ps_resource_S res_cmap;
+    struct prt_ps_resource_S *res_cidfont;
+    struct prt_ps_resource_S *res_cmap;
 #endif
+    int                retval = FALSE;
+
+    res_prolog = (struct prt_ps_resource_S *)
+                                     alloc(sizeof(struct prt_ps_resource_S));
+    res_encoding = (struct prt_ps_resource_S *)
+                                     alloc(sizeof(struct prt_ps_resource_S));
+#ifdef FEAT_MBYTE
+    res_cidfont = (struct prt_ps_resource_S *)
+                                     alloc(sizeof(struct prt_ps_resource_S));
+    res_cmap = (struct prt_ps_resource_S *)
+                                     alloc(sizeof(struct prt_ps_resource_S));
+#endif
+    if (res_prolog == NULL || res_encoding == NULL
+#ifdef FEAT_MBYTE
+           || res_cidfont == NULL || res_cmap == NULL
+#endif
+       )
+       goto theend;
 
     /*
      * PS DSC Header comments - no PS code!
@@ -2932,27 +2957,27 @@ mch_print_begin(psettings)
 #endif
 
     /* Search for external resources VIM supplies */
-    if (!prt_find_resource("prolog", &res_prolog))
+    if (!prt_find_resource("prolog", res_prolog))
     {
        EMSG(_("E456: Can't find PostScript resource file \"prolog.ps\""));
        return FALSE;
     }
-    if (!prt_open_resource(&res_prolog))
+    if (!prt_open_resource(res_prolog))
        return FALSE;
-    if (!prt_check_resource(&res_prolog, PRT_PROLOG_VERSION))
+    if (!prt_check_resource(res_prolog, PRT_PROLOG_VERSION))
        return FALSE;
 #ifdef FEAT_MBYTE
     if (prt_out_mbyte)
     {
        /* Look for required version of multi-byte printing procset */
-       if (!prt_find_resource("cidfont", &res_cidfont))
+       if (!prt_find_resource("cidfont", res_cidfont))
        {
            EMSG(_("E456: Can't find PostScript resource file \"cidfont.ps\""));
            return FALSE;
        }
-       if (!prt_open_resource(&res_cidfont))
+       if (!prt_open_resource(res_cidfont))
            return FALSE;
-       if (!prt_check_resource(&res_cidfont, PRT_CID_PROLOG_VERSION))
+       if (!prt_check_resource(res_cidfont, PRT_CID_PROLOG_VERSION))
            return FALSE;
     }
 #endif
@@ -2968,7 +2993,7 @@ mch_print_begin(psettings)
 #endif
        p_encoding = enc_skip(p_penc);
        if (*p_encoding == NUL
-               || !prt_find_resource((char *)p_encoding, &res_encoding))
+               || !prt_find_resource((char *)p_encoding, res_encoding))
        {
            /* 'printencoding' not set or not supported - find alternate */
 #ifdef FEAT_MBYTE
@@ -2977,13 +3002,13 @@ mch_print_begin(psettings)
            p_encoding = enc_skip(p_enc);
            props = enc_canon_props(p_encoding);
            if (!(props & ENC_8BIT)
-                   || !prt_find_resource((char *)p_encoding, &res_encoding))
+                   || !prt_find_resource((char *)p_encoding, res_encoding))
                /* 8-bit 'encoding' is not supported */
 #endif
                {
                /* Use latin1 as default printing encoding */
                p_encoding = (char_u *)"latin1";
-               if (!prt_find_resource((char *)p_encoding, &res_encoding))
+               if (!prt_find_resource((char *)p_encoding, res_encoding))
                {
                    EMSG2(_("E456: Can't find PostScript resource file \"%s.ps\""),
                            p_encoding);
@@ -2991,7 +3016,7 @@ mch_print_begin(psettings)
                }
            }
        }
-       if (!prt_open_resource(&res_encoding))
+       if (!prt_open_resource(res_encoding))
            return FALSE;
        /* For the moment there are no checks on encoding resource files to
         * perform */
@@ -3005,13 +3030,13 @@ mch_print_begin(psettings)
        if (prt_use_courier)
        {
            /* Include ASCII range encoding vector */
-           if (!prt_find_resource(prt_ascii_encoding, &res_encoding))
+           if (!prt_find_resource(prt_ascii_encoding, res_encoding))
            {
                EMSG2(_("E456: Can't find PostScript resource file \"%s.ps\""),
                                                          prt_ascii_encoding);
                return FALSE;
            }
-           if (!prt_open_resource(&res_encoding))
+           if (!prt_open_resource(res_encoding))
                return FALSE;
            /* For the moment there are no checks on encoding resource files to
             * perform */
@@ -3034,44 +3059,44 @@ mch_print_begin(psettings)
     if (prt_out_mbyte && prt_custom_cmap)
     {
        /* Find user supplied CMap */
-       if (!prt_find_resource(prt_cmap, &res_cmap))
+       if (!prt_find_resource(prt_cmap, res_cmap))
        {
            EMSG2(_("E456: Can't find PostScript resource file \"%s.ps\""),
                                                                    prt_cmap);
            return FALSE;
        }
-       if (!prt_open_resource(&res_cmap))
+       if (!prt_open_resource(res_cmap))
            return FALSE;
     }
 #endif
 
     /* List resources supplied */
-    STRCPY(buffer, res_prolog.title);
+    STRCPY(buffer, res_prolog->title);
     STRCAT(buffer, " ");
-    STRCAT(buffer, res_prolog.version);
+    STRCAT(buffer, res_prolog->version);
     prt_dsc_resources("DocumentSuppliedResources", "procset", buffer);
 #ifdef FEAT_MBYTE
     if (prt_out_mbyte)
     {
-       STRCPY(buffer, res_cidfont.title);
+       STRCPY(buffer, res_cidfont->title);
        STRCAT(buffer, " ");
-       STRCAT(buffer, res_cidfont.version);
+       STRCAT(buffer, res_cidfont->version);
        prt_dsc_resources(NULL, "procset", buffer);
 
        if (prt_custom_cmap)
        {
-           STRCPY(buffer, res_cmap.title);
+           STRCPY(buffer, res_cmap->title);
            STRCAT(buffer, " ");
-           STRCAT(buffer, res_cmap.version);
+           STRCAT(buffer, res_cmap->version);
            prt_dsc_resources(NULL, "cmap", buffer);
        }
     }
     if (!prt_out_mbyte || prt_use_courier)
 #endif
     {
-       STRCPY(buffer, res_encoding.title);
+       STRCPY(buffer, res_encoding->title);
        STRCAT(buffer, " ");
-       STRCAT(buffer, res_encoding.version);
+       STRCAT(buffer, res_encoding->version);
        prt_dsc_resources(NULL, "encoding", buffer);
     }
     prt_dsc_requirements(prt_duplex, prt_tumble, prt_collate,
@@ -3114,15 +3139,15 @@ mch_print_begin(psettings)
     prt_dsc_noarg("BeginProlog");
 
     /* Add required procsets - NOTE: order is important! */
-    if (!prt_add_resource(&res_prolog))
+    if (!prt_add_resource(res_prolog))
        return FALSE;
 #ifdef FEAT_MBYTE
     if (prt_out_mbyte)
     {
        /* Add CID font procset, and any user supplied CMap */
-       if (!prt_add_resource(&res_cidfont))
+       if (!prt_add_resource(res_cidfont))
            return FALSE;
-       if (prt_custom_cmap && !prt_add_resource(&res_cmap))
+       if (prt_custom_cmap && !prt_add_resource(res_cmap))
            return FALSE;
     }
 #endif
@@ -3132,7 +3157,7 @@ mch_print_begin(psettings)
 #endif
        /* There will be only one Roman font encoding to be included in the PS
         * file. */
-       if (!prt_add_resource(&res_encoding))
+       if (!prt_add_resource(res_encoding))
            return FALSE;
 
     prt_dsc_noarg("EndProlog");
@@ -3248,7 +3273,17 @@ mch_print_begin(psettings)
     prt_dsc_noarg("EndSetup");
 
     /* Fail if any problems writing out to the PS file */
-    return !prt_file_error;
+    retval = !prt_file_error;
+
+theend:
+    vim_free(res_prolog);
+    vim_free(res_encoding);
+#ifdef FEAT_MBYTE
+    vim_free(res_cidfont);
+    vim_free(res_cmap);
+#endif
+
+    return retval;
 }
 
     void
index 0527a918db243b3af581c0aae10ae00953c05128..a296cd4482551f181f0d8405754ea380f0e4dc6f 100644 (file)
@@ -3814,7 +3814,7 @@ build_drop_cmd(filec, filev, tabs, sendReply)
     int                i;
     char_u     *inicmd = NULL;
     char_u     *p;
-    char_u     cwd[MAXPATHL];
+    char_u     *cwd;
 
     if (filec > 0 && filev[0][0] == '+')
     {
@@ -3827,15 +3827,23 @@ build_drop_cmd(filec, filev, tabs, sendReply)
        mainerr_arg_missing((char_u *)filev[-1]);
 
     /* Temporarily cd to the current directory to handle relative file names. */
+    cwd = alloc(MAXPATHL);
+    if (cwd == NULL)
+       return NULL;
     if (mch_dirname(cwd, MAXPATHL) != OK)
+    {
+       vim_free(cwd);
        return NULL;
-    if ((p = vim_strsave_escaped_ext(cwd,
+    }
+    p = vim_strsave_escaped_ext(cwd,
 #ifdef BACKSLASH_IN_FILENAME
                    "",  /* rem_backslash() will tell what chars to escape */
 #else
                    PATH_ESC_CHARS,
 #endif
-                   '\\', TRUE)) == NULL)
+                   '\\', TRUE);
+    vim_free(cwd);
+    if (p == NULL)
        return NULL;
     ga_init2(&ga, 1, 100);
     ga_concat(&ga, (char_u *)"<C-\\><C-N>:cd ");
index 874edf41c1f1cafccfb21c09b5f9178ee1cbbac7..5b9161d82b004dfeaf0e32fa74a37adf0e8f6d39 100644 (file)
@@ -2891,7 +2891,7 @@ netbeans_beval_cb(
     char_u     *text;
     linenr_T   lnum;
     int                col;
-    char       buf[MAXPATHL * 2 + 25];
+    char       *buf;
     char_u     *p;
 
     /* Don't do anything when 'ballooneval' is off, messages scrolled the
@@ -2905,15 +2905,20 @@ netbeans_beval_cb(
         * length. */
        if (text != NULL && text[0] != NUL && STRLEN(text) < MAXPATHL)
        {
-           p = nb_quote(text);
-           if (p != NULL)
+           buf = (char *)alloc(MAXPATHL * 2 + 25);
+           if (buf != NULL)
            {
-               vim_snprintf(buf, sizeof(buf),
-                                      "0:balloonText=%d \"%s\"\n", r_cmdno, p);
-               vim_free(p);
+               p = nb_quote(text);
+               if (p != NULL)
+               {
+                   vim_snprintf(buf, MAXPATHL * 2 + 25,
+                                    "0:balloonText=%d \"%s\"\n", r_cmdno, p);
+                   vim_free(p);
+               }
+               nbdebug(("EVT: %s", buf));
+               nb_send(buf, "netbeans_beval_cb");
+               vim_free(buf);
            }
-           nbdebug(("EVT: %s", buf));
-           nb_send(buf, "netbeans_beval_cb");
        }
        vim_free(text);
     }
index 82826b27cbadb0785ee90dc3b6d625a514322ff0..664b686bd7da82baa0eeedd53aa06c10afa30ba8 100644 (file)
@@ -3049,8 +3049,8 @@ ex_vimgrep(eap)
     int                flags = 0;
     colnr_T    col;
     long       tomatch;
-    char_u     dirname_start[MAXPATHL];
-    char_u     dirname_now[MAXPATHL];
+    char_u     *dirname_start = NULL;
+    char_u     *dirname_now = NULL;
     char_u     *target_dir = NULL;
 #ifdef FEAT_AUTOCMD
     char_u     *au_name =  NULL;
@@ -3128,6 +3128,11 @@ ex_vimgrep(eap)
        goto theend;
     }
 
+    dirname_start = alloc(MAXPATHL);
+    dirname_now = alloc(MAXPATHL);
+    if (dirname_start == NULL || dirname_now == NULL)
+       goto theend;
+
     /* Remember the current directory, because a BufRead autocommand that does
      * ":lcd %:p:h" changes the meaning of short path names. */
     mch_dirname(dirname_start, MAXPATHL);
@@ -3364,6 +3369,8 @@ ex_vimgrep(eap)
     }
 
 theend:
+    vim_free(dirname_now);
+    vim_free(dirname_start);
     vim_free(target_dir);
     vim_free(regmatch.regprog);
 }
index fc0d22d38e6d68aec52bf328e0aea22ba4998f7f..eade2f7c758a9c4c515519cc17de8cc12fe74373 100644 (file)
@@ -8590,7 +8590,7 @@ spell_make_sugfile(spin, wfname)
     spellinfo_T        *spin;
     char_u     *wfname;
 {
-    char_u     fname[MAXPATHL];
+    char_u     *fname = NULL;
     int                len;
     slang_T    *slang;
     int                free_slang = FALSE;
@@ -8654,6 +8654,9 @@ spell_make_sugfile(spin, wfname)
      * Write the .sug file.
      * Make the file name by changing ".spl" to ".sug".
      */
+    fname = alloc(MAXPATHL);
+    if (fname == NULL)
+       goto theend;
     vim_strncpy(fname, wfname, MAXPATHL - 1);
     len = (int)STRLEN(fname);
     fname[len - 2] = 'u';
@@ -8661,6 +8664,7 @@ spell_make_sugfile(spin, wfname)
     sug_write(spin, fname);
 
 theend:
+    vim_free(fname);
     if (free_slang)
        slang_free(slang);
     free_blocks(spin->si_blocks);
@@ -9106,8 +9110,8 @@ mkspell(fcount, fnames, ascii, overwrite, added_word)
     int                overwrite;          /* overwrite existing output file */
     int                added_word;         /* invoked through "zg" */
 {
-    char_u     fname[MAXPATHL];
-    char_u     wfname[MAXPATHL];
+    char_u     *fname = NULL;
+    char_u     *wfname;
     char_u     **innames;
     int                incount;
     afffile_T  *(afile[8]);
@@ -9135,6 +9139,10 @@ mkspell(fcount, fnames, ascii, overwrite, added_word)
     innames = &fnames[1];
     incount = fcount - 1;
 
+    wfname = alloc(MAXPATHL);
+    if (wfname == NULL)
+       return;
+
     if (fcount >= 1)
     {
        len = (int)STRLEN(fnames[0]);
@@ -9144,24 +9152,24 @@ mkspell(fcount, fnames, ascii, overwrite, added_word)
             * "path/en.latin1.add.spl". */
            innames = &fnames[0];
            incount = 1;
-           vim_snprintf((char *)wfname, sizeof(wfname), "%s.spl", fnames[0]);
+           vim_snprintf((char *)wfname, MAXPATHL, "%s.spl", fnames[0]);
        }
        else if (fcount == 1)
        {
            /* For ":mkspell path/vim" output file is "path/vim.latin1.spl". */
            innames = &fnames[0];
            incount = 1;
-           vim_snprintf((char *)wfname, sizeof(wfname), SPL_FNAME_TMPL,
+           vim_snprintf((char *)wfname, MAXPATHL, SPL_FNAME_TMPL,
                  fnames[0], spin.si_ascii ? (char_u *)"ascii" : spell_enc());
        }
        else if (len > 4 && STRCMP(fnames[0] + len - 4, ".spl") == 0)
        {
            /* Name ends in ".spl", use as the file name. */
-           vim_strncpy(wfname, fnames[0], sizeof(wfname) - 1);
+           vim_strncpy(wfname, fnames[0], MAXPATHL - 1);
        }
        else
            /* Name should be language, make the file name from it. */
-           vim_snprintf((char *)wfname, sizeof(wfname), SPL_FNAME_TMPL,
+           vim_snprintf((char *)wfname, MAXPATHL, SPL_FNAME_TMPL,
                  fnames[0], spin.si_ascii ? (char_u *)"ascii" : spell_enc());
 
        /* Check for .ascii.spl. */
@@ -9186,14 +9194,18 @@ mkspell(fcount, fnames, ascii, overwrite, added_word)
        if (!overwrite && mch_stat((char *)wfname, &st) >= 0)
        {
            EMSG(_(e_exists));
-           return;
+           goto theend;
        }
        if (mch_isdir(wfname))
        {
            EMSG2(_(e_isadir2), wfname);
-           return;
+           goto theend;
        }
 
+       fname = alloc(MAXPATHL);
+       if (fname == NULL)
+           goto theend;
+
        /*
         * Init the aff and dic pointers.
         * Get the region names if there are more than 2 arguments.
@@ -9209,7 +9221,7 @@ mkspell(fcount, fnames, ascii, overwrite, added_word)
                                                || innames[i][len - 3] != '_')
                {
                    EMSG2(_("E755: Invalid region in %s"), innames[i]);
-                   return;
+                   goto theend;
                }
                spin.si_region_name[i * 2] = TOLOWER_ASC(innames[i][len - 2]);
                spin.si_region_name[i * 2 + 1] =
@@ -9226,7 +9238,7 @@ mkspell(fcount, fnames, ascii, overwrite, added_word)
                || spin.si_prefroot == NULL)
        {
            free_blocks(spin.si_blocks);
-           return;
+           goto theend;
        }
 
        /* When not producing a .add.spl file clear the character table when
@@ -9247,7 +9259,7 @@ mkspell(fcount, fnames, ascii, overwrite, added_word)
            spin.si_conv.vc_type = CONV_NONE;
            spin.si_region = 1 << i;
 
-           vim_snprintf((char *)fname, sizeof(fname), "%s.aff", innames[i]);
+           vim_snprintf((char *)fname, MAXPATHL, "%s.aff", innames[i]);
            if (mch_stat((char *)fname, &st) >= 0)
            {
                /* Read the .aff file.  Will init "spin->si_conv" based on the
@@ -9258,7 +9270,7 @@ mkspell(fcount, fnames, ascii, overwrite, added_word)
                else
                {
                    /* Read the .dic file and store the words in the trees. */
-                   vim_snprintf((char *)fname, sizeof(fname), "%s.dic",
+                   vim_snprintf((char *)fname, MAXPATHL, "%s.dic",
                                                                  innames[i]);
                    if (spell_read_dic(&spin, fname, afile[i]) == FAIL)
                        error = TRUE;
@@ -9340,6 +9352,10 @@ mkspell(fcount, fnames, ascii, overwrite, added_word)
            spell_make_sugfile(&spin, wfname);
 
     }
+
+theend:
+    vim_free(fname);
+    vim_free(wfname);
 }
 
 /*
@@ -9392,7 +9408,7 @@ spell_add_word(word, len, bad, idx, undo)
     buf_T      *buf = NULL;
     int                new_spf = FALSE;
     char_u     *fname;
-    char_u     fnamebuf[MAXPATHL];
+    char_u     *fnamebuf = NULL;
     char_u     line[MAXWLEN * 2];
     long       fpos, fpos_next = 0;
     int                i;
@@ -9422,6 +9438,9 @@ spell_add_word(word, len, bad, idx, undo)
            EMSG2(_(e_notset), "spellfile");
            return;
        }
+       fnamebuf = alloc(MAXPATHL);
+       if (fnamebuf == NULL)
+           return;
 
        for (spf = curwin->w_s->b_p_spf, i = 1; *spf != NUL; ++i)
        {
@@ -9431,6 +9450,7 @@ spell_add_word(word, len, bad, idx, undo)
            if (*spf == NUL)
            {
                EMSGN(_("E765: 'spellfile' does not have %ld entries"), idx);
+               vim_free(fnamebuf);
                return;
            }
        }
@@ -9442,6 +9462,7 @@ spell_add_word(word, len, bad, idx, undo)
        if (buf != NULL && bufIsChanged(buf))
        {
            EMSG(_(e_bufloaded));
+           vim_free(fnamebuf);
            return;
        }
 
@@ -9536,6 +9557,7 @@ spell_add_word(word, len, bad, idx, undo)
 
        redraw_all_later(SOME_VALID);
     }
+    vim_free(fnamebuf);
 }
 
 /*
@@ -9544,7 +9566,7 @@ spell_add_word(word, len, bad, idx, undo)
     static void
 init_spellfile()
 {
-    char_u     buf[MAXPATHL];
+    char_u     *buf;
     int                l;
     char_u     *fname;
     char_u     *rtp;
@@ -9554,6 +9576,10 @@ init_spellfile()
 
     if (*curwin->w_s->b_p_spl != NUL && curwin->w_s->b_langp.ga_len > 0)
     {
+       buf = alloc(MAXPATHL);
+       if (buf == NULL)
+           return;
+
        /* Find the end of the language name.  Exclude the region.  If there
         * is a path separator remember the start of the tail. */
        for (lend = curwin->w_s->b_p_spl; *lend != NUL
@@ -9597,7 +9623,8 @@ init_spellfile()
                                 "/%.*s", (int)(lend - lstart), lstart);
                }
                l = (int)STRLEN(buf);
-               fname = LANGP_ENTRY(curwin->w_s->b_langp, 0)->lp_slang->sl_fname;
+               fname = LANGP_ENTRY(curwin->w_s->b_langp, 0)
+                                                        ->lp_slang->sl_fname;
                vim_snprintf((char *)buf + l, MAXPATHL - l, ".%s.add",
                        fname != NULL
                          && strstr((char *)gettail(fname), ".ascii.") != NULL
@@ -9607,6 +9634,8 @@ init_spellfile()
            }
            aspath = FALSE;
        }
+
+       vim_free(buf);
     }
 }
 
index 774e2ba0da39be5e342deaa1068609140fbe0220..b38bff0998b6a338693f4ab391d46b2cf4f03617 100644 (file)
--- a/src/tag.c
+++ b/src/tag.c
@@ -775,17 +775,25 @@ do_tag(tag, type, count, forceit, verbose)
            {
                list_T  *list;
                char_u  tag_name[128 + 1];
-               char_u  fname[MAXPATHL + 1];
-               char_u  cmd[CMDBUFFSIZE + 1];
+               char_u  *fname;
+               char_u  *cmd;
 
                /*
                 * Add the matching tags to the location list for the current
                 * window.
                 */
 
+               fname = alloc(MAXPATHL + 1);
+               cmd = alloc(CMDBUFFSIZE + 1);
                list = list_alloc();
-               if (list == NULL)
+               if (list == NULL || fname == NULL || cmd == NULL)
+               {
+                   vim_free(cmd);
+                   vim_free(fname);
+                   if (list != NULL)
+                       list_free(list, TRUE);
                    goto end_do_tag;
+               }
 
                for (i = 0; i < num_matches; ++i)
                {
@@ -911,6 +919,8 @@ do_tag(tag, type, count, forceit, verbose)
                set_errorlist(curwin, list, ' ', IObuff);
 
                list_free(list, TRUE);
+               vim_free(fname);
+               vim_free(cmd);
 
                cur_match = 0;          /* Jump to the first tag */
            }
@@ -3777,8 +3787,9 @@ add_tag_field(dict, field_name, start, end)
     char_u  *start;            /* start of the value */
     char_u  *end;              /* after the value; can be NULL */
 {
-    char_u     buf[MAXPATHL];
+    char_u     *buf;
     int                len = 0;
+    int                retval;
 
     /* check that the field name doesn't exist yet */
     if (dict_find(dict, (char_u *)field_name, -1) != NULL)
@@ -3791,6 +3802,9 @@ add_tag_field(dict, field_name, start, end)
        }
        return FAIL;
     }
+    buf = alloc(MAXPATHL);
+    if (buf == NULL)
+       return FAIL;
     if (start != NULL)
     {
        if (end == NULL)
@@ -3800,12 +3814,14 @@ add_tag_field(dict, field_name, start, end)
                --end;
        }
        len = (int)(end - start);
-       if (len > (int)sizeof(buf) - 1)
-           len = sizeof(buf) - 1;
+       if (len > MAXPATHL - 1)
+           len = MAXPATHL - 1;
        vim_strncpy(buf, start, len);
     }
     buf[len] = NUL;
-    return dict_add_nr_str(dict, field_name, 0L, buf);
+    retval = dict_add_nr_str(dict, field_name, 0L, buf);
+    vim_free(buf);
+    return retval;
 }
 
 /*
index dce707b9e7ac8b2b63dd796088df9a4cb99af6a2..a1cbb94250f1e7337d502c39047a599fa3ffa30b 100644 (file)
@@ -714,6 +714,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    161,
 /**/
     160,
 /**/
index 24c1b16e7c55a790a837654a558575ad11927acd..95260a221f0ed951019f83b655a72e6c499f1a35 100644 (file)
--- a/src/vim.h
+++ b/src/vim.h
@@ -1435,6 +1435,8 @@ typedef UINT32_TYPEDEF UINT32_T;
 
 #define IOSIZE    (1024+1)     /* file i/o and sprintf buffer size */
 
+#define DIALOG_MSG_SIZE 1000   /* buffer size for dialog_msg() */
+
 #ifdef FEAT_MBYTE
 # define MSG_BUF_LEN 480       /* length of buffer for small messages */
 # define MSG_BUF_CLEN  (MSG_BUF_LEN / 6)    /* cell length (worst case: utf-8
index 4d843dd621ecf093c5ce33c532b46b7d0b5d63fb..85300dc9d0537af6b70b45af2ba3b317a93dc2cc 100644 (file)
@@ -476,7 +476,7 @@ main(argc, argv)
   int octspergrp = -1; /* number of octets grouped in output */
   int grplen;          /* total chars per octet group */
   long length = -1, n = 0, seekoff = 0;
-  char l[LLEN+1];
+  static char l[LLEN+1];  /* static because it may be too big for stack */
   char *pp;
 
 #ifdef AMIGA