Check for empty section0 and CNMT prior to install
This commit is contained in:
		
							parent
							
								
									0ca7b8269a
								
							
						
					
					
						commit
						f66e3181dc
					
				@ -566,12 +566,13 @@ bool RegisteredCache::RemoveExistingEntry(u64 title_id) {
 | 
				
			|||||||
        return res;
 | 
					        return res;
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // If an update exists, remove
 | 
					    // If an entry exists in the registered cache, remove it
 | 
				
			||||||
    if (HasEntry(title_id, ContentRecordType::Meta)) {
 | 
					    if (HasEntry(title_id, ContentRecordType::Meta)) {
 | 
				
			||||||
        LOG_INFO(Loader,
 | 
					        LOG_INFO(Loader,
 | 
				
			||||||
                 "Previous Update (v{}) for title_id={:016X} detected! Attempting to remove...",
 | 
					                 "Previously installed entry (v{}) for title_id={:016X} detected! "
 | 
				
			||||||
 | 
					                 "Attempting to remove...",
 | 
				
			||||||
                 GetEntryVersion(title_id).value_or(0), title_id);
 | 
					                 GetEntryVersion(title_id).value_or(0), title_id);
 | 
				
			||||||
        // Get all the ncas associated with the current update CNMT and delete them
 | 
					        // Get all the ncas associated with the current CNMT and delete them
 | 
				
			||||||
        const auto meta_old_id =
 | 
					        const auto meta_old_id =
 | 
				
			||||||
            GetNcaIDFromMetadata(title_id, ContentRecordType::Meta).value_or(NcaID{});
 | 
					            GetNcaIDFromMetadata(title_id, ContentRecordType::Meta).value_or(NcaID{});
 | 
				
			||||||
        const auto program_id =
 | 
					        const auto program_id =
 | 
				
			||||||
@ -612,7 +613,22 @@ InstallResult RegisteredCache::InstallEntry(const NSP& nsp, bool overwrite_if_ex
 | 
				
			|||||||
    const auto meta_id_raw = (*meta_iter)->GetName().substr(0, 32);
 | 
					    const auto meta_id_raw = (*meta_iter)->GetName().substr(0, 32);
 | 
				
			||||||
    const auto meta_id = Common::HexStringToArray<16>(meta_id_raw);
 | 
					    const auto meta_id = Common::HexStringToArray<16>(meta_id_raw);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if ((*meta_iter)->GetSubdirectories().empty()) {
 | 
				
			||||||
 | 
					        LOG_ERROR(Loader,
 | 
				
			||||||
 | 
					                  "The file you are attempting to install does not contain a section0 within the "
 | 
				
			||||||
 | 
					                  "metadata NCA and is therefore malformed. Verify that the file is valid.");
 | 
				
			||||||
 | 
					        return InstallResult::ErrorMetaFailed;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const auto section0 = (*meta_iter)->GetSubdirectories()[0];
 | 
					    const auto section0 = (*meta_iter)->GetSubdirectories()[0];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (section0->GetFiles().empty()) {
 | 
				
			||||||
 | 
					        LOG_ERROR(Loader,
 | 
				
			||||||
 | 
					                  "The file you are attempting to install does not contain a CNMT within the "
 | 
				
			||||||
 | 
					                  "metadata NCA and is therefore malformed. Verify that the file is valid.");
 | 
				
			||||||
 | 
					        return InstallResult::ErrorMetaFailed;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const auto cnmt_file = section0->GetFiles()[0];
 | 
					    const auto cnmt_file = section0->GetFiles()[0];
 | 
				
			||||||
    const CNMT cnmt(cnmt_file);
 | 
					    const CNMT cnmt(cnmt_file);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user