1
0
Fork 0
mirror of https://github.com/marcrobledo/RomPatcher.js.git synced 2025-06-27 16:25:54 +00:00

fixed a potential bug while creating patches in some specific scenarios

This commit is contained in:
Marc Robledo 2018-04-27 21:06:44 +02:00
parent 5ea4024aaf
commit eb40a592b5
6 changed files with 37 additions and 31 deletions

20
ips.js
View file

@ -1,4 +1,4 @@
/* IPS module for RomPatcher.js v20171022 - Marc Robledo 2016-2017 - http://www.marcrobledo.com/license */
/* IPS module for RomPatcher.js v20180427 - Marc Robledo 2016-2018 - http://www.marcrobledo.com/license */
/* File format specification: http://www.smwiki.net/wiki/IPS_file_format */
var MAX_IPS_SIZE=16777216;
@ -146,8 +146,13 @@ function readIPSFile(file){
function createIPSFromFiles(original, modified){
tempFile=new IPS();
if(modified.fileSize<original.fileSize)
if(modified.fileSize<original.fileSize){
tempFile.truncate=modified.fileSize;
}else if(modified.fileSize>original.fileSize){
var originalTemp=new MarcBinFile(modified.fileSize);
originalTemp.writeBytes(0, original.readBytes(0, original.fileSize));
original=originalTemp;
}
var seek=0;
while(seek<modified.fileSize){
@ -162,11 +167,14 @@ function createIPSFromFiles(original, modified){
/* find difference in next 6 bytes (in order to save space) */
var nearbyDifference=true;
while(nearbyDifference){
var seekStart=6;
while(seek+seekStart>modified.fileSize){
seekStart--;
if(seek+6>modified.fileSize){
var finalSeek=modified.fileSize-seek-1;
length+=finalSeek;
seek+=finalSeek;
break;
}
for(var i=seekStart;i>0 && nearbyDifference;i--){
for(var i=6;i>0 && nearbyDifference;i--){
var bc1=original.readByte(seek+i);
var bc2=modified.readByte(seek+i);