Fix buffer overflow on multiline csv data containing null characters

This commit is contained in:
ado 2024-02-29 01:39:58 +01:00
parent ddaa446819
commit c36340a0a6
2 changed files with 6 additions and 4 deletions

View File

@ -912,16 +912,17 @@ private:
void undo_remove_eol(char* buffer, size_t& string_end) { void undo_remove_eol(char* buffer, size_t& string_end) {
if (crlf_) { if (crlf_) {
std::copy_n("\r\n\0", 3, buffer + string_end); std::copy_n("\r\n", 2, buffer + string_end);
string_end += 2; string_end += 2;
} else { } else {
std::copy_n("\n\0", 2, buffer + string_end); std::copy_n("\n", 1, buffer + string_end);
string_end += 1; string_end += 1;
} }
} }
size_t remove_eol(char*& buffer, size_t ssize) { size_t remove_eol(char*& buffer, size_t ssize) {
if (buffer[ssize - 1] != '\n') { if (buffer[ssize - 1] != '\n') {
crlf_ = false;
return ssize; return ssize;
} }

View File

@ -3088,16 +3088,17 @@ private:
void undo_remove_eol(char* buffer, size_t& string_end) { void undo_remove_eol(char* buffer, size_t& string_end) {
if (crlf_) { if (crlf_) {
std::copy_n("\r\n\0", 3, buffer + string_end); std::copy_n("\r\n", 2, buffer + string_end);
string_end += 2; string_end += 2;
} else { } else {
std::copy_n("\n\0", 2, buffer + string_end); std::copy_n("\n", 1, buffer + string_end);
string_end += 1; string_end += 1;
} }
} }
size_t remove_eol(char*& buffer, size_t ssize) { size_t remove_eol(char*& buffer, size_t ssize) {
if (buffer[ssize - 1] != '\n') { if (buffer[ssize - 1] != '\n') {
crlf_ = false;
return ssize; return ssize;
} }