add vector length check for read_file_ functions.#1606
Open
gguyver wants to merge 3 commits intotidyverse:mainfrom
Open
add vector length check for read_file_ functions.#1606gguyver wants to merge 3 commits intotidyverse:mainfrom
gguyver wants to merge 3 commits intotidyverse:mainfrom
Conversation
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Fixes #1590
@tinarozsos and I have worked on this.
read_file()andread_file_raw()both cause a segmentation fault (crashing R) when reading an empty raw vector. This issue does not arise when using other types of empty vector because those are caught and errored by other aspects of the function before reaching the relevant code. Nor does the behaviour arise when using a non-empty raw vector (e.g.raw(1)). There are potentially two issues here: 1) the code reaches a point where it attempts to access unowned memory; 2) the C code doesn't catch that the memory is unowned and still tries to access it. We address the first issue.Because all the affected functions use
datasource()to dispatch to the relevant function, we add a simple check for a vector size greater than 0, also providing an informative error message. We also add a couple of tests for this behaviour.We hope this is helpful :).