summaryrefslogtreecommitdiff
path: root/data/vim/patches/8.1.0642
diff options
context:
space:
mode:
Diffstat (limited to 'data/vim/patches/8.1.0642')
-rw-r--r--data/vim/patches/8.1.0642164
1 files changed, 164 insertions, 0 deletions
diff --git a/data/vim/patches/8.1.0642 b/data/vim/patches/8.1.0642
new file mode 100644
index 000000000..40f7adc8f
--- /dev/null
+++ b/data/vim/patches/8.1.0642
@@ -0,0 +1,164 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0642
+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.0642
+Problem: swapinfo() leaks memory. (Christian Brabandt)
+Solution: Avoid allocating the strings twice.
+Files: src/memline.c, src/dict.c, src/proto/dict.pro
+
+
+*** ../vim-8.1.0641/src/memline.c 2018-12-25 23:15:41.795966567 +0100
+--- src/memline.c 2018-12-26 22:51:14.081259880 +0100
+***************
+*** 2055,2075 ****
+ if (read_eintr(fd, &b0, sizeof(b0)) == sizeof(b0))
+ {
+ if (ml_check_b0_id(&b0) == FAIL)
+! dict_add_string(d, "error",
+! vim_strsave((char_u *)"Not a swap file"));
+ else if (b0_magic_wrong(&b0))
+! dict_add_string(d, "error",
+! vim_strsave((char_u *)"Magic number mismatch"));
+ else
+ {
+ /* we have swap information */
+! dict_add_string(d, "version", vim_strnsave(b0.b0_version, 10));
+! dict_add_string(d, "user",
+! vim_strnsave(b0.b0_uname, B0_UNAME_SIZE));
+! dict_add_string(d, "host",
+! vim_strnsave(b0.b0_hname, B0_HNAME_SIZE));
+! dict_add_string(d, "fname",
+! vim_strnsave(b0.b0_fname, B0_FNAME_SIZE_ORG));
+
+ dict_add_number(d, "pid", char_to_long(b0.b0_pid));
+ dict_add_number(d, "mtime", char_to_long(b0.b0_mtime));
+--- 2055,2070 ----
+ if (read_eintr(fd, &b0, sizeof(b0)) == sizeof(b0))
+ {
+ if (ml_check_b0_id(&b0) == FAIL)
+! dict_add_string(d, "error", (char_u *)"Not a swap file");
+ else if (b0_magic_wrong(&b0))
+! dict_add_string(d, "error", (char_u *)"Magic number mismatch");
+ else
+ {
+ /* we have swap information */
+! dict_add_string_len(d, "version", b0.b0_version, 10);
+! dict_add_string_len(d, "user", b0.b0_uname, B0_UNAME_SIZE);
+! dict_add_string_len(d, "host", b0.b0_hname, B0_HNAME_SIZE);
+! dict_add_string_len(d, "fname", b0.b0_fname, B0_FNAME_SIZE_ORG);
+
+ dict_add_number(d, "pid", char_to_long(b0.b0_pid));
+ dict_add_number(d, "mtime", char_to_long(b0.b0_mtime));
+***************
+*** 2080,2091 ****
+ }
+ }
+ else
+! dict_add_string(d, "error",
+! vim_strsave((char_u *)"Cannot read file"));
+ close(fd);
+ }
+ else
+! dict_add_string(d, "error", vim_strsave((char_u *)"Cannot open file"));
+ }
+ #endif
+
+--- 2075,2085 ----
+ }
+ }
+ else
+! dict_add_string(d, "error", (char_u *)"Cannot read file");
+ close(fd);
+ }
+ else
+! dict_add_string(d, "error", (char_u *)"Cannot open file");
+ }
+ #endif
+
+*** ../vim-8.1.0641/src/dict.c 2018-12-21 16:04:16.312437516 +0100
+--- src/dict.c 2018-12-26 22:46:22.175314033 +0100
+***************
+*** 370,382 ****
+ int
+ dict_add_string(dict_T *d, char *key, char_u *str)
+ {
+ dictitem_T *item;
+
+ item = dictitem_alloc((char_u *)key);
+ if (item == NULL)
+ return FAIL;
+ item->di_tv.v_type = VAR_STRING;
+! item->di_tv.vval.v_string = str != NULL ? vim_strsave(str) : NULL;
+ if (dict_add(d, item) == FAIL)
+ {
+ dictitem_free(item);
+--- 370,402 ----
+ int
+ dict_add_string(dict_T *d, char *key, char_u *str)
+ {
++ return dict_add_string_len(d, key, str, -1);
++ }
++
++ /*
++ * Add a string entry to dictionary "d".
++ * "str" will be copied to allocated memory.
++ * When "len" is -1 use the whole string, otherwise only this many bytes.
++ * Returns FAIL when out of memory and when key already exists.
++ */
++ int
++ dict_add_string_len(dict_T *d, char *key, char_u *str, int len)
++ {
+ dictitem_T *item;
++ char_u *val = NULL;
+
+ item = dictitem_alloc((char_u *)key);
+ if (item == NULL)
+ return FAIL;
+ item->di_tv.v_type = VAR_STRING;
+! if (str != NULL)
+! {
+! if (len == -1)
+! val = vim_strsave(str);
+! else
+! val = vim_strnsave(str, len);
+! }
+! item->di_tv.vval.v_string = val;
+ if (dict_add(d, item) == FAIL)
+ {
+ dictitem_free(item);
+*** ../vim-8.1.0641/src/proto/dict.pro 2018-12-14 15:38:28.323597695 +0100
+--- src/proto/dict.pro 2018-12-26 22:46:26.863281096 +0100
+***************
+*** 15,20 ****
+--- 15,21 ----
+ int dict_add(dict_T *d, dictitem_T *item);
+ int dict_add_number(dict_T *d, char *key, varnumber_T nr);
+ int dict_add_string(dict_T *d, char *key, char_u *str);
++ int dict_add_string_len(dict_T *d, char *key, char_u *str, int len);
+ int dict_add_list(dict_T *d, char *key, list_T *list);
+ int dict_add_dict(dict_T *d, char *key, dict_T *dict);
+ long dict_len(dict_T *d);
+*** ../vim-8.1.0641/src/version.c 2018-12-26 22:04:35.494546386 +0100
+--- src/version.c 2018-12-26 22:56:06.859194439 +0100
+***************
+*** 801,802 ****
+--- 801,804 ----
+ { /* Add new patch number below this line */
++ /**/
++ 642,
+ /**/
+
+--
+"I simultaneously try to keep my head in the clouds and my feet on the
+ground. Sometimes it's a stretch, though." -- Larry Wall
+
+ /// 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 ///