From: Jo-Philipp Wich Date: Tue, 17 Apr 2018 13:38:28 +0000 (+0200) Subject: Revert "luci-base: add urldecode() and urlencode() C implementations" X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fluci.git;a=commitdiff_plain;h=1d5a3123ed63777e2d40250fba99cf8cf2f58476;ds=sidebyside Revert "luci-base: add urldecode() and urlencode() C implementations" This reverts commit ad7dc4a4928e77ae142d0fe040f9e9e64b530e82. Since we're using liblucihttp now, that library is the appropriate place to add such decoding helper functions. Signed-off-by: Jo-Philipp Wich --- diff --git a/modules/luci-base/src/template_lualib.c b/modules/luci-base/src/template_lualib.c index 45e23966e..d5c8dd6b4 100644 --- a/modules/luci-base/src/template_lualib.c +++ b/modules/luci-base/src/template_lualib.c @@ -1,7 +1,7 @@ /* * LuCI Template - Lua binding * - * Copyright (C) 2009-2018 Jo-Philipp Wich + * Copyright (C) 2009 Jo-Philipp Wich * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -110,51 +110,6 @@ int template_L_striptags(lua_State *L) return 0; } -int template_L_urlencode(lua_State *L) -{ - size_t len = 0; - const char *str = luaL_checkstring(L, 1); - char *res = urlencode(str, &len); - - if (res != NULL) - { - lua_pushlstring(L, res, len); - free(res); - - return 1; - } - else if (len == 0) - { - lua_pushvalue(L, 1); - return 1; - } - - return 0; -} - -int template_L_urldecode(lua_State *L) -{ - size_t len = 0; - const char *str = luaL_checkstring(L, 1); - int keep_plus = lua_toboolean(L, 2); - char *res = urldecode(str, &len, keep_plus == 1); - - if (res != NULL) - { - lua_pushlstring(L, res, len); - free(res); - - return 1; - } - else if (len == 0) - { - lua_pushvalue(L, 1); - return 1; - } - - return 0; -} - static int template_L_load_catalog(lua_State *L) { const char *lang = luaL_optstring(L, 1, "en"); const char *dir = luaL_optstring(L, 2, NULL); @@ -210,8 +165,6 @@ static const luaL_reg R[] = { { "utf8", template_L_utf8 }, { "pcdata", template_L_pcdata }, { "striptags", template_L_striptags }, - { "urlencode", template_L_urlencode }, - { "urldecode", template_L_urldecode }, { "load_catalog", template_L_load_catalog }, { "close_catalog", template_L_close_catalog }, { "change_catalog", template_L_change_catalog }, diff --git a/modules/luci-base/src/template_utils.c b/modules/luci-base/src/template_utils.c index eefdd1700..3979487f1 100644 --- a/modules/luci-base/src/template_utils.c +++ b/modules/luci-base/src/template_utils.c @@ -1,7 +1,7 @@ /* * LuCI Template - Utility functions * - * Copyright (C) 2010-2018 Jo-Philipp Wich + * Copyright (C) 2010 Jo-Philipp Wich * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -428,128 +428,6 @@ char * striptags(const char *s, unsigned int l) return buf_destroy(buf); } - -static inline bool is_urlencode_char(char c) -{ - return !((c >= 'a' && c <= 'z') || - (c >= 'A' && c <= 'Z') || - (c >= '0' && c <= '9') || - (c == '$') || (c == '_') || - (c == '-') || (c == '.') || - (c == '~')); -} - -/* - * URL-encode all special characters in given string and return - * encoded copy. - * - * If no encoding was required, returns NULL. If an encoded_len - * pointer is passed, it is set to the length of the encoded string. - * - * Sets encoded_len and returns NULL if memory allocation failed. - */ -char *urlencode(const char *s, size_t *encoded_len) -{ - size_t i, enc_len; - char *enc, *ptr; - - for (i = 0, enc_len = 0; s[i]; i++) - if (is_urlencode_char(s[i])) - enc_len += 3; - else - enc_len++; - - if (i != enc_len) - { - if (encoded_len) - *encoded_len = enc_len; - - enc = calloc(1, enc_len + 1); - - if (!enc) - return NULL; - - for (i = 0, ptr = enc; s[i]; i++) - if (is_urlencode_char(s[i])) - ptr += snprintf(ptr, 4, "%%%02x", (unsigned char)s[i]); - else - *ptr++ = s[i]; - - return enc; - } - - return NULL; -} - -/* - * URL-decode given string and return decoded copy. - * - * If no decoding was required, returns NULL. If an decoded_len - * pointer is passed, it is set to the length of the decoded string. - * - * When keep_plus is true, skip decoding of plus ("+") signs into - * space (0x20) characters. - * - * Sets decoded_len and returns NULL if memory allocation failed. - */ - -#define hex(x) \ - (((x) <= '9') ? ((x) - '0') : \ - (((x) <= 'F') ? ((x) - 'A' + 10) : \ - ((x) - 'a' + 10))) - -char *urldecode(const char *s, size_t *decoded_len, bool keep_plus) -{ - bool changed = false; - size_t i, dec_len; - char *dec, *ptr; - - for (i = 0, dec_len = 0; s[i]; i++, dec_len++) - { - if (s[i] == '%' && isxdigit(s[i+1]) && isxdigit(s[i+2])) - { - changed = true; - i += 2; - } - else if (!keep_plus && s[i] == '+') - { - changed = true; - } - } - - if (changed) - { - if (decoded_len) - *decoded_len = dec_len; - - dec = calloc(1, dec_len + 1); - - if (!dec) - return NULL; - - for (i = 0, ptr = dec; s[i]; i++) - { - if (s[i] == '%' && isxdigit(s[i+1]) && isxdigit(s[i+2])) - { - *ptr++ = (char)(16 * hex(s[i+1]) + hex(s[i+2])); - i += 2; - } - else if (!keep_plus && s[i] == '+') - { - *ptr++ = ' '; - } - else - { - *ptr++ = s[i]; - } - } - - return dec; - } - - return NULL; -} - void luastr_escape(struct template_buffer *out, const char *s, unsigned int l, int escape_xml) { diff --git a/modules/luci-base/src/template_utils.h b/modules/luci-base/src/template_utils.h index 872ecb072..32a79f93b 100644 --- a/modules/luci-base/src/template_utils.h +++ b/modules/luci-base/src/template_utils.h @@ -1,7 +1,7 @@ /* * LuCI Template - Utility header * - * Copyright (C) 2010-2018 Jo-Philipp Wich + * Copyright (C) 2010-2012 Jo-Philipp Wich * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,8 +22,6 @@ #include #include #include -#include -#include /* buffer object */ @@ -44,8 +42,6 @@ char * buf_destroy(struct template_buffer *buf); char * utf8(const char *s, unsigned int l); char * pcdata(const char *s, unsigned int l); char * striptags(const char *s, unsigned int l); -char * urlencode(const char *s, size_t *encoded_len); -char * urldecode(const char *s, size_t *decoded_len, bool keep_plus); void luastr_escape(struct template_buffer *out, const char *s, unsigned int l, int escape_xml); void luastr_translate(struct template_buffer *out, const char *s, unsigned int l, int escape_xml);