fix wasm session and mysql placeholder state
This commit is contained in:
parent
991a0f62b4
commit
a6cb1c0390
@ -107,6 +107,14 @@ RENDER(Request& context)
|
||||
mysql_placeholder_error.find("positional ? placeholders are not supported") != String::npos ? "pass" : "fail",
|
||||
mysql_placeholder_error
|
||||
);
|
||||
StringMap underscore_params;
|
||||
underscore_params["display_name"] = "Ada";
|
||||
String parsed_underscore = placeholder_guard.parse_query_parameters("select :display_name as name", underscore_params);
|
||||
mark(
|
||||
"mysql named placeholders accept underscores",
|
||||
parsed_underscore.find("'Ada'") != String::npos && parsed_underscore.find("_name") == String::npos ? "pass" : "fail",
|
||||
parsed_underscore
|
||||
);
|
||||
|
||||
MySQL mysql;
|
||||
mysql.connect("127.0.0.1", "root", "");
|
||||
|
||||
@ -294,7 +294,7 @@ String MySQL::parse_query_parameters(String query, StringMap map)
|
||||
}
|
||||
else if(mode == 1) // identifier mode
|
||||
{
|
||||
if(isalnum(c))
|
||||
if(isalnum(c) || c == '_')
|
||||
{
|
||||
identifier.append(1, c);
|
||||
}
|
||||
|
||||
@ -133,11 +133,16 @@ String wasm_backend_serve(Request& request, const String& entry_unit, const Stri
|
||||
for(auto& entry : source)
|
||||
ctx[key][entry.first] = entry.second;
|
||||
};
|
||||
if(request.server)
|
||||
copy_map(request.server->config, "server_config");
|
||||
copy_map(request.params, "params");
|
||||
copy_map(request.get, "get");
|
||||
copy_map(request.post, "post");
|
||||
copy_map(request.cookies, "cookies");
|
||||
copy_map(request.session, "session");
|
||||
ctx["session_id"] = request.session_id;
|
||||
ctx["session_name"] = request.session_name;
|
||||
ctx["session_loaded_hash"] = request.session_loaded_hash;
|
||||
ctx["entry_unit"] = entry_unit;
|
||||
// Raw request body: cli_input() parses a JSON CLI payload from context.in,
|
||||
// and serve_http handlers read it as req->in; carried into the workspace.
|
||||
@ -233,6 +238,12 @@ String wasm_backend_serve(Request& request, const String& entry_unit, const Stri
|
||||
request.session[name] = value.to_string();
|
||||
});
|
||||
}
|
||||
if(response.meta.key("session_id"))
|
||||
request.session_id = response.meta["session_id"].to_string();
|
||||
if(response.meta.key("session_name"))
|
||||
request.session_name = response.meta["session_name"].to_string();
|
||||
if(response.meta.key("session_loaded_hash"))
|
||||
request.session_loaded_hash = response.meta["session_loaded_hash"].to_string();
|
||||
|
||||
// body into the request's primary output stream (ob_stack[0]); the
|
||||
// transport's assemble_output_buffer concatenates the stack
|
||||
|
||||
@ -222,7 +222,7 @@ String MySQL::parse_query_parameters(String query, StringMap map)
|
||||
}
|
||||
else if(mode == 1)
|
||||
{
|
||||
if(isalnum(c))
|
||||
if(isalnum(c) || c == '_')
|
||||
identifier.append(1, c);
|
||||
else
|
||||
{
|
||||
@ -761,6 +761,9 @@ void uce_wasm_core_reset_request()
|
||||
wasm_response_meta = "";
|
||||
wasm_request.cookies.clear();
|
||||
wasm_request.session.clear();
|
||||
wasm_request.session_id = "";
|
||||
wasm_request.session_name = "";
|
||||
wasm_request.session_loaded_hash = "";
|
||||
wasm_request.out = "";
|
||||
wasm_request.resources.current_unit_file = "";
|
||||
wasm_component_slots.clear();
|
||||
@ -787,11 +790,19 @@ int uce_wasm_apply_context(const char* buf, size_t len)
|
||||
dest[key] = item.to_string();
|
||||
});
|
||||
};
|
||||
if(decoded.key("server_config"))
|
||||
apply_map(decoded.key("server_config"), wasm_server.config);
|
||||
apply_map(decoded.key("params"), wasm_request.params);
|
||||
apply_map(decoded.key("get"), wasm_request.get);
|
||||
apply_map(decoded.key("post"), wasm_request.post);
|
||||
apply_map(decoded.key("cookies"), wasm_request.cookies);
|
||||
apply_map(decoded.key("session"), wasm_request.session);
|
||||
if(DValue* session_id = decoded.key("session_id"))
|
||||
wasm_request.session_id = session_id->to_string();
|
||||
if(DValue* session_name = decoded.key("session_name"))
|
||||
wasm_request.session_name = session_name->to_string();
|
||||
if(DValue* session_loaded_hash = decoded.key("session_loaded_hash"))
|
||||
wasm_request.session_loaded_hash = session_loaded_hash->to_string();
|
||||
DValue* entry = decoded.key("entry_unit");
|
||||
if(entry)
|
||||
wasm_request.resources.current_unit_file = entry->to_string();
|
||||
@ -847,6 +858,9 @@ void uce_wasm_finish_response_meta()
|
||||
}
|
||||
for(auto& entry : wasm_request.session)
|
||||
meta["session"][entry.first] = entry.second;
|
||||
meta["session_id"] = wasm_request.session_id;
|
||||
meta["session_name"] = wasm_request.session_name;
|
||||
meta["session_loaded_hash"] = wasm_request.session_loaded_hash;
|
||||
bool ws_has_commands = !wasm_request.resources.websocket_dispatch_commands._map.empty();
|
||||
bool ws_state_changed = false;
|
||||
if(wasm_request.resources.websocket_dispatch_capture)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user