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