Module Name: src Committed By: rillig Date: Wed Aug 24 22:09:41 UTC 2022
Modified Files: src/usr.bin/make: var.c src/usr.bin/make/unit-tests: Makefile varparse-errors.exp varparse-errors.mk Log Message: make: prevent future out-of-bounds errors when parsing expressions A modifier in an expression ends not only at the next ':' or at the closing '}' or ')', but also at the end of the string. Previously, testing for the end of the string had been done separately, which was error-prone since 2006-05-11, when indirect modifiers were introduced. Since then, it was possible that the string terminator '\0' was accidentally skipped in cases where the loop condition only tested for the ending character. When parsing indirect modifiers, the ending character is indeed '\0', but when parsing direct modifiers, it is '}' or ')'. A welcome side effect is that in the case of unclosed expressions such as '${VAR:Modifier', the amount of error messages is reduced from 2 or 3 to only 1. The removed error messages were wrong and thus confusing anyway. To generate a diff of this commit: cvs rdiff -u -r1.1031 -r1.1032 src/usr.bin/make/var.c cvs rdiff -u -r1.319 -r1.320 src/usr.bin/make/unit-tests/Makefile cvs rdiff -u -r1.6 -r1.7 src/usr.bin/make/unit-tests/varparse-errors.exp \ src/usr.bin/make/unit-tests/varparse-errors.mk Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.