{"schema":"libjg2-1",
"vpath":"/git/",
"avatar":"/git/avatar/",
"alang":"",
"gen_ut":1745907605,
"reponame":"libwebsockets",
"desc":"libwebsockets lightweight C networking library",
"owner": { "name": "Andy Green", "email": "andy@warmcat.com", "md5": "c50933ca2aa61e0fe2c43d46bb6b59cb" },"url":"https://libwebsockets.org/repo/libwebsockets",
"f":3,
"items": [
{"schema":"libjg2-1",
"cid":"082500eac5831df8f3c658bb806104de",
"commit": {"type":"commit",
"time": 1510304204,
"time_ofs": 480,
"oid_tree": { "oid": "93ebc0d103d9dffee67e1594de916d29e0485420", "alias": []},
"oid":{ "oid": "2639b276f4bb8d6cf787e1d6dab8f8d60e363ffc", "alias": []},
"msg": "base64: add URL encode variant and allow decode of it",
"sig_commit": { "git_time": { "time": 1510304204, "offset": 480 }, "name": "Andy Green", "email": "andy@warmcat.com", "md5": "c50933ca2aa61e0fe2c43d46bb6b59cb" },
"sig_author": { "git_time": { "time": 1508324883, "offset": 480 }, "name": "Andy Green", "email": "andy@warmcat.com", "md5": "c50933ca2aa61e0fe2c43d46bb6b59cb" }},
"body": "base64: add URL encode variant and allow decode of it\n\nThe URL encode variant is the same, except + is coded as -, and / is coded as _\nto avoid urlencoding when the base64 is used in situations that are urlencoded."
,
"diff": "diff --git a/lib/libwebsockets.h b/lib/libwebsockets.h\nindex 87b34d0..c5bd44d 100644\n--- a/lib/libwebsockets.h\n+++ b/lib/libwebsockets.h\n@@ -5270,6 +5270,18 @@ lws_SHA1(const unsigned char *d, size_t n, unsigned char *md);\n LWS_VISIBLE LWS_EXTERN int\n lws_b64_encode_string(const char *in, int in_len, char *out, int out_size);\n /**\n+ * lws_b64_encode_string_url(): encode a string into base 64\n+ *\n+ * \u005cparam in: incoming buffer\n+ * \u005cparam in_len: length of incoming buffer\n+ * \u005cparam out: result buffer\n+ * \u005cparam out_size: length of result buffer\n+ *\n+ * Encodes a string using b64 with the \u0022URL\u0022 variant (+ -\u003e -, and / -\u003e _)\n+ */\n+LWS_VISIBLE LWS_EXTERN int\n+lws_b64_encode_string_url(const char *in, int in_len, char *out, int out_size);\n+/**\n * lws_b64_decode_string(): decode a string from base 64\n *\n * \u005cparam in: incoming buffer\ndiff --git a/lib/misc/base64-decode.c b/lib/misc/base64-decode.c\nindex c8f11d2..c4605e2 100644\n--- a/lib/misc/base64-decode.c\n+++ b/lib/misc/base64-decode.c\n@@ -42,13 +42,16 @@\n #include \u003cstring.h\u003e\n #include \u0022private-libwebsockets.h\u0022\n \n-static const char encode[] \u003d \u0022ABCDEFGHIJKLMNOPQRSTUVWXYZ\u0022\n+static const char encode_orig[] \u003d \u0022ABCDEFGHIJKLMNOPQRSTUVWXYZ\u0022\n \t\t\t \u0022abcdefghijklmnopqrstuvwxyz0123456789+/\u0022;\n+static const char encode_url[] \u003d \u0022ABCDEFGHIJKLMNOPQRSTUVWXYZ\u0022\n+\t\t\t \u0022abcdefghijklmnopqrstuvwxyz0123456789-_\u0022;\n static const char decode[] \u003d \u0022|$$$}rstuvwxyz{$$$$$$$\u003e?@ABCDEFGHIJKLMNOPQRSTUVW\u0022\n \t\t\t \u0022$$$$$$XYZ[\u005c\u005c]^_`abcdefghijklmnopq\u0022;\n \n-LWS_VISIBLE int\n-lws_b64_encode_string(const char *in, int in_len, char *out, int out_size)\n+static int\n+_lws_b64_encode_string(const char *encode, const char *in, int in_len,\n+\t\t char *out, int out_size)\n {\n \tunsigned char triple[3];\n \tint i;\n@@ -89,6 +92,18 @@ lws_b64_encode_string(const char *in, int in_len, char *out, int out_size)\n \treturn done;\n }\n \n+LWS_VISIBLE int\n+lws_b64_encode_string(const char *in, int in_len, char *out, int out_size)\n+{\n+\treturn _lws_b64_encode_string(encode_orig, in, in_len, out, out_size);\n+}\n+\n+LWS_VISIBLE int\n+lws_b64_encode_string_url(const char *in, int in_len, char *out, int out_size)\n+{\n+\treturn _lws_b64_encode_string(encode_url, in, in_len, out, out_size);\n+}\n+\n /*\n * returns length of decoded string in out, or -1 if out was too small\n * according to out_size\n@@ -109,6 +124,11 @@ lws_b64_decode_string(const char *in, char *out, int out_size)\n \t\t\tc \u003d 0;\n \t\t\twhile (*in \u0026\u0026 !v) {\n \t\t\t\tc \u003d v \u003d *in++;\n+\t\t\t\t/* support the url base64 variant too */\n+\t\t\t\tif (v \u003d\u003d '-')\n+\t\t\t\t\tc \u003d v \u003d '+';\n+\t\t\t\tif (v \u003d\u003d '_')\n+\t\t\t\t\tc \u003d v \u003d '/';\n \t\t\t\tv \u003d (v \u003c 43 || v \u003e 122) ? 0 : decode[v - 43];\n \t\t\t\tif (v)\n \t\t\t\t\tv \u003d (v \u003d\u003d '$') ? 0 : v - 61;\n","s":{"c":1745907605,"u": 6894}}
],"g": 8414,"chitpc": 0,"ehitpc": 0,"indexed":0
,
"ab": 0, "si": 0, "db":0, "di":0, "sat":0, "lfc": "0000"}