diff --git a/src/plugins/relay/api/relay-api-msg.c b/src/plugins/relay/api/relay-api-msg.c index 2c0cd1ac5..ef63eba51 100644 --- a/src/plugins/relay/api/relay-api-msg.c +++ b/src/plugins/relay/api/relay-api-msg.c @@ -248,7 +248,7 @@ relay_api_msg_send_error_json (struct t_relay_client *client, { cJSON *json; int num_bytes; - char *error_msg, *str_json; + char *str_json; if (!client || !message || !format) return -1; @@ -259,43 +259,37 @@ relay_api_msg_send_error_json (struct t_relay_client *client, num_bytes = -1; + json = cJSON_CreateObject (); + if (!json) + return -1; + + cJSON_AddItemToObject (json, "error", cJSON_CreateString (vbuffer)); + if (client->websocket == RELAY_CLIENT_WEBSOCKET_READY) { /* * with established websocket, we return JSON string instead of * an HTTP response */ - json = cJSON_CreateObject (); - if (json) - { - cJSON_AddItemToObject (json, "error", cJSON_CreateString (vbuffer)); - num_bytes = relay_api_msg_send_json_internal ( - client, - return_code, - message, - NULL, /* event_name */ - -1, /* event_buffer_id */ - headers, - NULL, /* body_type */ - json); - cJSON_Delete (json); - } + num_bytes = relay_api_msg_send_json_internal ( + client, + return_code, + message, + NULL, /* event_name */ + -1, /* event_buffer_id */ + headers, + NULL, /* body_type */ + json); } else { - error_msg = weechat_string_replace (vbuffer, "\"", "\\\""); - if (error_msg) - { - if (weechat_asprintf (&str_json, "{\"error\": \"%s\"}", error_msg) >= 0) - { - num_bytes = relay_http_send_json (client, return_code, message, - headers, str_json); - free (str_json); - } - free (error_msg); - } + str_json = cJSON_PrintUnformatted (json); + num_bytes = relay_http_send_json (client, return_code, message, + headers, str_json); + free (str_json); } + cJSON_Delete (json); free (vbuffer); return num_bytes; } diff --git a/tests/unit/plugins/relay/api/test-relay-api-protocol.cpp b/tests/unit/plugins/relay/api/test-relay-api-protocol.cpp index e6c63ac22..f315724a6 100644 --- a/tests/unit/plugins/relay/api/test-relay-api-protocol.cpp +++ b/tests/unit/plugins/relay/api/test-relay-api-protocol.cpp @@ -379,9 +379,9 @@ TEST(RelayApiProtocolWithClient, CbBuffers) STRCMP_EQUAL("HTTP/1.1 404 Not Found\r\n" "Access-Control-Allow-Origin: *\r\n" "Content-Type: application/json; charset=utf-8\r\n" - "Content-Length: 41\r\n" + "Content-Length: 40\r\n" "\r\n" - "{\"error\": \"Buffer \\\"invalid\\\" not found\"}", + "{\"error\":\"Buffer \\\"invalid\\\" not found\"}", data_sent[0]); /* error: invalid buffer id */ @@ -389,9 +389,9 @@ TEST(RelayApiProtocolWithClient, CbBuffers) STRCMP_EQUAL("HTTP/1.1 404 Not Found\r\n" "Access-Control-Allow-Origin: *\r\n" "Content-Type: application/json; charset=utf-8\r\n" - "Content-Length: 37\r\n" + "Content-Length: 36\r\n" "\r\n" - "{\"error\": \"Buffer \\\"123\\\" not found\"}", + "{\"error\":\"Buffer \\\"123\\\" not found\"}", data_sent[0]); /* error: invalid sub-resource */ @@ -399,9 +399,9 @@ TEST(RelayApiProtocolWithClient, CbBuffers) STRCMP_EQUAL("HTTP/1.1 404 Not Found\r\n" "Access-Control-Allow-Origin: *\r\n" "Content-Type: application/json; charset=utf-8\r\n" - "Content-Length: 59\r\n" + "Content-Length: 58\r\n" "\r\n" - "{\"error\": \"Sub-resource of buffers not found: \\\"invalid\\\"\"}", + "{\"error\":\"Sub-resource of buffers not found: \\\"invalid\\\"\"}", data_sent[0]); /* error: too many parameters in path */ @@ -626,9 +626,9 @@ TEST(RelayApiProtocolWithClient, CbCompletion) STRCMP_EQUAL("HTTP/1.1 400 Bad Request\r\n" "Access-Control-Allow-Origin: *\r\n" "Content-Type: application/json; charset=utf-8\r\n" - "Content-Length: 41\r\n" + "Content-Length: 40\r\n" "\r\n" - "{\"error\": \"Buffer \\\"invalid\\\" not found\"}", + "{\"error\":\"Buffer \\\"invalid\\\" not found\"}", data_sent[0]); /* on core buffer, with buffer name. examples from relay protocol examples: @@ -705,9 +705,9 @@ TEST(RelayApiProtocolWithClient, CbInput) STRCMP_EQUAL("HTTP/1.1 400 Bad Request\r\n" "Access-Control-Allow-Origin: *\r\n" "Content-Type: application/json; charset=utf-8\r\n" - "Content-Length: 41\r\n" + "Content-Length: 40\r\n" "\r\n" - "{\"error\": \"Buffer \\\"invalid\\\" not found\"}", + "{\"error\":\"Buffer \\\"invalid\\\" not found\"}", data_sent[0]); /* on core buffer, without buffer name */ @@ -786,9 +786,9 @@ TEST(RelayApiProtocolWithClient, CbSync) STRCMP_EQUAL("HTTP/1.1 403 Forbidden\r\n" "Access-Control-Allow-Origin: *\r\n" "Content-Type: application/json; charset=utf-8\r\n" - "Content-Length: 72\r\n" + "Content-Length: 71\r\n" "\r\n" - "{\"error\": \"Sync resource is available only with " + "{\"error\":\"Sync resource is available only with " "a websocket connection\"}", data_sent[0]); }