[stdlib] Fix input()
segfaults on EOF
#3919
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
pressing
ctrl-d
with no input wheninput()
is called causes mojo to crash becauseread_until_delimiter()
doesn't check the return value of the C functiongetdelim()
. it assumesgetdelim()
always succeeds and so, in the case of an error, it blindly creates aStringRef
with its length set to the return value - 1 (so the length is -2 in this case). thisStringRef
is then passed toString()
which in turn passes theStringRef
tomemcpy()
with a count of -2 and ultimately crashing mojo.this pr adds a check in
read_until_delimiter()
to check ifgetdelim()
failed and raise an error if it does, along with a test to ensureread_until_delimiter()
continues to behave as it should.related issue: #3908
closes: #3908