# HG changeset patch # User Laurens Holst # Date 1733517937 -3600 # Fri Dec 06 21:45:37 2024 +0100 # Node ID ca46aa239baf38af758b3f0b9bd3bde6a705540e # Parent 94a3a0eb51f790b402f7ae6486bea09757ba91bf gunzip/neonlib: Update to latest. Fixes issue with decoder buffer overflow. diff --git a/.hgsubstate b/.hgsubstate --- a/.hgsubstate +++ b/.hgsubstate @@ -1,2 +1,2 @@ -28f2e980e128d9dc89a0641bc13dbd63aa5f935e lib/gunzip -f007b87ffb98263a47bf488fbafbaaa68239da8c lib/neonlib +7822e6e3f2dc98efe8c571dfd73042172d492e97 lib/gunzip +d30b04366fbd338ea986834315653980be450151 lib/neonlib diff --git a/src/Application.asm b/src/Application.asm --- a/src/Application.asm +++ b/src/Application.asm @@ -276,6 +276,8 @@ push ix call FileReader_class.New call FileReader_Construct + ld e,ixl + ld d,ixh push ix ld a,GZIP_CRC32 ? -1 : 0 call GzipArchive_class.New diff --git a/src/MappedBufferLoader.asm b/src/MappedBufferLoader.asm --- a/src/MappedBufferLoader.asm +++ b/src/MappedBufferLoader.asm @@ -39,7 +39,6 @@ push ix call MappedBufferLoader_GetWriter call Writer_FinishBlock - call MappedWriter_Destruct pop ix ret diff --git a/src/MappedReader.asm b/src/MappedReader.asm --- a/src/MappedReader.asm +++ b/src/MappedReader.asm @@ -55,7 +55,6 @@ or 80H ld (iy + MappedReader.super.bufferPosition),l ld (iy + MappedReader.super.bufferPosition + 1),a - ld (iy + MappedReader.super.fillPending),0 ld a,h rla rl e @@ -67,7 +66,7 @@ call c,MappedReader_ThrowAddressOutOfBounds ld (iy + MappedReader.positionSegmentIndex),e ld (iy + MappedReader.positionSegmentIndex + 1),d - ld h,(iy + MappedReader.super.bufferStart + 1) + ld h,(iy + MappedReader.super.bufferStart) call MappedBuffer_SelectSegment pop ix ret @@ -79,8 +78,9 @@ ld h,(iy + MappedReader.super.bufferPosition + 1) ld e,(iy + MappedReader.positionSegmentIndex) ld d,(iy + MappedReader.positionSegmentIndex + 1) - bit 0,(iy + MappedReader.super.fillPending) - call nz,FillPending + ld a,h + cp (iy + MappedReader.super.bufferEnd) + call nc,FillPending rlc h rlc h srl d @@ -91,8 +91,8 @@ rr h ret FillPending: - ld l,(iy + MappedReader.super.bufferStart) - ld h,(iy + MappedReader.super.bufferStart + 1) + ld l,0 + ld h,(iy + MappedReader.super.bufferStart) inc de ret ENDP @@ -157,7 +157,7 @@ ld c,e ld b,d call MappedReader_GetBuffer_IY - ld h,(iy + MappedReader.super.bufferStart + 1) + ld h,(iy + MappedReader.super.bufferStart) ld e,c ld d,b call MappedBuffer_SelectSegment diff --git a/src/MappedWriter.asm b/src/MappedWriter.asm --- a/src/MappedWriter.asm +++ b/src/MappedWriter.asm @@ -28,10 +28,6 @@ jr MappedWriter_AllocateNextSegment ; ix = this -MappedWriter_Destruct: equ Writer_Destruct -; jp Writer_Destruct - -; ix = this ; de <- buffer ; ix <- buffer MappedWriter_GetBuffer: @@ -53,8 +49,8 @@ pop ix pop de pop bc - ld l,(ix + MappedWriter.super.bufferEnd) - ld h,(ix + MappedWriter.super.bufferEnd + 1) + ld l,0 + ld h,(ix + MappedWriter.super.bufferEnd) and a sbc hl,de call c,System_ThrowException @@ -65,7 +61,7 @@ ; ix = this MappedWriter_AllocateNextSegment: - ld h,(ix + MappedWriter.super.bufferStart + 1) + ld h,(ix + MappedWriter.super.bufferStart) push ix push hl call MappedWriter_GetBuffer