From 67d57ed2b651455d21115165cf5e28e30e994560 Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Tue, 5 Feb 2019 15:42:39 -0800 Subject: [PATCH] ircd::json: Add a specific escape transform utility to interface. --- include/ircd/json/util.h | 3 +++ ircd/json.cc | 17 +++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/include/ircd/json/util.h b/include/ircd/json/util.h index 9599ea86e..c23673821 100644 --- a/include/ircd/json/util.h +++ b/include/ircd/json/util.h @@ -40,6 +40,9 @@ namespace ircd::json // (Internal) validates output void valid_output(const string_view &, const size_t &expected); + + // Transforms input into escaped output only + string_view escape(const mutable_buffer &out, const string_view &in); } /// Strong type representing quoted strings in JSON (which may be unquoted diff --git a/ircd/json.cc b/ircd/json.cc index bae37e1cb..05219a406 100644 --- a/ircd/json.cc +++ b/ircd/json.cc @@ -3396,6 +3396,23 @@ static_assert ircd::json::undefined_number != 0 ); +ircd::string_view +ircd::json::escape(const mutable_buffer &buf, + const string_view &in) +{ + static const printer::rule characters + { + *(printer.character) + }; + + mutable_buffer out{buf}; + printer(out, characters, in); + return string_view + { + data(buf), data(out) + }; +} + std::string ircd::json::why(const string_view &s) try