From 89d57fc0785ddcfd3932f2034456e210da20b576 Mon Sep 17 00:00:00 2001 From: Alec Theriault Date: Thu, 10 Sep 2020 13:11:11 -0400 Subject: [PATCH] fix(curlify): replace all occurrences of `$` (#6354) * replace all occurrences instead of only first occurrence --- src/core/curlify.js | 4 ++-- test/unit/core/curlify.js | 13 +++++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/core/curlify.js b/src/core/curlify.js index e5b4faa8..4feecd1f 100644 --- a/src/core/curlify.js +++ b/src/core/curlify.js @@ -27,7 +27,7 @@ export default function curl( request ){ for( let p of request.get("headers").entries() ){ let [ h,v ] = p curlified.push( "-H " ) - curlified.push( `"${h}: ${v.replace("$", "\\$")}"` ) + curlified.push( `"${h}: ${v.replace(/\$/g, "\\$")}"` ) isMultipartFormDataRequest = isMultipartFormDataRequest || /^content-type$/i.test(h) && /^multipart\/form-data$/i.test(v) } } @@ -47,7 +47,7 @@ export default function curl( request ){ curlified.push( "-d" ) let reqBody = request.get("body") if (!Map.isMap(reqBody)) { - curlified.push( JSON.stringify( request.get("body") ).replace(/\\n/g, "").replace("$", "\\$") ) + curlified.push( JSON.stringify( request.get("body") ).replace(/\\n/g, "").replace(/\$/g, "\\$") ) } else { let curlifyToJoin = [] for (let [k, v] of request.get("body").entrySeq()) { diff --git a/test/unit/core/curlify.js b/test/unit/core/curlify.js index a5e24999..87816ad9 100644 --- a/test/unit/core/curlify.js +++ b/test/unit/core/curlify.js @@ -351,4 +351,17 @@ describe("curlify", function () { expect(curlified).toEqual("curl -X POST \"http://example.com\" -H \"X-DOLLAR: token/123\\$\" -d \"CREATE (\\$props)\"") }) + + it("should escape multiple dollar signs", function () { + let req = { + url: "http://example.com", + method: "POST", + headers: { }, + body: "RETURN $x + $y" + } + + let curlified = curl(Im.fromJS(req)) + + expect(curlified).toEqual("curl -X POST \"http://example.com\" -d \"RETURN \\$x + \\$y\"") + }) })