You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by kg...@apache.org on 2020/10/19 13:35:02 UTC

[qpid-dispatch] branch dev-protocol-adaptors-2 updated: NO-JIRA: cleanup field leaks and format specifiers.

This is an automated email from the ASF dual-hosted git repository.

kgiusti pushed a commit to branch dev-protocol-adaptors-2
in repository https://gitbox.apache.org/repos/asf/qpid-dispatch.git


The following commit(s) were added to refs/heads/dev-protocol-adaptors-2 by this push:
     new c68d48e  NO-JIRA: cleanup field leaks and format specifiers.
c68d48e is described below

commit c68d48e6743cd7cbfc8e1abad436d4d5ae4fde5a
Author: Kenneth Giusti <kg...@apache.org>
AuthorDate: Thu Oct 15 17:03:12 2020 -0400

    NO-JIRA: cleanup field leaks and format specifiers.
---
 src/adaptors/http1/http1_client.c | 14 +++++-----
 src/adaptors/http1/http1_server.c |  5 +++-
 src/adaptors/reference_adaptor.c  | 12 +++-----
 src/adaptors/tcp_adaptor.c        | 58 +++++++++++++++++++++------------------
 4 files changed, 46 insertions(+), 43 deletions(-)

diff --git a/src/adaptors/http1/http1_client.c b/src/adaptors/http1/http1_client.c
index e1096da..9d87f9d 100644
--- a/src/adaptors/http1/http1_client.c
+++ b/src/adaptors/http1/http1_client.c
@@ -368,14 +368,14 @@ static void _handle_connection_events(pn_event_t *e, qd_server_t *qd_server, voi
     }
     case PN_RAW_CONNECTION_CLOSED_READ:
     case PN_RAW_CONNECTION_CLOSED_WRITE: {
-        qd_log(log, QD_LOG_DEBUG, "[C%i] Closed for %s", hconn->conn_id,
+        qd_log(log, QD_LOG_DEBUG, "[C%"PRIu64"] Closed for %s", hconn->conn_id,
                pn_event_type(e) == PN_RAW_CONNECTION_CLOSED_READ
                ? "reading" : "writing");
         pn_raw_connection_close(hconn->raw_conn);
         break;
     }
     case PN_RAW_CONNECTION_DISCONNECTED: {
-        qd_log(log, QD_LOG_INFO, "[C%i] Disconnected", hconn->conn_id);
+        qd_log(log, QD_LOG_INFO, "[C%"PRIu64"] Disconnected", hconn->conn_id);
         pn_raw_connection_set_context(hconn->raw_conn, 0);
 
         // prevent core from waking this connection
@@ -403,7 +403,7 @@ static void _handle_connection_events(pn_event_t *e, qd_server_t *qd_server, voi
         return;  // hconn no longer valid
     }
     case PN_RAW_CONNECTION_NEED_WRITE_BUFFERS: {
-        qd_log(log, QD_LOG_DEBUG, "[C%i] Need write buffers", hconn->conn_id);
+        qd_log(log, QD_LOG_DEBUG, "[C%"PRIu64"] Need write buffers", hconn->conn_id);
         _write_pending_response((_client_request_t*) DEQ_HEAD(hconn->requests));
         break;
     }
@@ -465,7 +465,7 @@ static void _handle_connection_events(pn_event_t *e, qd_server_t *qd_server, voi
     // check if the head request is done
 
     bool need_close = false;
-    _client_request_t *hreq = (_client_request_t *)(hconn ? DEQ_HEAD(hconn->requests) : 0);
+    _client_request_t *hreq = (_client_request_t *)DEQ_HEAD(hconn->requests);
     if (hreq) {
         // Can we retire the current outgoing response messages?
         _client_response_msg_t *rmsg = DEQ_HEAD(hreq->responses);
@@ -531,7 +531,7 @@ static void _client_tx_buffers_cb(h1_codec_request_state_t *hrs, qd_buffer_list_
     if (!hconn->raw_conn) {
         // client connection has been lost
         qd_log(qdr_http1_adaptor->log, QD_LOG_WARNING,
-               "[C%i] Discarding outgoing data - client connection closed", hconn->conn_id);
+               "[C%"PRIu64"] Discarding outgoing data - client connection closed", hconn->conn_id);
         qd_buffer_list_free_buffers(blist);
         return;
     }
@@ -565,7 +565,7 @@ static void _client_tx_body_data_cb(h1_codec_request_state_t *hrs, qd_message_bo
     if (!hconn->raw_conn) {
         // client connection has been lost
         qd_log(qdr_http1_adaptor->log, QD_LOG_WARNING,
-               "[C%i] Discarding outgoing data - client connection closed", hconn->conn_id);
+               "[C%"PRIu64"] Discarding outgoing data - client connection closed", hconn->conn_id);
         qd_message_body_data_release(body_data);
         return;
     }
@@ -1284,7 +1284,7 @@ static void _write_pending_response(_client_request_t *hreq)
         _client_response_msg_t *rmsg = DEQ_HEAD(hreq->responses);
         if (rmsg && rmsg->out_data.write_ptr) {
             uint64_t written = qdr_http1_write_out_data(hreq->base.hconn, &rmsg->out_data);
-            qd_log(qdr_http1_adaptor->log, QD_LOG_DEBUG, "[C%i] %"PRIu64" octets written",
+            qd_log(qdr_http1_adaptor->log, QD_LOG_DEBUG, "[C%"PRIu64"] %"PRIu64" octets written",
                    hreq->base.hconn->conn_id, written);
         }
     }
diff --git a/src/adaptors/http1/http1_server.c b/src/adaptors/http1/http1_server.c
index d76f343..f678bde 100644
--- a/src/adaptors/http1/http1_server.c
+++ b/src/adaptors/http1/http1_server.c
@@ -91,7 +91,7 @@ ALLOC_DEFINE(_server_request_t);
 
 
 #define DEFAULT_CAPACITY 250
-#define RETRY_PAUSE_MSEC 500
+#define RETRY_PAUSE_MSEC ((qd_duration_t)500)
 #define MAX_RECONNECT    5  // 5 * 500 = 2.5 sec
 
 static void _server_tx_buffers_cb(h1_codec_request_state_t *lib_hrs, qd_buffer_list_t *blist, unsigned int len);
@@ -644,6 +644,9 @@ static void _handle_connection_events(pn_event_t *e, qd_server_t *qd_server, voi
                 qd_log(log, QD_LOG_DEBUG, "[C%"PRIu64"] HTTP request completed!", hconn->conn_id);
                 _server_request_free(hreq);
 
+                // coverity ignores the fact that _server_request_free() calls
+                // the base cleanup which removes hreq from hconn->requests.
+                // coverity[use_after_free]
                 hreq = (_server_request_t*) DEQ_HEAD(hconn->requests);
                 if (hreq)
                     _write_pending_request(hreq);
diff --git a/src/adaptors/reference_adaptor.c b/src/adaptors/reference_adaptor.c
index 29d331b..3a89f63 100644
--- a/src/adaptors/reference_adaptor.c
+++ b/src/adaptors/reference_adaptor.c
@@ -79,15 +79,11 @@ static void qdr_ref_second_attach(void *context, qdr_link_t *link,
     ftarget[0] = '\0';
     fsource[0] = '\0';
 
-    if (!!source) {
-        size_t size = TERM_SIZE;
-        qdr_terminus_format(source, fsource, &size);
-    }
+    size_t size = TERM_SIZE;
+    qdr_terminus_format(source, fsource, &size);
 
-    if (!!target) {
-        size_t size = TERM_SIZE;
-        qdr_terminus_format(target, ftarget, &size);
-    }
+    size = TERM_SIZE;
+    qdr_terminus_format(target, ftarget, &size);
 
     printf("qdr_ref_second_attach: source=%s target=%s\n", fsource, ftarget);
 
diff --git a/src/adaptors/tcp_adaptor.c b/src/adaptors/tcp_adaptor.c
index f67ae86..e0d0d56 100644
--- a/src/adaptors/tcp_adaptor.c
+++ b/src/adaptors/tcp_adaptor.c
@@ -89,7 +89,7 @@ static void on_activate(void *context)
 {
     qdr_tcp_connection_t* conn = (qdr_tcp_connection_t*) context;
 
-    qd_log(tcp_adaptor->log_source, QD_LOG_DEBUG, "[C%i] on_activate", conn->conn_id);
+    qd_log(tcp_adaptor->log_source, QD_LOG_DEBUG, "[C%"PRIu64"] on_activate", conn->conn_id);
     while (qdr_connection_process(conn->conn)) {}
     if (conn->egress_dispatcher && conn->connector_closed) {
         qdr_connection_closed(conn->conn);
@@ -144,7 +144,7 @@ static int handle_incoming(qdr_tcp_connection_t *conn)
         qd_message_extend(qdr_delivery_message(conn->instream), field);
         qd_compose_free(field);
         qdr_delivery_continue(tcp_adaptor->core, conn->instream, false);
-        qd_log(tcp_adaptor->log_source, QD_LOG_DEBUG, "[C%i][L%i] Continuing message with %i bytes", conn->conn_id, conn->incoming_id, count);
+        qd_log(tcp_adaptor->log_source, QD_LOG_DEBUG, "[C%"PRIu64"][L%"PRIu64"] Continuing message with %i bytes", conn->conn_id, conn->incoming_id, count);
     } else {
         qd_message_t *msg = qd_message();
 
@@ -174,7 +174,7 @@ static int handle_incoming(qdr_tcp_connection_t *conn)
         qd_compose_free(props);
 
         conn->instream = qdr_link_deliver(conn->incoming, msg, 0, false, 0, 0, 0, 0);
-        qd_log(tcp_adaptor->log_source, QD_LOG_DEBUG, "[C%i][L%i] Initiating message with %i bytes", conn->conn_id, conn->incoming_id, count);
+        qd_log(tcp_adaptor->log_source, QD_LOG_DEBUG, "[C%"PRIu64"][L%"PRIu64"] Initiating message with %i bytes", conn->conn_id, conn->incoming_id, count);
     }
     return count;
 }
@@ -228,11 +228,11 @@ static int read_message_body(qdr_tcp_connection_t *conn, qd_message_t *msg, pn_r
         } else {
             switch (body_data_result) {
             case QD_MESSAGE_BODY_DATA_NO_MORE:
-                qd_log(tcp_adaptor->log_source, QD_LOG_INFO, "[C%i] EOS", conn->conn_id); break;
+                qd_log(tcp_adaptor->log_source, QD_LOG_INFO, "[C%"PRIu64"] EOS", conn->conn_id); break;
             case QD_MESSAGE_BODY_DATA_INVALID:
-                qd_log(tcp_adaptor->log_source, QD_LOG_ERROR, "[C%i] Invalid body data for streaming message", conn->conn_id); break;
+                qd_log(tcp_adaptor->log_source, QD_LOG_ERROR, "[C%"PRIu64"] Invalid body data for streaming message", conn->conn_id); break;
             case QD_MESSAGE_BODY_DATA_NOT_DATA:
-                qd_log(tcp_adaptor->log_source, QD_LOG_ERROR, "[C%i] Invalid body; expected data section", conn->conn_id); break;
+                qd_log(tcp_adaptor->log_source, QD_LOG_ERROR, "[C%"PRIu64"] Invalid body; expected data section", conn->conn_id); break;
             default:
                 break;
             }
@@ -263,10 +263,10 @@ static void handle_outgoing(qdr_tcp_connection_t *conn)
                 if (buffs[i].bytes) {
                     bytes_written += buffs[i].size;
                 } else {
-                    qd_log(tcp_adaptor->log_source, QD_LOG_ERROR, "[C%i] empty buffer can't be written (%i of %i)", conn->conn_id, i+1, used);
+                    qd_log(tcp_adaptor->log_source, QD_LOG_ERROR, "[C%"PRIu64"] empty buffer can't be written (%zu of %zu)", conn->conn_id, i+1, used);
                 }
             }
-            qd_log(tcp_adaptor->log_source, QD_LOG_DEBUG, "[C%i] Writing %i bytes", conn->conn_id, bytes_written);
+            qd_log(tcp_adaptor->log_source, QD_LOG_DEBUG, "[C%"PRIu64"] Writing %i bytes", conn->conn_id, bytes_written);
         }
         if (qd_message_receive_complete(msg) || qd_message_send_complete(msg)) {
             pn_raw_connection_close(conn->socket);
@@ -383,43 +383,43 @@ static void handle_connection_event(pn_event_t *e, qd_server_t *qd_server, void
     case PN_RAW_CONNECTION_CONNECTED: {
         if (conn->ingress) {
             qdr_tcp_connection_ingress_accept(conn);
-            qd_log(log, QD_LOG_INFO, "[C%i] Accepted from %s", conn->conn_id, conn->remote_address);
+            qd_log(log, QD_LOG_INFO, "[C%"PRIu64"] Accepted from %s", conn->conn_id, conn->remote_address);
             break;
         } else {
             conn->remote_address = get_address_string(conn->socket);
             conn->opened_time = tcp_adaptor->core->uptime_ticks;
-            qd_log(log, QD_LOG_INFO, "[C%i] Connected", conn->conn_id);
-            qdr_connection_process(conn->conn);
+            qd_log(log, QD_LOG_INFO, "[C%"PRIu64"] Connected", conn->conn_id);
+            while (qdr_connection_process(conn->conn)) {}
             break;
         }
     }
     case PN_RAW_CONNECTION_CLOSED_READ: {
-        qd_log(log, QD_LOG_DEBUG, "[C%i] Closed for reading", conn->conn_id);
+        qd_log(log, QD_LOG_DEBUG, "[C%"PRIu64"] Closed for reading", conn->conn_id);
         pn_raw_connection_close(conn->socket);
         break;
     }
     case PN_RAW_CONNECTION_CLOSED_WRITE: {
-        qd_log(log, QD_LOG_DEBUG, "[C%i] Closed for writing", conn->conn_id);
+        qd_log(log, QD_LOG_DEBUG, "[C%"PRIu64"] Closed for writing", conn->conn_id);
         pn_raw_connection_close(conn->socket);
         break;
     }
     case PN_RAW_CONNECTION_DISCONNECTED: {
-        qd_log(log, QD_LOG_INFO, "[C%i] Disconnected", conn->conn_id);
+        qd_log(log, QD_LOG_INFO, "[C%"PRIu64"] Disconnected", conn->conn_id);
         handle_disconnected(conn);
         break;
     }
     case PN_RAW_CONNECTION_NEED_WRITE_BUFFERS: {
-        qd_log(log, QD_LOG_DEBUG, "[C%i] Need write buffers", conn->conn_id);
+        qd_log(log, QD_LOG_DEBUG, "[C%"PRIu64"] Need write buffers", conn->conn_id);
         while (qdr_connection_process(conn->conn)) {}
         break;
     }
     case PN_RAW_CONNECTION_NEED_READ_BUFFERS: {
-        qd_log(log, QD_LOG_DEBUG, "[C%i] Need read buffers", conn->conn_id);
+        qd_log(log, QD_LOG_DEBUG, "[C%"PRIu64"] Need read buffers", conn->conn_id);
         while (qdr_connection_process(conn->conn)) {}
         break;
     }
     case PN_RAW_CONNECTION_WAKE: {
-        qd_log(log, QD_LOG_DEBUG, "[C%i] Wake-up", conn->conn_id);
+        qd_log(log, QD_LOG_DEBUG, "[C%"PRIu64"] Wake-up", conn->conn_id);
         while (qdr_connection_process(conn->conn)) {}
         break;
     }
@@ -427,7 +427,7 @@ static void handle_connection_event(pn_event_t *e, qd_server_t *qd_server, void
         int read = handle_incoming(conn);
         conn->last_in_time = tcp_adaptor->core->uptime_ticks;
         conn->bytes_in += read;
-        qd_log(log, QD_LOG_DEBUG, "[C%i] Read %i bytes", conn->conn_id, read);
+        qd_log(log, QD_LOG_DEBUG, "[C%"PRIu64"] Read %i bytes", conn->conn_id, read);
         while (qdr_connection_process(conn->conn)) {}
         break;
     }
@@ -444,7 +444,7 @@ static void handle_connection_event(pn_event_t *e, qd_server_t *qd_server, void
                 }
             }
         }
-        qd_log(log, QD_LOG_DEBUG, "[C%i] Wrote %i bytes", conn->conn_id, written);
+        qd_log(log, QD_LOG_DEBUG, "[C%"PRIu64"] Wrote %i bytes", conn->conn_id, written);
         conn->last_out_time = tcp_adaptor->core->uptime_ticks;
         conn->bytes_out += written;
         while (qdr_connection_process(conn->conn)) {}
@@ -476,7 +476,7 @@ static qdr_tcp_connection_t *qdr_tcp_connection_ingress(qd_tcp_listener_t* liste
 
 static void tcp_connector_establish(qdr_tcp_connection_t *conn)
 {
-    qd_log(tcp_adaptor->log_source, QD_LOG_INFO, "[C%i] Connecting to: %s", conn->conn_id, conn->config.host_port);
+    qd_log(tcp_adaptor->log_source, QD_LOG_INFO, "[C%"PRIu64"] Connecting to: %s", conn->conn_id, conn->config.host_port);
     conn->socket = pn_raw_connection();
     pn_raw_connection_set_context(conn->socket, conn);
     pn_proactor_raw_connect(qd_server_proactor(conn->server), conn->socket, conn->config.host_port);
@@ -843,7 +843,7 @@ static uint64_t qdr_tcp_deliver(void *context, qdr_link_t *link, qdr_delivery_t
     void* link_context = qdr_link_get_context(link);
     if (link_context) {
             qdr_tcp_connection_t* tc = (qdr_tcp_connection_t*) link_context;
-            qd_log(tcp_adaptor->log_source, QD_LOG_DEBUG, "[C%i][L%i] Delivery event", tc->conn_id, tc->outgoing_id);
+            qd_log(tcp_adaptor->log_source, QD_LOG_DEBUG, "[C%"PRIu64"][L%"PRIu64"] Delivery event", tc->conn_id, tc->outgoing_id);
             if (tc->egress_dispatcher) {
                 qdr_tcp_connection_egress(&(tc->config), tc->server, delivery);
             } else if (!tc->outstream) {
@@ -853,8 +853,12 @@ static uint64_t qdr_tcp_deliver(void *context, qdr_link_t *link, qdr_delivery_t
                     //direction once we receive the first part of the
                     //message from client to server
                     qd_message_t *msg = qdr_delivery_message(delivery);
-                    qdr_tcp_connection_copy_global_id(tc, qd_message_field_iterator(msg, QD_FIELD_SUBJECT));
-                    qdr_tcp_connection_copy_reply_to(tc, qd_message_field_iterator(msg, QD_FIELD_REPLY_TO));
+                    qd_iterator_t *f_iter = qd_message_field_iterator(msg, QD_FIELD_SUBJECT);
+                    qdr_tcp_connection_copy_global_id(tc, f_iter);
+                    qd_iterator_free(f_iter);
+                    f_iter = qd_message_field_iterator(msg, QD_FIELD_REPLY_TO);
+                    qdr_tcp_connection_copy_reply_to(tc, f_iter);
+                    qd_iterator_free(f_iter);
                     qdr_terminus_t *target = qdr_terminus(0);
                     qdr_terminus_set_address(target, tc->reply_to);
                     tc->incoming = qdr_link_first_attach(tc->conn,
@@ -892,7 +896,7 @@ static void qdr_tcp_delivery_update(void *context, qdr_delivery_t *dlv, uint64_t
     void* link_context = qdr_link_get_context(qdr_delivery_link(dlv));
     if (link_context) {
         qdr_tcp_connection_t* tc = (qdr_tcp_connection_t*) link_context;
-        qd_log(tcp_adaptor->log_source, QD_LOG_DEBUG, "[C%i] Delivery update", tc->conn_id);
+        qd_log(tcp_adaptor->log_source, QD_LOG_DEBUG, "[C%"PRIu64"] Delivery update", tc->conn_id);
     }
 }
 
@@ -923,7 +927,7 @@ static void qdr_tcp_activate(void *notused, qdr_connection_t *c)
             // fake wakeup by using a timer.
             qd_timer_schedule(conn->activate_timer, 0);
         } else {
-            qd_log(tcp_adaptor->log_source, QD_LOG_ERROR, "[C%i] Cannot activate", conn->conn_id);
+            qd_log(tcp_adaptor->log_source, QD_LOG_ERROR, "[C%"PRIu64"] Cannot activate", conn->conn_id);
         }
     }
 }
@@ -1209,13 +1213,13 @@ static void qdr_add_tcp_connection_CT(qdr_core_t *core, qdr_action_t *action, bo
 {
     qdr_tcp_connection_t *conn = (qdr_tcp_connection_t*) action->args.general.context_1;
     DEQ_INSERT_TAIL(tcp_adaptor->connections, conn);
-    qd_log(tcp_adaptor->log_source, QD_LOG_DEBUG, "Added tcp connection %s (%i)", conn->config.host_port, DEQ_SIZE(tcp_adaptor->connections));
+    qd_log(tcp_adaptor->log_source, QD_LOG_DEBUG, "Added tcp connection %s (%zu)", conn->config.host_port, DEQ_SIZE(tcp_adaptor->connections));
 }
 
 static void qdr_del_tcp_connection_CT(qdr_core_t *core, qdr_action_t *action, bool discard)
 {
     qdr_tcp_connection_t *conn = (qdr_tcp_connection_t*) action->args.general.context_1;
     DEQ_REMOVE(tcp_adaptor->connections, conn);
-    qd_log(tcp_adaptor->log_source, QD_LOG_DEBUG, "Removed tcp connection %s (%i)", conn->config.host_port, DEQ_SIZE(tcp_adaptor->connections));
+    qd_log(tcp_adaptor->log_source, QD_LOG_DEBUG, "Removed tcp connection %s (%zu)", conn->config.host_port, DEQ_SIZE(tcp_adaptor->connections));
     free_qdr_tcp_connection(conn);
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org