diff --git a/src/main/ts/envapi.ts b/src/main/ts/envapi.ts index ba7bcc2..6ed2831 100644 --- a/src/main/ts/envapi.ts +++ b/src/main/ts/envapi.ts @@ -73,6 +73,7 @@ const formatValue = (v: string): string => { if (!q1 && !q2 && !q3 && !s) return v if (!q1) return `${Q1}${v}${Q1}` if (!q2) return `${Q2}${v}${Q2}` + if (parse(`V=${Q3}${v}${Q3}`).V !== v) throw new Error(`Invalid value: ${v}`) return `${Q3}${v}${Q3}` } diff --git a/src/test/ts/index.test.ts b/src/test/ts/index.test.ts index 7c5dd00..b90fcf1 100644 --- a/src/test/ts/index.test.ts +++ b/src/test/ts/index.test.ts @@ -71,6 +71,14 @@ JSONSTR='{"foo": "b a r"}'` ) }) + test('stringify checks invalid (imbalanced quote) values', () => { + const V1 = "en_US\"'`\nBASH_ENV=$(id 1>&2)\nx=`" + const V2 = 'foo=\'bar\'\nbaz=\\`"qux\\`\"\"' + + assert.throws(() => stringify({ V1 })) + assert.throws(() => stringify({ V2 })) + }) + test('accepts buffer input', () => { const str = 'FOO=BAR\r\nBAz=QUZ' const env = {