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 }