void HttpProtocol::DecodeCookies(Variant &variables, char *data) { ASSERT(data && *data); char *strtok_buf = NULL; char *var = strtok_r(data, ";", &strtok_buf); while (var) { char *val = strchr(var, '='); // Remove leading spaces from cookie names, needed for multi-cookie // header where ; can be followed by a space */ while (isspace(*var)) { var++; } if (var != val && *var != '\0') { if (val) { /* have a value */ int len = val - var; char *name = url_decode(var, len); String sname(name, len, AttachString); ++val; len = strlen(val); char *value = url_decode(val, len); if (RuntimeOption::EnableMagicQuotesGpc) { char *slashedvalue = string_addslashes(value, len); free(value); value = slashedvalue; } String svalue(value, len, AttachString); register_variable(variables, (char*)sname.data(), svalue, false); } else { int len = strlen(var); char *name = url_decode(var, len); String sname(name, len, AttachString); register_variable(variables, (char*)sname.data(), "", false); } } var = strtok_r(NULL, ";", &strtok_buf); } }
void HttpProtocol::DecodeParameters(Variant &variables, const char *data, int size, bool post /* = false */) { if (data == NULL || size == 0) { return; } const char *s = data; const char *e = s + size; const char *p, *val; while (s < e && (p = (const char *)memchr(s, '&', (e - s)))) { last_value: if ((val = (const char *)memchr(s, '=', (p - s)))) { int len = val - s; char *name = url_decode(s, len); String sname(name, len, AttachString); val++; len = p - val; char *value = url_decode(val, len); if (RuntimeOption::EnableMagicQuotesGpc) { char *slashedvalue = string_addslashes(value, len); free(value); value = slashedvalue; } String svalue(value, len, AttachString); register_variable(variables, (char*)sname.data(), svalue); } else if (!post) { int len = p - s; char *name = url_decode(s, len); String sname(name, len, AttachString); register_variable(variables, (char*)sname.data(), ""); } s = p + 1; } if (s < e) { p = e; goto last_value; } }
String StringUtil::SqlEncode(CStrRef input) { if (input.empty()) return input; int len = input.size(); char *ret = string_addslashes(input.c_str(), len); return String(ret, len, AttachString); }