For grins, I tried loading up an SCI1 game (jones) in the search for more
warnings to fix. I found what look like an OB1 error:
[E] ABR: Array bounds read in vocab_get_words_sci1 {16 occurrences}
Reading 1 byte from 0x02b75234 (1 byte at 0x02b75234 illegal)
Address 0x02b75234 is 1 byte past the end of a 1100 byte block at
0x02b74de8
Address 0x02b75234 points to a malloc'd block in heap 0x02b40000
Thread ID: 0x328
Error location
vocab_get_words_sci1 [vocab.c:109]
currentwordpos = resource->data[seeker++]; /* Parts of
previous words may be re-used */
do {
=> c = resource->data[seeker++];
currentword[currentwordpos++] = c;
} while (c);
vocab_get_words [vocab.c:153]
if (!resource) {
fprintf(stderr,"SCI0: Could not find a main
vocabulary, trying SCI01.\n");
=> return vocab_get_words_sci1(word_counter); /* NOT
critical: SCI1 games and some demos don't have one! */
}
seeker = 52; /* vocab.000 starts with 26 16-bit pointers
which we don't use */
init_vocabulary [game.c:53]
script_init_engine [game.c:353]
init_gamestate [main.c:595]
main [main.c:849]
We're seeking one past the end of the data array. Maybe the currentwordpos
line shouldn't have the increment in it?
--
http://www.clock.org/~matt