Compilation of three bug fixes to text parser I recently made in the AGS project, around alternatives syntax:
1. Stop parsing when reaching end during alternatives skipping (causing an out-of-bounds memory read)
2. Correctly skip over multi-word alternatives (incorrect parsing of alternative lists)
3. Use dedicated function to identify word boundaries (affecting dash and apostrophe containing alternatives)
Upstream commits (release-3.6.1 branch):
1. 17f8ea2f0efadec7b3696d4ba51733f1cddc0772 (check for end of input not to go beyond)
2. e98315393a34629b8935fdee7bd725a8299f941c (fix multi-word alternative skipping)
3. 9b0ccbd04e36e757392b1fc744919c785310c57b (consistently check for word boundaries)
The example when this could happen:
Parser.Said("climb,get in bed");
where "climb", "get" and "bed" are dictionary words.
From upstream b633ca77076137e2402faa903f5b6fbcd3f4c3bc
In order to specify that they should be treated as signed
Some ports may treat an (unspecified) "char" as unsigned by default. Android does this for its ARM architectures and while we did fix this by enforcing -fsigned-char to its compiler, the issue may come up for other ports. Also it should be better to clarify in the engine when a variable is not actually storing string characters.
I've spotted and changed the most "safe" cases I could find for this. As far as I can tell, out of these, only the Outline field and fontoutline array could potentially be assigned valid negative values which would cause bugs for ports treating chars as unsigned.
This not only simplifies all the use of _t types to the
ScummVM equivalents, it gets rid of the int32 usage in
favor of just int, solving common type clashes with the
Amiga, for which int doesn't match int32