Comment 2 for bug 1475250

Revision history for this message
Taihsiang Ho (taihsiangho) wrote :

in this case,
len is negative so the program does not begin to extract data in the while loop.

cdrkit-1.1.11/genisoimage/diag/isoinfo.c

 631 extract_file(struct iso_directory_record *idr)
 632 {
 633 int extent, len, tlen;
 634 unsigned char buff[2048];
 635
 636 #if defined(__CYGWIN32__) || defined(__CYGWIN__) || defined(__EMX__) || defined(__DJGPP__)
 637 setmode(fileno(stdout), O_BINARY);
 638 #endif
 639
 640 extent = isonum_733((unsigned char *)idr->extent);
 641 len = isonum_733((unsigned char *)idr->size);
 642
 643 while (len > 0) {
 644 #ifdef USE_SCG
 645 readsecs(extent - sector_offset, buff, ISO_BLOCKS(sizeof (buff)));
 646 tlen = (len > sizeof (buff) ? sizeof (buff) : len);
 647 #else
 648 lseek(fileno(infile), ((off_t)(extent - sector_offset)) << 11, SEEK_SET);
 649 tlen = (len > sizeof (buff) ? sizeof (buff) : len);
 650 read(fileno(infile), buff, tlen);
 651 #endif
 652 len -= tlen;
 653 extent++;
 654 write(STDOUT_FILENO, buff, tlen); /* FIXME: check return value */
 655 }
 656 }

(gdb) print len
$1 = -1565868032