Mercurial > hg > index.cgi
comparison lwlink/output.c @ 425:9f0448022f1f
Fix address overflows in SREC and IHEX file formats
Thanks to hider <stego@satx.rr.com> for pointing out an overflow that caused
16 bit addresses to be output as 5 hex digits in cases where an address
counter wrapped. Simply mask the addresses down to 16 bits.
author | William Astle <lost@l-w.ca> |
---|---|
date | Thu, 03 Nov 2016 21:36:17 -0600 |
parents | 55c1f9a321e9 |
children | 1744f2d1a821 |
comparison
equal
deleted
inserted
replaced
424:3aad0ff3c3be | 425:9f0448022f1f |
---|---|
196 while (remainingcodebytes) | 196 while (remainingcodebytes) |
197 { | 197 { |
198 recdlen = (SRECLEN>remainingcodebytes)?remainingcodebytes:SRECLEN; | 198 recdlen = (SRECLEN>remainingcodebytes)?remainingcodebytes:SRECLEN; |
199 recsum = recdlen + 3; | 199 recsum = recdlen + 3; |
200 codeaddr = recaddr - sectlist[sn].ptr -> loadaddress; | 200 codeaddr = recaddr - sectlist[sn].ptr -> loadaddress; |
201 fprintf(of, "S1%02X%04X", recdlen + 3, recaddr); | 201 fprintf(of, "S1%02X%04X", recdlen + 3, recaddr & 0xffff); |
202 for (i = 0; i < recdlen; i++) | 202 for (i = 0; i < recdlen; i++) |
203 { | 203 { |
204 fprintf(of, "%02X", sectcode[codeaddr+i]); | 204 fprintf(of, "%02X", sectcode[codeaddr+i]); |
205 recsum += sectcode[codeaddr+i]; | 205 recsum += sectcode[codeaddr+i]; |
206 } | 206 } |