687 | 687 |
{
|
688 | 688 |
size_t len;
|
689 | 689 |
u_char *d, *s;
|
690 | |
static u_char basis64[] = {
|
691 | |
77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
|
692 | |
77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
|
693 | |
77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 62, 77, 77, 77, 63,
|
694 | |
52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 77, 77, 77, 77, 77, 77,
|
695 | |
77, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
|
696 | |
15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 77, 77, 77, 77, 77,
|
697 | |
77, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
|
698 | |
41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 77, 77, 77, 77, 77,
|
699 | |
|
700 | |
77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
|
701 | |
77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
|
702 | |
77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
|
703 | |
77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
|
704 | |
77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
|
705 | |
77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
|
706 | |
77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
|
707 | |
77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77
|
708 | |
};
|
|
690 |
static u_char basis64[] =
|
|
691 |
{ 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
|
|
692 |
77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
|
|
693 |
77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 62, 77, 77, 77, 63,
|
|
694 |
52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 77, 77, 77, 77, 77, 77,
|
|
695 |
77, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
|
|
696 |
15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 77, 77, 77, 77, 77,
|
|
697 |
77, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
|
|
698 |
41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 77, 77, 77, 77, 77,
|
|
699 |
|
|
700 |
77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
|
|
701 |
77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
|
|
702 |
77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
|
|
703 |
77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
|
|
704 |
77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
|
|
705 |
77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
|
|
706 |
77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
|
|
707 |
77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77 };
|
709 | 708 |
|
710 | 709 |
for (len = 0; len < src->len; len++) {
|
711 | 710 |
if (src->data[len] == '=') {
|
|
887 | 886 |
uintptr_t
|
888 | 887 |
ngx_escape_uri(u_char *dst, u_char *src, size_t size, ngx_uint_t type)
|
889 | 888 |
{
|
890 | |
ngx_uint_t i, n;
|
891 | |
uint32_t *escape;
|
892 | |
static u_char hex[] = "0123456789abcdef";
|
893 | |
|
894 | |
/* " ", "#", "%", "?", %00-%1F, %7F-%FF */
|
895 | |
|
896 | |
static uint32_t uri[] = {
|
897 | |
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
898 | |
|
899 | |
/* ?>=< ;:98 7654 3210 /.-, +*)( '&%$ #"! */
|
900 | |
0x80000029, /* 1000 0000 0000 0000 0000 0000 0010 1001 */
|
901 | |
|
902 | |
/* _^]\ [ZYX WVUT SRQP ONML KJIH GFED CBA@ */
|
903 | |
0x00000000, /* 0000 0000 0000 0000 0000 0000 0000 0000 */
|
904 | |
|
905 | |
/* ~}| {zyx wvut srqp onml kjih gfed cba` */
|
906 | |
0x80000000, /* 1000 0000 0000 0000 0000 0000 0000 0000 */
|
907 | |
|
908 | |
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
909 | |
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
910 | |
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
911 | |
0xffffffff /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
912 | |
};
|
913 | |
|
914 | |
/* " ", "#", "%", "+", "?", %00-%1F, %7F-%FF */
|
915 | |
|
916 | |
static uint32_t args[] = {
|
917 | |
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
918 | |
|
919 | |
/* ?>=< ;:98 7654 3210 /.-, +*)( '&%$ #"! */
|
920 | |
0x80000829, /* 1000 0000 0000 0000 0000 1000 0010 1001 */
|
921 | |
|
922 | |
/* _^]\ [ZYX WVUT SRQP ONML KJIH GFED CBA@ */
|
923 | |
0x00000000, /* 0000 0000 0000 0000 0000 0000 0000 0000 */
|
924 | |
|
925 | |
/* ~}| {zyx wvut srqp onml kjih gfed cba` */
|
926 | |
0x80000000, /* 1000 0000 0000 0000 0000 0000 0000 0000 */
|
927 | |
|
928 | |
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
929 | |
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
930 | |
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
931 | |
0xffffffff /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
932 | |
};
|
933 | |
|
934 | |
/* " ", """, "%", "'", %00-%1F, %7F-%FF */
|
935 | |
|
936 | |
static uint32_t html[] = {
|
937 | |
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
938 | |
|
939 | |
/* ?>=< ;:98 7654 3210 /.-, +*)( '&%$ #"! */
|
940 | |
0x800000ad, /* 0000 0000 0000 0000 0000 0000 1010 1101 */
|
941 | |
|
942 | |
/* _^]\ [ZYX WVUT SRQP ONML KJIH GFED CBA@ */
|
943 | |
0x00000000, /* 0000 0000 0000 0000 0000 0000 0000 0000 */
|
944 | |
|
945 | |
/* ~}| {zyx wvut srqp onml kjih gfed cba` */
|
946 | |
0x80000000, /* 1000 0000 0000 0000 0000 0000 0000 0000 */
|
947 | |
|
948 | |
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
949 | |
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
950 | |
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
951 | |
0xffffffff /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
952 | |
};
|
|
889 |
ngx_uint_t i, n;
|
|
890 |
uint32_t *escape;
|
|
891 |
static u_char hex[] = "0123456789abcdef";
|
|
892 |
|
|
893 |
/* " ", "#", "%", "?", %00-%1F, %7F-%FF */
|
|
894 |
|
|
895 |
static uint32_t uri[] =
|
|
896 |
{ 0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
|
897 |
|
|
898 |
/* ?>=< ;:98 7654 3210 /.-, +*)( '&%$ #"! */
|
|
899 |
0x80000029, /* 1000 0000 0000 0000 0000 0000 0010 1001 */
|
|
900 |
|
|
901 |
/* _^]\ [ZYX WVUT SRQP ONML KJIH GFED CBA@ */
|
|
902 |
0x00000000, /* 0000 0000 0000 0000 0000 0000 0000 0000 */
|
|
903 |
|
|
904 |
/* ~}| {zyx wvut srqp onml kjih gfed cba` */
|
|
905 |
0x80000000, /* 1000 0000 0000 0000 0000 0000 0000 0000 */
|
|
906 |
|
|
907 |
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
|
908 |
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
|
909 |
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
|
910 |
0xffffffff /* 1111 1111 1111 1111 1111 1111 1111 1111 */ };
|
|
911 |
|
|
912 |
/* " ", "#", "%", "+", "?", %00-%1F, %7F-%FF */
|
|
913 |
|
|
914 |
static uint32_t args[] =
|
|
915 |
{ 0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
|
916 |
|
|
917 |
/* ?>=< ;:98 7654 3210 /.-, +*)( '&%$ #"! */
|
|
918 |
0x80000829, /* 1000 0000 0000 0000 0000 1000 0010 1001 */
|
|
919 |
|
|
920 |
/* _^]\ [ZYX WVUT SRQP ONML KJIH GFED CBA@ */
|
|
921 |
0x00000000, /* 0000 0000 0000 0000 0000 0000 0000 0000 */
|
|
922 |
|
|
923 |
/* ~}| {zyx wvut srqp onml kjih gfed cba` */
|
|
924 |
0x80000000, /* 1000 0000 0000 0000 0000 0000 0000 0000 */
|
|
925 |
|
|
926 |
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
|
927 |
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
|
928 |
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
|
929 |
0xffffffff /* 1111 1111 1111 1111 1111 1111 1111 1111 */ };
|
|
930 |
|
|
931 |
/* " ", """, "%", "'", %00-%1F, %7F-%FF */
|
|
932 |
|
|
933 |
static uint32_t html[] =
|
|
934 |
{ 0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
|
935 |
|
|
936 |
/* ?>=< ;:98 7654 3210 /.-, +*)( '&%$ #"! */
|
|
937 |
0x800000ad, /* 0000 0000 0000 0000 0000 0000 1010 1101 */
|
|
938 |
|
|
939 |
/* _^]\ [ZYX WVUT SRQP ONML KJIH GFED CBA@ */
|
|
940 |
0x00000000, /* 0000 0000 0000 0000 0000 0000 0000 0000 */
|
|
941 |
|
|
942 |
/* ~}| {zyx wvut srqp onml kjih gfed cba` */
|
|
943 |
0x80000000, /* 1000 0000 0000 0000 0000 0000 0000 0000 */
|
|
944 |
|
|
945 |
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
|
946 |
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
|
947 |
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
|
948 |
0xffffffff /* 1111 1111 1111 1111 1111 1111 1111 1111 */ };
|
953 | 949 |
|
954 | 950 |
|
955 | 951 |
switch (type) {
|