Revert "luci-base: add urldecode() and urlencode() C implementations"
This reverts commit ad7dc4a492
.
Since we're using liblucihttp now, that library is the appropriate place to
add such decoding helper functions.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
This commit is contained in:
parent
59dea0230c
commit
1d5a3123ed
3 changed files with 3 additions and 176 deletions
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* LuCI Template - Lua binding
|
||||
*
|
||||
* Copyright (C) 2009-2018 Jo-Philipp Wich <jo@mein.io>
|
||||
* Copyright (C) 2009 Jo-Philipp Wich <jow@openwrt.org>
|
||||
*
|
||||
* 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 },
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* LuCI Template - Utility functions
|
||||
*
|
||||
* Copyright (C) 2010-2018 Jo-Philipp Wich <jo@mein.io>
|
||||
* Copyright (C) 2010 Jo-Philipp Wich <jow@openwrt.org>
|
||||
*
|
||||
* 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)
|
||||
{
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* LuCI Template - Utility header
|
||||
*
|
||||
* Copyright (C) 2010-2018 Jo-Philipp Wich <jo@mein.io>
|
||||
* Copyright (C) 2010-2012 Jo-Philipp Wich <jow@openwrt.org>
|
||||
*
|
||||
* 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 <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdbool.h>
|
||||
#include <ctype.h>
|
||||
|
||||
|
||||
/* 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);
|
||||
|
|
Loading…
Reference in a new issue