Mercurial > vim
comparison src/undo.c @ 6128:3aa37ad2c4ed v7.4.402
updated for version 7.4.402
Problem: Test 72 crashes under certain conditions. (Kazunobu Kuriyama)
Solution: Clear the whole bufinfo_T early.
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Tue, 12 Aug 2014 20:14:33 +0200 |
parents | 18ac55444b37 |
children | 0242c27e40e1 |
comparison
equal
deleted
inserted
replaced
6127:e280391e57f2 | 6128:3aa37ad2c4ed |
---|---|
927 #ifdef FEAT_CRYPT | 927 #ifdef FEAT_CRYPT |
928 static int | 928 static int |
929 undo_flush(bi) | 929 undo_flush(bi) |
930 bufinfo_T *bi; | 930 bufinfo_T *bi; |
931 { | 931 { |
932 if (bi->bi_used > 0) | 932 if (bi->bi_buffer != NULL && bi->bi_used > 0) |
933 { | 933 { |
934 crypt_encode_inplace(bi->bi_state, bi->bi_buffer, bi->bi_used); | 934 crypt_encode_inplace(bi->bi_state, bi->bi_buffer, bi->bi_used); |
935 if (fwrite(bi->bi_buffer, bi->bi_used, (size_t)1, bi->bi_fp) != 1) | 935 if (fwrite(bi->bi_buffer, bi->bi_used, (size_t)1, bi->bi_fp) != 1) |
936 return FAIL; | 936 return FAIL; |
937 bi->bi_used = 0; | 937 bi->bi_used = 0; |
1571 struct stat st_old; | 1571 struct stat st_old; |
1572 struct stat st_new; | 1572 struct stat st_new; |
1573 #endif | 1573 #endif |
1574 bufinfo_T bi; | 1574 bufinfo_T bi; |
1575 | 1575 |
1576 #ifdef FEAT_CRYPT | 1576 vim_memset(&bi, 0, sizeof(bi)); |
1577 bi.bi_state = NULL; | |
1578 bi.bi_buffer = NULL; | |
1579 #endif | |
1580 | 1577 |
1581 if (name == NULL) | 1578 if (name == NULL) |
1582 { | 1579 { |
1583 file_name = u_get_undo_file_name(buf->b_ffname, FALSE); | 1580 file_name = u_get_undo_file_name(buf->b_ffname, FALSE); |
1584 if (file_name == NULL) | 1581 if (file_name == NULL) |
1859 struct stat st_orig; | 1856 struct stat st_orig; |
1860 struct stat st_undo; | 1857 struct stat st_undo; |
1861 #endif | 1858 #endif |
1862 bufinfo_T bi; | 1859 bufinfo_T bi; |
1863 | 1860 |
1861 vim_memset(&bi, 0, sizeof(bi)); | |
1864 if (name == NULL) | 1862 if (name == NULL) |
1865 { | 1863 { |
1866 file_name = u_get_undo_file_name(curbuf->b_ffname, TRUE); | 1864 file_name = u_get_undo_file_name(curbuf->b_ffname, TRUE); |
1867 if (file_name == NULL) | 1865 if (file_name == NULL) |
1868 return; | 1866 return; |
1903 EMSG2(_("E822: Cannot open undo file for reading: %s"), file_name); | 1901 EMSG2(_("E822: Cannot open undo file for reading: %s"), file_name); |
1904 goto error; | 1902 goto error; |
1905 } | 1903 } |
1906 bi.bi_buf = curbuf; | 1904 bi.bi_buf = curbuf; |
1907 bi.bi_fp = fp; | 1905 bi.bi_fp = fp; |
1908 #ifdef FEAT_CRYPT | |
1909 bi.bi_state = NULL; | |
1910 bi.bi_buffer = NULL; | |
1911 #endif | |
1912 | 1906 |
1913 /* | 1907 /* |
1914 * Read the undo file header. | 1908 * Read the undo file header. |
1915 */ | 1909 */ |
1916 if (fread(magic_buf, UF_START_MAGIC_LEN, 1, fp) != 1 | 1910 if (fread(magic_buf, UF_START_MAGIC_LEN, 1, fp) != 1 |