Merge pull request #12501 from liamwhite/ips
ips_layer: prevent out of bounds access with offset exceeding module size
This commit is contained in:
		@@ -73,6 +73,9 @@ VirtualFile PatchIPS(const VirtualFile& in, const VirtualFile& ips) {
 | 
			
		||||
        return nullptr;
 | 
			
		||||
 | 
			
		||||
    auto in_data = in->ReadAllBytes();
 | 
			
		||||
    if (in_data.size() == 0) {
 | 
			
		||||
        return nullptr;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    std::vector<u8> temp(type == IPSFileType::IPS ? 3 : 4);
 | 
			
		||||
    u64 offset = 5; // After header
 | 
			
		||||
@@ -88,6 +91,10 @@ VirtualFile PatchIPS(const VirtualFile& in, const VirtualFile& ips) {
 | 
			
		||||
        else
 | 
			
		||||
            real_offset = (temp[0] << 16) | (temp[1] << 8) | temp[2];
 | 
			
		||||
 | 
			
		||||
        if (real_offset > in_data.size()) {
 | 
			
		||||
            return nullptr;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        u16 data_size{};
 | 
			
		||||
        if (ips->ReadObject(&data_size, offset) != sizeof(u16))
 | 
			
		||||
            return nullptr;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user