gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[libmicrohttpd] 01/02: MHD_str_quote(): added new internal function


From: gnunet
Subject: [libmicrohttpd] 01/02: MHD_str_quote(): added new internal function
Date: Tue, 07 Jun 2022 08:52:35 +0200

This is an automated email from the git hooks/post-receive script.

karlson2k pushed a commit to branch master
in repository libmicrohttpd.

commit 4ec916c02cd2868e21864abc8232335282713358
Author: Evgeny Grin (Karlson2k) <k2k@narod.ru>
AuthorDate: Tue Jun 7 09:50:21 2022 +0300

    MHD_str_quote(): added new internal function
---
 src/microhttpd/mhd_str.c | 41 +++++++++++++++++++++++++++++++++++++++++
 src/microhttpd/mhd_str.h | 27 ++++++++++++++++++++++++++-
 2 files changed, 67 insertions(+), 1 deletion(-)

diff --git a/src/microhttpd/mhd_str.c b/src/microhttpd/mhd_str.c
index 5829daa5..f8e1965f 100644
--- a/src/microhttpd/mhd_str.c
+++ b/src/microhttpd/mhd_str.c
@@ -1474,3 +1474,44 @@ MHD_str_unquote (const char *quoted,
 
 
 #endif /* DAUTH_SUPPORT */
+
+#if defined(DAUTH_SUPPORT) || defined(BAUTH_SUPPORT)
+
+size_t
+MHD_str_quote (const char *unquoted,
+               size_t unquoted_len,
+               char *result,
+               size_t buf_size)
+{
+  size_t r;
+  size_t w;
+
+  r = 0;
+  w = 0;
+
+  if (unquoted_len > buf_size)
+    return 0; /* The output buffer is too small */
+
+  while (unquoted_len > r)
+  {
+    if (buf_size <= w)
+      return 0; /* The output buffer is too small */
+    else
+    {
+      const char chr = unquoted[r++];
+      if (('\\' == chr) || ('\"' == chr))
+      {
+        result[w++] = '\\'; /* Escape current char */
+        if (buf_size <= w)
+          return 0; /* The output buffer is too small */
+      }
+      result[w++] = chr;
+    }
+  }
+  mhd_assert (w >= r);
+  mhd_assert (w <= r * 2);
+  return w;
+}
+
+
+#endif /* DAUTH_SUPPORT || BAUTH_SUPPORT */
diff --git a/src/microhttpd/mhd_str.h b/src/microhttpd/mhd_str.h
index 67b2d044..dbe97352 100644
--- a/src/microhttpd/mhd_str.h
+++ b/src/microhttpd/mhd_str.h
@@ -544,7 +544,7 @@ MHD_str_equal_caseless_quoted_bin_n (const char *quoted,
  *               DQUOTE chars, does not need to be zero-terminated
  * @param quoted_len the length in chars of the @a quoted string
  * @param[out] result the pointer to the buffer to put the result, must
- *                    be at least @a size character long.May be modified even
+ *                    be at least @a size character long. May be modified even
  *                    if @a quoted is invalid sequence. The result is NOT
  *                    zero-terminated.
  * @return The number of characters written to the output buffer,
@@ -558,4 +558,29 @@ MHD_str_unquote (const char *quoted,
 
 #endif /* DAUTH_SUPPORT */
 
+#if defined(DAUTH_SUPPORT) || defined(BAUTH_SUPPORT)
+
+/**
+ * Convert string from unquoted to quoted form as specified by
+ * RFC7230#section-3.2.6 and RFC7694#quoted.strings.
+ *
+ * @param unquoted the unquoted string, does not need to be zero-terminated
+ * @param unquoted_len the length in chars of the @a unquoted string
+ * @param[out] result the pointer to the buffer to put the result. May be
+ *                    modified even if function failed due to insufficient
+ *                    space. The result is NOT zero-terminated and does not
+ *                    have opening and closing DQUOTE chars.
+ * @param buf_size the size of the allocated memory for @a result
+ * @return The number of copied characters, can be up to two times more than
+ *         @a unquoted_len, zero if @a unquoted_len is zero or if quoted
+ *         string is larger than @a buf_size.
+ */
+size_t
+MHD_str_quote (const char *unquoted,
+               size_t unquoted_len,
+               char *result,
+               size_t buf_size);
+
+#endif /* DAUTH_SUPPORT || BAUTH_SUPPORT */
+
 #endif /* MHD_STR_H */

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]