* ob-table.el (org-sbe): (org-sbe func (x $ "a\"b\"c")) did the wrong
thing because org-sbe would simply wrap any $-prefixed value in
quotes, without any escaping. Fix this by using "%S" (instead of
"\"%s\"").
* test-ob-table.el: Add test.
---
lisp/ob-table.el | 2 +-
testing/lisp/test-ob-table.el | 10 ++++++++++
2 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/lisp/ob-table.el b/lisp/ob-table.el
index f6a5c88e4..105aca5e2 100644
--- a/lisp/ob-table.el
+++ b/lisp/ob-table.el
@@ -112,7 +112,7 @@ as shown in the example below.
(prog1 nil (setq quote t))
(prog1
(cond
- (quote (format "\"%s\"" el))
+ (quote (format "%S" el))
((stringp el) (org-no-properties el))
(t el))
(setq quote nil))))
diff --git a/testing/lisp/test-ob-table.el b/testing/lisp/test-ob-table.el
index da136cbee..725cf6bdd 100644
--- a/testing/lisp/test-ob-table.el
+++ b/testing/lisp/test-ob-table.el
@@ -30,6 +30,16 @@
;; (org-test-at-id "6d2ff4ce-4489-4e2a-9c65-e3f71f77d975"
;; (should (= 2 (sbe take-sqrt (n "4"))))))
+(ert-deftest test-ob-table/sbe-quote ()
+ "Test that `org-sbe' can correctly handle string arguments containing
quotes."
+ (org-test-with-temp-text-in-file "
+#+name: identity
+#+begin_src emacs-lisp :eval yes
+ x
+#+end_src"
+ (should (equal "a\"b\"c"
+ (eval '(org-sbe identity (x $ "a\"b\"c")))))))
+
(provide 'test-ob-table)
;;; test-ob-table.el ends here
--
2.16.2