diff options
author | James McCoy <jamessan@jamessan.com> | 2021-06-12 14:05:41 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2021-06-12 14:05:41 +0200 |
commit | 6654ca702ca64c99965efcad3243ea5f95473252 (patch) | |
tree | 803d5ba55f78d7ea9a9bb4b4d7ed4cb155641d25 | |
parent | 0b71955552c4b18f1853c1769ca64d696f8b60c1 (diff) | |
download | vim-git-6654ca702ca64c99965efcad3243ea5f95473252.tar.gz |
patch 8.2.2981: recovery test is not run on big-endian systemsv8.2.2981
Problem: Recovery test is not run on big-endian systems.
Solution: Make it work on big-endian systems. (James McCoy, closes #8368)
-rw-r--r-- | src/testdir/test_recover.vim | 193 | ||||
-rw-r--r-- | src/version.c | 2 |
2 files changed, 98 insertions, 97 deletions
diff --git a/src/testdir/test_recover.vim b/src/testdir/test_recover.vim index 0df2082e3..2db662f01 100644 --- a/src/testdir/test_recover.vim +++ b/src/testdir/test_recover.vim @@ -198,103 +198,102 @@ func Test_recover_corrupted_swap_file() let b = readblob(sn) let save_b = copy(b) bw! - " Run these tests only on little-endian systems. These tests fail on a - " big-endian system (IBM S390x system). - if b[1008:1011] == 0z33323130 - \ && b[4096:4097] == 0z7470 - \ && b[8192:8193] == 0z6164 - - " clear the B0_MAGIC_LONG field - let b[1008:1011] = 0z00000000 - call writefile(b, sn) - let msg = execute('recover Xfile1') - call assert_match('the file has been damaged', msg) - call assert_equal('Xfile1', @%) - call assert_equal([''], getline(1, '$')) - bw! - - " reduce the page size - let b = copy(save_b) - let b[12:15] = 0z00010000 - call writefile(b, sn) - let msg = execute('recover Xfile1') - call assert_match('page size is smaller than minimum value', msg) - call assert_equal('Xfile1', @%) - call assert_equal([''], getline(1, '$')) - bw! - - " clear the pointer ID - let b = copy(save_b) - let b[4096:4097] = 0z0000 - call writefile(b, sn) - call assert_fails('recover Xfile1', 'E310:') - call assert_equal('Xfile1', @%) - call assert_equal([''], getline(1, '$')) - bw! - - " set the number of pointers in a pointer block to zero - let b = copy(save_b) - let b[4098:4099] = 0z0000 - call writefile(b, sn) - call assert_fails('recover Xfile1', 'E312:') - call assert_equal('Xfile1', @%) - call assert_equal(['???EMPTY BLOCK'], getline(1, '$')) - bw! - - " set the block number in a pointer entry to a negative number - let b = copy(save_b) - let b[4104:4111] = 0z00000000.00000080 - call writefile(b, sn) - call assert_fails('recover Xfile1', 'E312:') - call assert_equal('Xfile1', @%) - call assert_equal(['???LINES MISSING'], getline(1, '$')) - bw! - - " clear the data block ID - let b = copy(save_b) - let b[8192:8193] = 0z0000 - call writefile(b, sn) - call assert_fails('recover Xfile1', 'E312:') - call assert_equal('Xfile1', @%) - call assert_equal(['???BLOCK MISSING'], getline(1, '$')) - bw! - - " set the number of lines in the data block to zero - let b = copy(save_b) - let b[8208:8211] = 0z00000000 - call writefile(b, sn) - call assert_fails('recover Xfile1', 'E312:') - call assert_equal('Xfile1', @%) - call assert_equal(['??? from here until ???END lines may have been inserted/deleted', - \ '???END'], getline(1, '$')) - bw! - - " use an invalid text start for the lines in a data block - let b = copy(save_b) - let b[8216:8219] = 0z00000000 - call writefile(b, sn) - call assert_fails('recover Xfile1', 'E312:') - call assert_equal('Xfile1', @%) - call assert_equal(['???'], getline(1, '$')) - bw! - - " use an incorrect text end (db_txt_end) for the data block - let b = copy(save_b) - let b[8204:8207] = 0z80000000 - call writefile(b, sn) - call assert_fails('recover Xfile1', 'E312:') - call assert_equal('Xfile1', @%) - call assert_equal(['??? from here until ???END lines may be messed up', '', - \ '???END'], getline(1, '$')) - bw! - - " remove the data block - let b = copy(save_b) - call writefile(b[:8191], sn) - call assert_fails('recover Xfile1', 'E312:') - call assert_equal('Xfile1', @%) - call assert_equal(['???MANY LINES MISSING'], getline(1, '$')) - endif + + " Not all fields are written in a system-independent manner. Detect whether + " the test is running on a little or big-endian system, so the correct + " corruption values can be set. + let little_endian = b[1008:1015] == 0z33323130.00000000 + + " clear the B0_MAGIC_LONG field + let b[1008:1015] = 0z0000000000000000 + call writefile(b, sn) + let msg = execute('recover Xfile1') + call assert_match('the file has been damaged', msg) + call assert_equal('Xfile1', @%) + call assert_equal([''], getline(1, '$')) + bw! + + " reduce the page size + let b = copy(save_b) + let b[12:15] = 0z00010000 + call writefile(b, sn) + let msg = execute('recover Xfile1') + call assert_match('page size is smaller than minimum value', msg) + call assert_equal('Xfile1', @%) + call assert_equal([''], getline(1, '$')) + bw! + + " clear the pointer ID + let b = copy(save_b) + let b[4096:4097] = 0z0000 + call writefile(b, sn) + call assert_fails('recover Xfile1', 'E310:') + call assert_equal('Xfile1', @%) + call assert_equal([''], getline(1, '$')) + bw! + + " set the number of pointers in a pointer block to zero + let b = copy(save_b) + let b[4098:4099] = 0z0000 + call writefile(b, sn) + call assert_fails('recover Xfile1', 'E312:') + call assert_equal('Xfile1', @%) + call assert_equal(['???EMPTY BLOCK'], getline(1, '$')) + bw! + + " set the block number in a pointer entry to a negative number + let b = copy(save_b) + let b[4104:4111] = little_endian ? 0z00000000.00000080 : 0z80000000.00000000 + call writefile(b, sn) + call assert_fails('recover Xfile1', 'E312:') + call assert_equal('Xfile1', @%) + call assert_equal(['???LINES MISSING'], getline(1, '$')) + bw! + + " clear the data block ID + let b = copy(save_b) + let b[8192:8193] = 0z0000 + call writefile(b, sn) + call assert_fails('recover Xfile1', 'E312:') + call assert_equal('Xfile1', @%) + call assert_equal(['???BLOCK MISSING'], getline(1, '$')) + bw! + + " set the number of lines in the data block to zero + let b = copy(save_b) + let b[8208:8215] = 0z00000000.00000000 + call writefile(b, sn) + call assert_fails('recover Xfile1', 'E312:') + call assert_equal('Xfile1', @%) + call assert_equal(['??? from here until ???END lines may have been inserted/deleted', + \ '???END'], getline(1, '$')) + bw! + + " use an invalid text start for the lines in a data block + let b = copy(save_b) + let b[8216:8219] = 0z00000000 + call writefile(b, sn) + call assert_fails('recover Xfile1', 'E312:') + call assert_equal('Xfile1', @%) + call assert_equal(['???'], getline(1, '$')) + bw! + + " use an incorrect text end (db_txt_end) for the data block + let b = copy(save_b) + let b[8204:8207] = little_endian ? 0z80000000 : 0z00000080 + call writefile(b, sn) + call assert_fails('recover Xfile1', 'E312:') + call assert_equal('Xfile1', @%) + call assert_equal(['??? from here until ???END lines may be messed up', '', + \ '???END'], getline(1, '$')) + bw! + + " remove the data block + let b = copy(save_b) + call writefile(b[:8191], sn) + call assert_fails('recover Xfile1', 'E312:') + call assert_equal('Xfile1', @%) + call assert_equal(['???MANY LINES MISSING'], getline(1, '$')) bw! call delete(sn) diff --git a/src/version.c b/src/version.c index ac5cc997b..15ee76aed 100644 --- a/src/version.c +++ b/src/version.c @@ -751,6 +751,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 2981, +/**/ 2980, /**/ 2979, |