From 2d84956fda3942c9b5a06487ecd078f4fcb309e6 Mon Sep 17 00:00:00 2001 From: psvri Date: Sun, 5 Jan 2025 01:35:29 +0530 Subject: [PATCH 1/3] Fix quote escape in literals --- core/translate/expr.rs | 2 +- testing/select.test | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/core/translate/expr.rs b/core/translate/expr.rs index e5e2b2822..bece1e133 100644 --- a/core/translate/expr.rs +++ b/core/translate/expr.rs @@ -1854,7 +1854,7 @@ pub fn translate_expr( } ast::Literal::String(s) => { program.emit_insn(Insn::String8 { - value: s[1..s.len() - 1].to_string(), + value: s[1..s.len() - 1].replace("''", "'").to_string(), dest: target_register, }); Ok(target_register) diff --git a/testing/select.test b/testing/select.test index ff730b44b..c6d403a6a 100755 --- a/testing/select.test +++ b/testing/select.test @@ -11,6 +11,10 @@ do_execsql_test select-const-2 { SELECT 2 } {2} +do_execsql_test select-text-escape-1 { + SELECT '''a' +} {'a} + do_execsql_test select-blob-empty { SELECT x''; } {} From a11f4b2b1081ad1931eb4187b98c02229a776ae9 Mon Sep 17 00:00:00 2001 From: psvri Date: Sun, 5 Jan 2025 14:21:11 +0530 Subject: [PATCH 2/3] Refactor escape string literal logic to a function --- core/translate/expr.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/core/translate/expr.rs b/core/translate/expr.rs index bece1e133..0f854b7c9 100644 --- a/core/translate/expr.rs +++ b/core/translate/expr.rs @@ -1854,7 +1854,7 @@ pub fn translate_expr( } ast::Literal::String(s) => { program.emit_insn(Insn::String8 { - value: s[1..s.len() - 1].replace("''", "'").to_string(), + value: sanitize_string(s), dest: target_register, }); Ok(target_register) @@ -2074,3 +2074,9 @@ pub fn get_name( _ => fallback(), } } + +// Sanitaizes a string literal by removing single quote at front and back +// and escaping double single quotes +pub fn sanitize_string(input: &str) -> String { + input[1..input.len() - 1].replace("''", "'").to_string() +} From 9340c8f0b19c91ea067bfdd05eb0a720b0294d67 Mon Sep 17 00:00:00 2001 From: psvri Date: Sun, 5 Jan 2025 17:16:18 +0530 Subject: [PATCH 3/3] Change sanitize_string comments to doc string --- core/translate/expr.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/translate/expr.rs b/core/translate/expr.rs index 0f854b7c9..c339538da 100644 --- a/core/translate/expr.rs +++ b/core/translate/expr.rs @@ -2075,8 +2075,8 @@ pub fn get_name( } } -// Sanitaizes a string literal by removing single quote at front and back -// and escaping double single quotes +/// Sanitaizes a string literal by removing single quote at front and back +/// and escaping double single quotes pub fn sanitize_string(input: &str) -> String { input[1..input.len() - 1].replace("''", "'").to_string() }