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