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


Reply via email to