Fix URI decode issue for feedback module

This commit is contained in:
Ilja Kartašov 2019-04-29 09:08:18 +02:00
parent e623c0dce1
commit 08e771eaa0
3 changed files with 38 additions and 4 deletions

View File

@ -152,3 +152,26 @@ ax_query_feed(AxQuery query, const char *data, int32_t length)
} }
void
ax_query__decode(char *e_str)
{
char *p = e_str,
hex[3] = {0,0,0};
do {
switch(*e_str) {
case '%':
hex[0] = *(++e_str);
hex[1] = *(++e_str);
*p++ = (char)strtol(hex, NULL, 16);
break;
case '+':
*p++ = ' ';
break;
default:
*p++ = *e_str;
}
} while(*e_str++ != 0);
}

View File

@ -51,4 +51,7 @@ AislStatus
ax_query_feed(AxQuery query, const char *data, int32_t length); ax_query_feed(AxQuery query, const char *data, int32_t length);
void
ax_query__decode(char *e_str);
#endif /* !QUERY_H */ #endif /* !QUERY_H */

View File

@ -59,17 +59,25 @@ on_input_var( const char *key, uint32_t k_len,
{ {
Context ctx = (Context) p_ctx; Context ctx = (Context) p_ctx;
AxFeedback mod = (AxFeedback)((AxContext)ctx)->mod; AxFeedback mod = (AxFeedback)((AxContext)ctx)->mod;
char **out = NULL;
if (!ctx->email && k_len == mod->name_email_length) { if (!ctx->email && k_len == mod->name_email_length) {
if (strncmp(key, mod->name_email, k_len)==0) if (strncmp(key, mod->name_email, k_len) == 0) {
return (cstuff_strncpy(&ctx->email, val, v_len) == -1); out = &ctx->email;
}
} }
if (!ctx->msg && k_len == mod->name_msg_length) { if (!ctx->msg && k_len == mod->name_msg_length) {
if (strncmp(key, mod->name_msg, k_len)==0) if (strncmp(key, mod->name_msg, k_len)==0) {
return (cstuff_strncpy(&ctx->msg, val, v_len) == -1); out = &ctx->msg;
}
} }
if (out) {
if (cstuff_strncpy(out, val, v_len) == -1)
return -1;
ax_query__decode(*out);
}
return 0; return 0;
} }