mirror of
https://github.com/red0124/ssp.git
synced 2025-01-23 04:55:20 +01:00
Fix resplit segmentation fault, fix issues when working with empty files
This commit is contained in:
parent
a7a97b3ba8
commit
956156b412
@ -37,6 +37,10 @@ public:
|
||||
: file_name_{file_name}, reader_{file_name_, delim} {
|
||||
if (reader_.file_) {
|
||||
read_line();
|
||||
if (eof_) {
|
||||
set_error_eof_reached();
|
||||
return;
|
||||
}
|
||||
if constexpr (ignore_header) {
|
||||
ignore_next();
|
||||
} else {
|
||||
|
@ -78,19 +78,17 @@ private:
|
||||
const std::string& delimiter = default_delimiter) {
|
||||
|
||||
// resplitting, continue from last slice
|
||||
if constexpr (!quote::enabled || !multiline::enabled) {
|
||||
if (split_data_.empty() || !unterminated_quote()) {
|
||||
if (!quote::enabled || !multiline::enabled || split_data_.empty() ||
|
||||
!unterminated_quote()) {
|
||||
set_error_invalid_resplit();
|
||||
return split_data_;
|
||||
}
|
||||
}
|
||||
|
||||
const auto [old_line, old_begin] = *std::prev(split_data_.end());
|
||||
size_t begin = old_begin - old_line - 1;
|
||||
|
||||
// safety measure
|
||||
if (new_size != -1 && static_cast<size_t>(new_size) < begin) {
|
||||
unterminated_quote_ = false;
|
||||
set_error_invalid_resplit();
|
||||
return split_data_;
|
||||
}
|
||||
|
@ -1099,7 +1099,6 @@ TEST_CASE("splitter test invalid splits") {
|
||||
char new_line[] = "some";
|
||||
c.resplit(new_line, strlen(new_line));
|
||||
CHECK_FALSE(s.valid());
|
||||
CHECK_FALSE(s.unterminated_quote());
|
||||
CHECK_FALSE(s.error_msg().empty());
|
||||
}
|
||||
|
||||
@ -1132,7 +1131,6 @@ TEST_CASE("splitter test invalid splits with exceptions") {
|
||||
// invalid resplit
|
||||
char new_line[] = "some";
|
||||
REQUIRE_EXCEPTION(c.resplit(new_line, strlen(new_line)));
|
||||
CHECK_FALSE(s.unterminated_quote());
|
||||
}
|
||||
|
||||
TEST_CASE("splitter test with trim_left") {
|
||||
|
Loading…
Reference in New Issue
Block a user