This is an automated email from the ASF dual-hosted git repository.

colegreer pushed a commit to branch 3.6-dev
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git


The following commit(s) were added to refs/heads/3.6-dev by this push:
     new 67a0d2769f CTR TINKERPOP-3077 Javascript translator incorrectly handle 
quotes, null and undefined values
67a0d2769f is described below

commit 67a0d2769fe079fa345eac778bf112e69e251684
Author: Cole-Greer <[email protected]>
AuthorDate: Wed Oct 16 11:51:58 2024 -0700

    CTR TINKERPOP-3077 Javascript translator incorrectly handle quotes, null 
and undefined values
---
 .../gremlin-javascript/lib/process/translator.js    |  6 +++---
 .../gremlin-javascript/test/unit/translator-test.js | 21 +++++++++++++++++++++
 2 files changed, 24 insertions(+), 3 deletions(-)

diff --git 
a/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/process/translator.js
 
b/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/process/translator.js
index bb6a5d0645..7eceb258c4 100644
--- 
a/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/process/translator.js
+++ 
b/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/process/translator.js
@@ -106,12 +106,12 @@ class Translator {
       } else {
         script += anyObject.toString();
       }
-    } else if (anyObject === undefined) {
-      script += '';
+    } else if (anyObject === undefined || anyObject === null) {
+      script += 'null';
     } else if (typeof anyObject === 'number' || typeof anyObject === 
'boolean') {
       script += anyObject;
     } else {
-      script += `'${anyObject}'`;
+      script += `'${`${anyObject}`.replace("'", "\\'")}'`; // 
eslint-disable-line quotes
     }
 
     return script;
diff --git 
a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/translator-test.js
 
b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/translator-test.js
index 476390538a..986dbd161a 100644
--- 
a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/translator-test.js
+++ 
b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/translator-test.js
@@ -112,5 +112,26 @@ describe('Translator', function () {
       assert.ok(script);
       assert.strictEqual(script, 'g.V([1, 2, 3])');
     });
+
+    it('should translate null', function () {
+      const g = new graph.Graph().traversal();
+      const script = new 
Translator('g').translate(g.addV('test').property('empty', null));
+      assert.ok(script);
+      assert.strictEqual(script, 'g.addV(\'test\').property(\'empty\', null)');
+    });
+
+    it('should translate undefined to null', function () {
+      const g = new graph.Graph().traversal();
+      const script = new 
Translator('g').translate(g.addV('test').property('empty', undefined));
+      assert.ok(script);
+      assert.strictEqual(script, 'g.addV(\'test\').property(\'empty\', null)');
+    });
+
+    it('should properly escape quotes in string literals', function () {
+      const g = new graph.Graph().traversal();
+      const script = new 
Translator('g').translate(g.addV('test').property('quotes', "some \"quotes' in 
the middle."));
+      assert.ok(script);
+      assert.strictEqual(script, 'g.addV(\'test\').property(\'quotes\', \'some 
"quotes\\\' in the middle.\')');
+    });
   });
 });

Reply via email to