I don't have an example of mishandled script, but the logic looked wrong:
it could sometimes treat newlines as if they are spaces.
function old new delta
parse_stream 2788 2787 -1
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* i.e., at the previous line.
* We need to skip all whitespace before newlines.
*/
- if (ch != '\n') {
- /* It was whitespace, but not a newline.
- * Eat all whitespace.
- */
- for (;;) {
- next = i_peek(input);
- if (next != ' ' && next != '\t' && next != '\n')
- break; /* next char is not ws */
- ch = i_getch(input);
- }
- /* ch == last eaten whitespace char */
+ while (ch != '\n') {
+ next = i_peek(input);
+ if (next != ' ' && next != '\t' && next != '\n')
+ break; /* next char is not ws */
+ ch = i_getch(input);
}
+ /* ch == last eaten whitespace char */
#endif
if (done_word(&dest, &ctx)) {
goto parse_error;