Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions server/gdial-app.c
Original file line number Diff line number Diff line change
Expand Up @@ -529,8 +529,11 @@ gchar * gdial_app_state_response_new(GDialApp *app, const gchar *dial_ver, const
xmlNodePtr noptions = xmlNewChild(nservice, NULL, BAD_CAST "options", BAD_CAST NULL); {
xmlNewProp(noptions, BAD_CAST "allowStop", BAD_CAST "true");
}
xmlNewChild(nservice, NULL, BAD_CAST "state", BAD_CAST gdial_app_state_to_string(state));
if (app->state != GDIAL_APP_STATE_STOPPED) {
const gchar *state_str = gdial_app_state_to_string(state);
if (state_str) {
xmlNewChild(nservice, NULL, BAD_CAST "state", BAD_CAST state_str);
}
if (state != GDIAL_APP_STATE_STOPPED) {
xmlNodePtr nlink = xmlNewChild(nservice, NULL, BAD_CAST "link", BAD_CAST NULL);
xmlNewProp(nlink, BAD_CAST "rel", BAD_CAST "run");
xmlNewProp(nlink, BAD_CAST "href", BAD_CAST "run");
Expand Down
6 changes: 3 additions & 3 deletions server/gdial-debug.h
Original file line number Diff line number Diff line change
Expand Up @@ -60,9 +60,9 @@ do {\
else {\
GString *msg_buf = g_string_new("");\
g_string_printf(msg_buf, "\r\nFailed Condition: [%s] - Error Message: "format, #expr, __VA_ARGS__);\
gchar *msg = g_string_free(msg_buf, FALSE);\
GDIAL_LOGWARNING("%s", msg); /*g_warn_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);*/ \
g_free(msg);\
gchar *warn_msg_str = g_string_free(msg_buf, FALSE);\
GDIAL_LOGWARNING("%s", warn_msg_str); /*g_warn_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, warn_msg_str);*/ \
g_free(warn_msg_str);\
}\
} while (0)

Expand Down
2 changes: 2 additions & 0 deletions server/libsoup/2.4/gdial-ssdp.c
Original file line number Diff line number Diff line change
Expand Up @@ -250,6 +250,8 @@ int gdial_ssdp_new(SoupServer *ssdp_http_server, GDialOptions *options, const gc
app_random_uuid = g_strdup(random_uuid);
gchar *dail_ssdp_handler = g_strdup_printf("/%s/%s", random_uuid,"dd.xml");
soup_server_add_handler(ssdp_http_server_, dail_ssdp_handler, ssdp_http_server_callback, NULL, NULL);
g_free(dail_ssdp_handler);
dail_ssdp_handler = NULL;
ssdp_client_ = ssdp_client;

return 0;
Expand Down
44 changes: 21 additions & 23 deletions server/libsoup/3.0/gdial-rest.c
Original file line number Diff line number Diff line change
Expand Up @@ -433,7 +433,9 @@ static void gdial_rest_server_handle_POST(GDialRestServer *gdial_rest_server, So
guint listening_port = g_inet_socket_address_get_port(G_INET_SOCKET_ADDRESS(socket_addr));
gdial_rest_server_http_return_if_fail(listening_port != 0, msg, SOUP_STATUS_INTERNAL_SERVER_ERROR);

GDIAL_LOGERROR("Starting the app with payload %.*s", (int)request_body->length, request_body->data);
const char *payload_str = (request_body && request_body->data) ? request_body->data : "";
int payload_len = (request_body) ? (int)request_body->length : 0;
GDIAL_LOGERROR("Starting the app with payload %.*s", payload_len, payload_str);
GDialApp *app = gdial_app_find_instance_by_name(app_registry->name);
gboolean new_app_instance = FALSE;
gboolean first_instance_created = FALSE;
Expand Down Expand Up @@ -462,8 +464,8 @@ static void gdial_rest_server_handle_POST(GDialRestServer *gdial_rest_server, So
if (app_registry->use_additional_data) {
additional_data_url = gdial_rest_server_new_additional_data_url(listening_port, app_registry->name, FALSE, app_registry->app_uri );
}
gchar *additional_data_url_safe = g_uri_escape_string(additional_data_url, NULL, FALSE);
GDIAL_LOGINFO("additionalDataUrl = %s, %s", additional_data_url, additional_data_url_safe);
gchar *additional_data_url_safe = additional_data_url ? g_uri_escape_string(additional_data_url, NULL, FALSE) : NULL;
GDIAL_LOGINFO("additionalDataUrl = %s, %s", additional_data_url ? additional_data_url : "(null)", additional_data_url_safe ? additional_data_url_safe : "(null)");
g_signal_connect_object(app, "state-changed", G_CALLBACK(gdial_rest_app_state_changed_cb), gdial_rest_server, 0);
const gchar *query_str = g_uri_get_query(soup_server_message_get_uri(msg));
gchar *query_str_safe = NULL;
Expand All @@ -480,7 +482,7 @@ static void gdial_rest_server_handle_POST(GDialRestServer *gdial_rest_server, So
query_str_safe = g_strdup(query_str);
}
}
const gchar *payload = request_body->data;
const gchar *payload = (request_body) ? request_body->data : NULL;
gchar *payload_safe = NULL;
if (payload && strlen(payload)) {
if (g_str_has_prefix(app->name, "YouTube")) {
Expand All @@ -497,15 +499,8 @@ static void gdial_rest_server_handle_POST(GDialRestServer *gdial_rest_server, So
start_error = gdial_app_start(app, payload_safe, query_str_safe, additional_data_url_safe, gdial_rest_server);
if (query_str_safe) g_free(query_str_safe);
if (payload_safe) g_free(payload_safe);
free(additional_data_url_safe);
g_free(additional_data_url);
}
else {
/*
* start_error = NONE;
* app exist, and could be in hidden state, so resume;
*/
start_error = gdial_app_start(app, NULL, NULL, NULL, gdial_rest_server);
if (additional_data_url_safe) free(additional_data_url_safe);
if (additional_data_url) g_free(additional_data_url);
Comment thread
balav08 marked this conversation as resolved.
}

/*
Expand All @@ -515,11 +510,12 @@ static void gdial_rest_server_handle_POST(GDialRestServer *gdial_rest_server, So
* created;
*/
if (start_error == GDIAL_APP_ERROR_NONE) {
soup_message_headers_replace(soup_server_message_get_response_headers(msg), "Content-Type", "text/plain; charset=utf-8");
gdial_soup_message_headers_replace_va(soup_server_message_get_response_headers(msg), "Location", "http://%s:%d%s/%s/run",
g_uri_get_host(soup_server_message_get_uri(msg)), listening_port, GDIAL_REST_HTTP_APPS_URI, app->name);
gdial_soup_message_headers_set_Allow_Origin(msg, TRUE);
if (new_app_instance) {
if (app) {
soup_message_headers_replace(soup_server_message_get_response_headers(msg), "Content-Type", "text/plain; charset=utf-8");
gdial_soup_message_headers_replace_va(soup_server_message_get_response_headers(msg), "Location", "http://%s:%d%s/%s/run",
g_uri_get_host(soup_server_message_get_uri(msg)), listening_port, GDIAL_REST_HTTP_APPS_URI, app->name);
gdial_soup_message_headers_set_Allow_Origin(msg, TRUE);
if (new_app_instance) {
if (g_strcmp0(app->name, "system") != 0 && (first_instance_created || current_state == GDIAL_APP_STATE_HIDE)) {
soup_server_message_set_status(msg, SOUP_STATUS_CREATED, NULL);
}
Expand All @@ -537,15 +533,17 @@ static void gdial_rest_server_handle_POST(GDialRestServer *gdial_rest_server, So
GDIAL_LOGINFO("POST request payload = [%s]", request_body->data);
gdial_app_set_launch_payload(app, request_body->data);
}
}
}
}
else {
soup_server_message_set_status(msg, SOUP_STATUS_OK, NULL);
}
}
else {
g_object_unref(app);
// FIX(Copilot): Set app to NULL after unref to prevent use-after-free
app = NULL;
if (app) {
g_object_unref(app);
app = NULL;
}
gdial_rest_server_http_return_if(start_error == GDIAL_APP_ERROR_FORBIDDEN, msg, SOUP_STATUS_FORBIDDEN);
gdial_rest_server_http_return_if(start_error == GDIAL_APP_ERROR_UNAUTH, msg, SOUP_STATUS_UNAUTHORIZED);
gdial_rest_server_http_return_if(TRUE, msg, SOUP_STATUS_SERVICE_UNAVAILABLE);
Expand Down Expand Up @@ -1333,7 +1331,7 @@ GDIAL_STATIC_INLINE void *GET_APP_response_builder_set_additionalData(void *buil

GDIAL_STATIC_INLINE gchar *GET_APP_response_builder_build(void *builder, gsize *length) {
GDialServerResponseBuilderGetApp * rbuilder = (GDialServerResponseBuilderGetApp *)builder;
GString *rbuf = g_string_new_len('\0', 128);
GString *rbuf = g_string_new_len(NULL, 128);
if(rbuf == NULL){
return NULL;
}
Expand Down
Loading