-
-
Notifications
You must be signed in to change notification settings - Fork 32.2k
src: improve node::Dotenv trimming #56983
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -105,15 +105,22 @@ Local<Object> Dotenv::ToObject(Environment* env) const { | |
return result; | ||
} | ||
|
||
// Removes space characters (spaces, tabs and newlines) from | ||
// the start and end of a given input string | ||
std::string_view trim_spaces(std::string_view input) { | ||
if (input.empty()) return ""; | ||
if (input.front() == ' ') { | ||
input.remove_prefix(input.find_first_not_of(' ')); | ||
|
||
auto pos_start = input.find_first_not_of(" \t\n"); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. should this also include There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. sounds good to me 🙂, but I'm not sure how to test that, would you be ok with addition without dedicated tests for it? |
||
if (pos_start == std::string_view::npos) { | ||
return ""; | ||
} | ||
if (!input.empty() && input.back() == ' ') { | ||
input = input.substr(0, input.find_last_not_of(' ') + 1); | ||
|
||
auto pos_end = input.find_last_not_of(" \t\n"); | ||
if (pos_end == std::string_view::npos) { | ||
return input.substr(pos_start); | ||
} | ||
return input; | ||
|
||
return input.substr(pos_start, pos_end - pos_start + 1); | ||
dario-piotrowicz marked this conversation as resolved.
Show resolved
Hide resolved
|
||
} | ||
|
||
void Dotenv::ParseContent(const std::string_view input) { | ||
|
@@ -147,6 +154,13 @@ void Dotenv::ParseContent(const std::string_view input) { | |
key = content.substr(0, equal); | ||
content.remove_prefix(equal + 1); | ||
key = trim_spaces(key); | ||
|
||
// If the value is not present (e.g. KEY=) set is to an empty string | ||
if (content.front() == '\n') { | ||
store_.insert_or_assign(std::string(key), ""); | ||
continue; | ||
} | ||
|
||
content = trim_spaces(content); | ||
|
||
if (key.empty()) { | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
|
||
EMPTY_LINE='value after an empty line' | ||
|
||
SPACES_LINE='value after a line with just some spaces' | ||
|
||
TABS_LINE='value after a line with just some tabs' | ||
|
||
SPACES_TABS_LINE='value after a line with just some spaces and tabs' |
Uh oh!
There was an error while loading. Please reload this page.