mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-10-25 07:56:37 +00:00 
			
		
		
		
	Merge branch 'fix_vfs_lines_crash' into 'master'
Fix Lua vfs :lines() crash See merge request OpenMW/openmw!4488
This commit is contained in:
		
						commit
						96a05cc72f
					
				
					 2 changed files with 20 additions and 7 deletions
				
			
		|  | @ -189,10 +189,13 @@ namespace MWLua | |||
| 
 | ||||
|                 return seek(lua, self, std::ios_base::cur, off); | ||||
|             }); | ||||
|         handle["lines"] = [](sol::this_state lua, FileHandle& self) { | ||||
|             return sol::as_function([&lua, &self]() mutable { | ||||
|                 validateFile(self); | ||||
|                 return readLineFromFile(lua, self); | ||||
|         handle["lines"] = [](sol::this_state lua, sol::object self) { | ||||
|             if (!self.is<FileHandle*>()) | ||||
|                 throw std::runtime_error("self should be a file handle"); | ||||
|             return sol::as_function([lua, self]() -> sol::object { | ||||
|                 FileHandle* handle = self.as<FileHandle*>(); | ||||
|                 validateFile(*handle); | ||||
|                 return readLineFromFile(lua, *handle); | ||||
|             }); | ||||
|         }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -227,16 +227,18 @@ end | |||
| 
 | ||||
| local function testVFS() | ||||
|     local file = 'test_vfs_dir/lines.txt' | ||||
|     local nosuchfile = 'test_vfs_dir/nosuchfile' | ||||
|     testing.expectEqual(vfs.fileExists(file), true, 'lines.txt should exist') | ||||
|     testing.expectEqual(vfs.fileExists('test_vfs_dir/nosuchfile'), false, 'nosuchfile should not exist') | ||||
|     testing.expectEqual(vfs.fileExists(nosuchfile), false, 'nosuchfile should not exist') | ||||
| 
 | ||||
|     local expectedLines = { '1', '2', '', '4' } | ||||
|     local getLine = vfs.lines(file) | ||||
|     for _,v in pairs({ '1', '2', '', '4' }) do | ||||
|     for _,v in pairs(expectedLines) do | ||||
|         testing.expectEqual(getLine(), v) | ||||
|     end | ||||
|     testing.expectEqual(getLine(), nil, 'All lines should have been read') | ||||
|     local ok = pcall(function() | ||||
|         vfs.lines('test_vfs_dir/nosuchfile') | ||||
|         vfs.lines(nosuchfile) | ||||
|     end) | ||||
|     testing.expectEqual(ok, false, 'Should not be able to read lines from nonexistent file') | ||||
| 
 | ||||
|  | @ -259,6 +261,14 @@ local function testVFS() | |||
| 
 | ||||
|     testing.expectEqual(handle:close(), true, 'File should be closeable') | ||||
|     testing.expectEqual(vfs.type(handle), 'closed file', 'File should be closed') | ||||
| 
 | ||||
|     handle = vfs.open(nosuchfile) | ||||
|     testing.expectEqual(handle, nil, 'vfs.open should return nil on nonexistent files') | ||||
| 
 | ||||
|     getLine = vfs.open(file):lines() | ||||
|     for _,v in pairs(expectedLines) do | ||||
|         testing.expectEqual(getLine(), v) | ||||
|     end | ||||
| end | ||||
| 
 | ||||
| local function testCommitCrime() | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue