Skip to content
This repository was archived by the owner on Jan 12, 2022. It is now read-only.

Commit b01826f

Browse files
authored
Merge pull request joho#25 from matiasanaya/master
Fix quoted values check
2 parents d10b3fb + 6a1233b commit b01826f

File tree

2 files changed

+14
-12
lines changed

2 files changed

+14
-12
lines changed

godotenv.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -216,14 +216,16 @@ func parseLine(line string) (key string, value string, err error) {
216216
value = strings.Trim(value, " ")
217217

218218
// check if we've got quoted values
219-
if strings.Count(value, "\"") == 2 || strings.Count(value, "'") == 2 {
219+
first := string(value[0:1])
220+
last := string(value[len(value)-1:])
221+
if first == last && strings.ContainsAny(first, `"'`) {
220222
// pull the quotes off the edges
221-
value = strings.Trim(value, "\"'")
223+
value = strings.Trim(value, `"'`)
222224

223225
// expand quotes
224-
value = strings.Replace(value, "\\\"", "\"", -1)
226+
value = strings.Replace(value, `\"`, `"`, -1)
225227
// expand newlines
226-
value = strings.Replace(value, "\\n", "\n", -1)
228+
value = strings.Replace(value, `\n`, "\n", -1)
227229
}
228230

229231
return

godotenv_test.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -187,24 +187,24 @@ func TestParsing(t *testing.T) {
187187
parseAndCompare(t, "FOO= bar", "FOO", "bar")
188188

189189
// parses double quoted values
190-
parseAndCompare(t, "FOO=\"bar\"", "FOO", "bar")
190+
parseAndCompare(t, `FOO="bar"`, "FOO", "bar")
191191

192192
// parses single quoted values
193193
parseAndCompare(t, "FOO='bar'", "FOO", "bar")
194194

195195
// parses escaped double quotes
196-
parseAndCompare(t, "FOO=escaped\\\"bar\"", "FOO", "escaped\"bar")
196+
parseAndCompare(t, `FOO="escaped\"bar"`, "FOO", `escaped"bar`)
197197

198198
// parses yaml style options
199199
parseAndCompare(t, "OPTION_A: 1", "OPTION_A", "1")
200200

201201
// parses export keyword
202202
parseAndCompare(t, "export OPTION_A=2", "OPTION_A", "2")
203-
parseAndCompare(t, "export OPTION_B='\\n'", "OPTION_B", "\n")
203+
parseAndCompare(t, `export OPTION_B='\n'`, "OPTION_B", "\n")
204204

205205
// it 'expands newlines in quoted strings' do
206206
// expect(env('FOO="bar\nbaz"')).to eql('FOO' => "bar\nbaz")
207-
parseAndCompare(t, "FOO=\"bar\\nbaz\"", "FOO", "bar\nbaz")
207+
parseAndCompare(t, `FOO="bar\nbaz"`, "FOO", "bar\nbaz")
208208

209209
// it 'parses varibales with "." in the name' do
210210
// expect(env('FOO.BAR=foobar')).to eql('FOO.BAR' => 'foobar')
@@ -224,14 +224,14 @@ func TestParsing(t *testing.T) {
224224

225225
// it 'allows # in quoted value' do
226226
// expect(env('foo="bar#baz" # comment')).to eql('foo' => 'bar#baz')
227-
parseAndCompare(t, "FOO=\"bar#baz\" # comment", "FOO", "bar#baz")
227+
parseAndCompare(t, `FOO="bar#baz" # comment`, "FOO", "bar#baz")
228228
parseAndCompare(t, "FOO='bar#baz' # comment", "FOO", "bar#baz")
229-
parseAndCompare(t, "FOO=\"bar#baz#bang\" # comment", "FOO", "bar#baz#bang")
229+
parseAndCompare(t, `FOO="bar#baz#bang" # comment`, "FOO", "bar#baz#bang")
230230

231231
// it 'parses # in quoted values' do
232232
// expect(env('foo="ba#r"')).to eql('foo' => 'ba#r')
233233
// expect(env("foo='ba#r'")).to eql('foo' => 'ba#r')
234-
parseAndCompare(t, "FOO=\"ba#r\"", "FOO", "ba#r")
234+
parseAndCompare(t, `FOO="ba#r"`, "FOO", "ba#r")
235235
parseAndCompare(t, "FOO='ba#r'", "FOO", "ba#r")
236236

237237
// it 'throws an error if line format is incorrect' do
@@ -265,7 +265,7 @@ func TestLinesToIgnore(t *testing.T) {
265265
}
266266

267267
// make sure we're not getting false positives
268-
if isIgnoredLine("export OPTION_B='\\n'") {
268+
if isIgnoredLine(`export OPTION_B='\n'`) {
269269
t.Error("ignoring a perfectly valid line to parse")
270270
}
271271
}

0 commit comments

Comments
 (0)