xref: /aosp_15_r20/external/dynamic_depth/internal/strings/escaping.h (revision a62be0856e8e1158f43b03e41bbad10f4d005fde)
1*a62be085SSadaf Ebrahimi // This is a grab-bag file for string utilities involved in escaping and
2*a62be085SSadaf Ebrahimi // unescaping strings in various ways. Who knew there were so many?
3*a62be085SSadaf Ebrahimi //
4*a62be085SSadaf Ebrahimi // There are more escaping functions in:
5*a62be085SSadaf Ebrahimi //   webutil/html/tagutils.h (Escaping strings for HTML, PRE, JavaScript, etc.)
6*a62be085SSadaf Ebrahimi //   webutil/url/url.h (Escaping for URL's, both RFC-2396 and other methods)
7*a62be085SSadaf Ebrahimi //   template/template_modifiers.h (All sorts of stuff)
8*a62be085SSadaf Ebrahimi //   util/regexp/re2/re2.h (Escaping for literals within regular expressions
9*a62be085SSadaf Ebrahimi //                         - see RE2::QuoteMeta).
10*a62be085SSadaf Ebrahimi // And probably many more places, as well.
11*a62be085SSadaf Ebrahimi 
12*a62be085SSadaf Ebrahimi #ifndef DYNAMIC_DEPTH_INTERNAL_STRINGS_ESCAPING_H_  // NOLINT
13*a62be085SSadaf Ebrahimi #define DYNAMIC_DEPTH_INTERNAL_STRINGS_ESCAPING_H_  // NOLINT
14*a62be085SSadaf Ebrahimi 
15*a62be085SSadaf Ebrahimi #include <stddef.h>  // For ptrdiff_t.
16*a62be085SSadaf Ebrahimi 
17*a62be085SSadaf Ebrahimi #include <string>
18*a62be085SSadaf Ebrahimi 
19*a62be085SSadaf Ebrahimi #include "base/port.h"
20*a62be085SSadaf Ebrahimi 
21*a62be085SSadaf Ebrahimi namespace dynamic_depth {
22*a62be085SSadaf Ebrahimi 
23*a62be085SSadaf Ebrahimi // ----------------------------------------------------------------------
24*a62be085SSadaf Ebrahimi // Base64Unescape()
25*a62be085SSadaf Ebrahimi //    Converts "src" which is encoded in Base64 to its binary equivalent and
26*a62be085SSadaf Ebrahimi //    writes it to "dest". If src contains invalid characters, dest is cleared
27*a62be085SSadaf Ebrahimi //    and the function returns false. Returns true on success.
28*a62be085SSadaf Ebrahimi // ----------------------------------------------------------------------
29*a62be085SSadaf Ebrahimi bool Base64Unescape(const string& src, string* dest);
30*a62be085SSadaf Ebrahimi 
31*a62be085SSadaf Ebrahimi // ----------------------------------------------------------------------
32*a62be085SSadaf Ebrahimi // WebSafeBase64Unescape()
33*a62be085SSadaf Ebrahimi //    This is a variation of Base64Unescape which uses '-' instead of '+', and
34*a62be085SSadaf Ebrahimi //    '_' instead of '/'. src is not null terminated, instead specify len. I
35*a62be085SSadaf Ebrahimi //    recommend that slen<szdest, but we honor szdest anyway.
36*a62be085SSadaf Ebrahimi //    RETURNS the length of dest, or -1 if there's an error.
37*a62be085SSadaf Ebrahimi 
38*a62be085SSadaf Ebrahimi //    The variation that stores into a string clears the string first, and
39*a62be085SSadaf Ebrahimi //    returns false (with dest empty) if src contains invalid chars; for
40*a62be085SSadaf Ebrahimi //    this version src and dest must be different strings.
41*a62be085SSadaf Ebrahimi // ----------------------------------------------------------------------
42*a62be085SSadaf Ebrahimi bool WebSafeBase64Unescape(const string& src, string* dest);
43*a62be085SSadaf Ebrahimi 
44*a62be085SSadaf Ebrahimi // ----------------------------------------------------------------------
45*a62be085SSadaf Ebrahimi // Base64Escape()
46*a62be085SSadaf Ebrahimi //    Encode "src" to "dest" using base64 encoding.
47*a62be085SSadaf Ebrahimi //    src is not null terminated, instead specify len.
48*a62be085SSadaf Ebrahimi //    'dest' should have at least CalculateBase64EscapedLen() length.
49*a62be085SSadaf Ebrahimi //    RETURNS the length of dest.
50*a62be085SSadaf Ebrahimi //    It also has an extra parameter "do_padding",
51*a62be085SSadaf Ebrahimi //    which when set to false will prevent padding with "=".
52*a62be085SSadaf Ebrahimi // ----------------------------------------------------------------------
53*a62be085SSadaf Ebrahimi void Base64Escape(const unsigned char* src, ptrdiff_t szsrc, string* dest,
54*a62be085SSadaf Ebrahimi                   bool do_padding);
55*a62be085SSadaf Ebrahimi 
56*a62be085SSadaf Ebrahimi // ----------------------------------------------------------------------
57*a62be085SSadaf Ebrahimi // b2a_hex()
58*a62be085SSadaf Ebrahimi //  Description: Binary-to-Ascii hex conversion.  This converts
59*a62be085SSadaf Ebrahimi //   'num' bytes of binary to a 2*'num'-character hexadecimal representation
60*a62be085SSadaf Ebrahimi //    Return value: 2*'num' characters of ascii string
61*a62be085SSadaf Ebrahimi // ----------------------------------------------------------------------
62*a62be085SSadaf Ebrahimi string b2a_hex(const char* from, ptrdiff_t num);
63*a62be085SSadaf Ebrahimi 
64*a62be085SSadaf Ebrahimi }  // namespace dynamic_depth
65*a62be085SSadaf Ebrahimi 
66*a62be085SSadaf Ebrahimi #endif  // DYNAMIC_DEPTH_INTERNAL_STRINGS_ESCAPING_H_  // NOLINT
67