Static analyzer bug fixes
[silc.git] / apps / silcd / server_query.c
index 0725286c68efcca6da53b61b3b4bb1fd396f1b8d..5cc2decfbee9481af2ac00e3e45234462b82dda4 100644 (file)
@@ -238,6 +238,8 @@ SilcBool silc_server_query_command(SilcServer server,
 
   if (!old_query) {
     query = silc_calloc(1, sizeof(*query));
+    if (!query)
+      return FALSE;
     query->querycmd = querycmd;
     query->cmd = silc_server_command_dup(cmd);
     query->router = SILC_PRIMARY_ROUTE(server);
@@ -396,6 +398,7 @@ void silc_server_query_send_router_reply(void *context, void *reply)
     /* If this was nick@server query, retry to @serv if the primary router
        returned error. */
     if (query->nick_server[0] && !query->dynamic_retry &&
+       server->config->dynamic_server &&
        !silc_server_num_sockets_by_remote(server, query->nick_server,
                                           query->nick_server, 706, type)) {
       SILC_LOG_DEBUG(("Retry query by connecting to %s:%d",
@@ -507,6 +510,8 @@ SilcBool silc_server_query_parse(SilcServer server, SilcServerQuery query,
     } else {
       /* Parse the IDs included in the query */
       query->ids = silc_calloc(argc, sizeof(*query->ids));
+      if (!query->ids)
+       return FALSE;
 
       for (i = 0; i < argc; i++) {
        tmp = silc_argument_get_arg_type(cmd->args, i + 4, &tmp_len);
@@ -662,6 +667,8 @@ SilcBool silc_server_query_parse(SilcServer server, SilcServerQuery query,
     } else {
       /* Parse the IDs included in the query */
       query->ids = silc_calloc(argc, sizeof(*query->ids));
+      if (!query->ids)
+       return FALSE;
 
       for (i = 0; i < argc; i++) {
        tmp = silc_argument_get_arg_type(cmd->args, i + 5, &tmp_len);
@@ -796,6 +803,7 @@ static void silc_server_query_skr_callback(SilcSKR skr,
   SilcSKRKey key;
 
   if (keys) {
+    SILC_LOG_DEBUG(("Found %d keys", silc_dlist_count(keys)));
     (*uc->clients) = silc_realloc((*uc->clients),
                                  sizeof((**uc->clients)) *
                                  ((*uc->clients_count) +
@@ -937,6 +945,11 @@ void silc_server_query_process(SilcServer server, SilcServerQuery query,
   SilcUInt32 clients_count = 0, channels_count = 0, servers_count = 0;
   int i;
 
+  if (!idata) {
+    silc_server_query_free(query);
+    return;
+  }
+
   SILC_LOG_DEBUG(("Processing %s query",
                  silc_get_command_name(query->querycmd)));
 
@@ -1516,6 +1529,7 @@ void silc_server_query_send_reply(SilcServer server,
   SilcUInt16 ident = silc_command_get_ident(cmd->payload);
   SilcStatus status;
   unsigned char *tmp;
+  char *tmp2;
   SilcUInt32 len;
   SilcBuffer idp;
   int i, k, valid_count;
@@ -1642,8 +1656,8 @@ void silc_server_query_send_reply(SilcServer server,
            hsock = entry->connection;
            silc_strncat(uh, sizeof(uh), "@", 1);
            silc_socket_stream_get_info(silc_packet_stream_get_stream(hsock),
-                                       NULL, (const char **)&tmp, NULL, NULL);
-           silc_strncat(uh, sizeof(uh), tmp, strlen(tmp));
+                                       NULL, (const char **)&tmp2, NULL, NULL);
+           silc_strncat(uh, sizeof(uh), tmp2, strlen(tmp2));
          }
 
          if (idata->conn_type == SILC_CONN_CLIENT)
@@ -1733,9 +1747,9 @@ void silc_server_query_send_reply(SilcServer server,
            hsock = entry->connection;
            silc_strncat(uh, sizeof(uh), "@", 1);
            silc_socket_stream_get_info(silc_packet_stream_get_stream(hsock),
-                                       NULL, (const char **)&tmp,
+                                       NULL, (const char **)&tmp2,
                                        NULL, NULL);
-           silc_strncat(uh, sizeof(uh), tmp, strlen(tmp));
+           silc_strncat(uh, sizeof(uh), tmp2, strlen(tmp2));
          }
 
          silc_server_send_command_reply(server, cmd->sock, query->querycmd,
@@ -2181,7 +2195,8 @@ SilcClientEntry silc_server_query_client(SilcServer server,
                                            server->cmd_ident, 1,
                                            4, idp->data,
                                            silc_buffer_len(idp));
-    silc_server_packet_send(server, client ? client->router->connection :
+    silc_server_packet_send(server,
+                           client && client->router ? client->router->connection :
                            SILC_PRIMARY_ROUTE(server),
                            SILC_PACKET_COMMAND, 0,
                            buffer->data, silc_buffer_len(buffer));