diff options
Diffstat (limited to 'data/vim/patches/8.1.0642')
-rw-r--r-- | data/vim/patches/8.1.0642 | 164 |
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 /// |