Mirror of the lttng-dev mailing list
 help / color / mirror / Atom feed
* [ltt-dev] [PATCH] Fix asprintf and scanf ignoring return value
@ 2010-09-03 21:09 David Goulet
  2010-09-06 14:06 ` Nils Carlson
  0 siblings, 1 reply; 2+ messages in thread
From: David Goulet @ 2010-09-03 21:09 UTC (permalink / raw)


Signed-off-by: David Goulet <david.goulet at polymtl.ca>
---
 libust/tracectl.c    |   63 ++++++++++++++++++++++++++++++++++++++++++--------
 libustcmd/ustcmd.c   |   41 +++++++++++++++++++++++++++-----
 libustcomm/ustcomm.c |   24 ++++++++++++++++---
 libustd/libustd.c    |   37 ++++++++++++++++++++++++----
 tests/hello/hello.c  |    6 +++-
 ustd/ustd.c          |   12 ++++++++-
 6 files changed, 152 insertions(+), 31 deletions(-)

diff --git a/libust/tracectl.c b/libust/tracectl.c
index ac551d5..f3d7be6 100644
--- a/libust/tracectl.c
+++ b/libust/tracectl.c
@@ -156,7 +156,11 @@ static void inform_consumer_daemon(const char *trace_name)
 			/* iterate on all cpus */
 			for(j=0; j<trace->channels[i].n_cpus; j++) {
 				char *buf;
-				asprintf(&buf, "%s_%d", trace->channels[i].channel_name, j);
+				if (asprintf(&buf, "%s_%d", trace->channels[i].channel_name, j) < 0) {
+					ERR("inform_consumer_daemon : asprintf failed (%s_%d)",
+							trace->channels[i].channel_name, j);
+					goto finish;
+				}
 				result = ustcomm_request_consumer(pid, buf);
 				if(result == -1) {
 					WARN("Failed to request collection for channel %s. Is the daemon available?", trace->channels[i].channel_name);
@@ -213,7 +217,11 @@ int process_blkd_consumer_act(void *priv, int fd, short events)
 	else if(result < 0) {
 		ERR("ust_buffers_get_subbuf: error: %s", strerror(-result));
 	}
-	asprintf(&reply, "%s %ld", "OK", consumed_old);
+	if (asprintf(&reply, "%s %ld", "OK", consumed_old) < 0) {
+		ERR("process_blkd_consumer_act : asprintf failed (OK %ld)",
+				consumed_old);
+		return -1;
+	}
 	result = ustcomm_send_reply(&bc->server, reply, &bc->src);
 	if(result < 0) {
 		ERR("ustcomm_send_reply failed");
@@ -250,7 +258,11 @@ void seperate_channel_cpu(const char *channel_and_cpu, char **channel, int *cpu)
 		*cpu = atoi(sep+1);
 	}
 
-	asprintf(channel, "%.*s", (int)(sep-channel_and_cpu), channel_and_cpu);
+	if (asprintf(channel, "%.*s", (int)(sep-channel_and_cpu), channel_and_cpu) < 0) {
+		ERR("seperate_channel_cpu : asprintf failed (%.*s)",
+				(int)(sep-channel_and_cpu), channel_and_cpu);
+		return;
+	}
 }
 
 static int do_cmd_get_shmid(const char *recvbuf, struct ustcomm_source *src)
@@ -298,7 +310,12 @@ static int do_cmd_get_shmid(const char *recvbuf, struct ustcomm_source *src)
 
 //			DBG("the shmid for the requested channel is %d", buf->shmid);
 //			DBG("the shmid for its buffer structure is %d", channel->buf_struct_shmids);
-			asprintf(&reply, "%d %d", buf->shmid, channel->buf_struct_shmids[ch_cpu]);
+			if (asprintf(&reply, "%d %d", buf->shmid, channel->buf_struct_shmids[ch_cpu]) < 0) {
+				ERR("do_cmd_get_shmid : asprintf failed (%d %d)",
+						buf->shmid, channel->buf_struct_shmids[ch_cpu]);
+				retval = -1;
+				goto free_short_chan_name;
+			}
 
 			result = ustcomm_send_reply(&ustcomm_app.server, reply, src);
 			if(result) {
@@ -369,7 +386,12 @@ static int do_cmd_get_n_subbufs(const char *recvbuf, struct ustcomm_source *src)
 			char *reply;
 
 			DBG("the n_subbufs for the requested channel is %d", channel->subbuf_cnt);
-			asprintf(&reply, "%d", channel->subbuf_cnt);
+			if (asprintf(&reply, "%d", channel->subbuf_cnt) < 0) {
+				ERR("do_cmd_get_n_subbufs : asprintf failed (%d)",
+						channel->subbuf_cnt);
+				retval = -1;
+				goto free_short_chan_name;
+			}
 
 			result = ustcomm_send_reply(&ustcomm_app.server, reply, src);
 			if(result) {
@@ -438,7 +460,12 @@ static int do_cmd_get_subbuf_size(const char *recvbuf, struct ustcomm_source *sr
 			char *reply;
 
 			DBG("the subbuf_size for the requested channel is %zd", channel->subbuf_size);
-			asprintf(&reply, "%zd", channel->subbuf_size);
+			if (asprintf(&reply, "%zd", channel->subbuf_size) < 0) {
+				ERR("do_cmd_get_subbuf_size : asprintf failed (%zd)",
+						channel->subbuf_size);
+				retval = -1;
+				goto free_short_chan_name;
+			}
 
 			result = ustcomm_send_reply(&ustcomm_app.server, reply, src);
 			if(result) {
@@ -746,11 +773,19 @@ static int do_cmd_put_subbuffer(const char *recvbuf, struct ustcomm_source *src)
 			result = ust_buffers_put_subbuf(buf, consumed_old);
 			if(result < 0) {
 				WARN("ust_buffers_put_subbuf: error (subbuf=%s)", channel_and_cpu);
-				asprintf(&reply, "%s", "ERROR");
+				if (asprintf(&reply, "%s", "ERROR") < 0) {
+					ERR("do_cmd_put_subbuffer : asprintf failed (ERROR)");
+					retval = -1;
+					goto unlock_traces;
+				}
 			}
 			else {
 				DBG("ust_buffers_put_subbuf: success (subbuf=%s)", channel_and_cpu);
-				asprintf(&reply, "%s", "OK");
+				if (asprintf(&reply, "%s", "OK") < 0) {
+					ERR("do_cmd_put_subbuffer : asprintf failed (OK)");
+					retval = -1;
+					goto unlock_traces;
+				}
 			}
 
 			result = ustcomm_send_reply(&ustcomm_app.server, reply, src);
@@ -992,7 +1027,11 @@ int process_client_cmd(char *recvbuf, struct ustcomm_source *src)
 	else if(nth_token_is(recvbuf, "get_pidunique", 0) == 1) {
 		char *reply;
 
-		asprintf(&reply, "%lld", pidunique);
+		if (asprintf(&reply, "%lld", pidunique) < 0) {
+			ERR("process_client_cmd : asprintf failed (%lld)",
+					pidunique);
+			goto next_cmd;
+		}
 
 		result = ustcomm_send_reply(&ustcomm_app.server, reply, src);
 		if(result) {
@@ -1005,7 +1044,11 @@ int process_client_cmd(char *recvbuf, struct ustcomm_source *src)
 	else if(nth_token_is(recvbuf, "get_sock_path", 0) == 1) {
 		char *reply = getenv("UST_DAEMON_SOCKET");
 		if(!reply) {
-			asprintf(&reply, "%s/%s", SOCK_DIR, "ustd");
+			if (asprintf(&reply, "%s/%s", SOCK_DIR, "ustd") < 0) {
+				ERR("process_client_cmd : asprintf failed (%s/ustd)",
+						SOCK_DIR);
+				goto next_cmd;
+			}
 			result = ustcomm_send_reply(&ustcomm_app.server, reply, src);
 			free(reply);
 		}
diff --git a/libustcmd/ustcmd.c b/libustcmd/ustcmd.c
index cf6b9d7..67dc6d9 100644
--- a/libustcmd/ustcmd.c
+++ b/libustcmd/ustcmd.c
@@ -90,7 +90,11 @@ int ustcmd_set_marker_state(const char *mn, int state, pid_t pid)
 		return USTCMD_ERR_ARG;
 	}
 
-	asprintf(&cmd, "%s %s", cmd_str[state], mn);
+	if (asprintf(&cmd, "%s %s", cmd_str[state], mn) < 0) {
+		ERR("ustcmd_set_marker_state : asprintf failed (%s %s)",
+				cmd_str[state], mn);
+		return USTCMD_ERR_GEN;
+	}
 
 	result = ustcmd_send_cmd(cmd, pid, NULL);
 	if (result) {
@@ -114,7 +118,11 @@ int ustcmd_set_subbuf_size(const char *channel_size, pid_t pid)
 	char *cmd;
 	int result;
 
-	asprintf(&cmd, "%s %s", "set_subbuf_size", channel_size);
+	if (asprintf(&cmd, "%s %s", "set_subbuf_size", channel_size) < 0) {
+		ERR("ustcmd_set_subbuf_size : asprintf failed (set_subbuf_size %s)",
+				channel_size);
+		return -1;
+	}
 
 	result = ustcmd_send_cmd(cmd, pid, NULL);
 	if (result != 1) {
@@ -138,7 +146,11 @@ int ustcmd_set_subbuf_num(const char *channel_size, pid_t pid)
 	char *cmd;
 	int result;
 
-	asprintf(&cmd, "%s %s", "set_subbuf_num", channel_size);
+	if (asprintf(&cmd, "%s %s", "set_subbuf_num", channel_size) < 0) {
+		ERR("ustcmd_set_subbuf_num : asprintf failed (set_subbuf_num %s",
+				channel_size);
+		return -1;
+	}
 
 	result = ustcmd_send_cmd(cmd, pid, NULL);
 	if (result != 1) {
@@ -163,7 +175,11 @@ int ustcmd_get_subbuf_size(const char *channel, pid_t pid)
 	int result;
 
 	/* format: channel_cpu */
-	asprintf(&cmd, "%s %s_0", "get_subbuf_size", channel);
+	if (asprintf(&cmd, "%s %s_0", "get_subbuf_size", channel) < 0) {
+		ERR("ustcmd_get_subbuf_size : asprintf failed (get_subbuf_size, %s_0",
+				channel);
+		return -1;
+	}
 
 	result = ustcmd_send_cmd(cmd, pid, &reply);
 	if (result) {
@@ -191,7 +207,11 @@ int ustcmd_get_subbuf_num(const char *channel, pid_t pid)
 	int result;
 
 	/* format: channel_cpu */
-	asprintf(&cmd, "%s %s_0", "get_n_subbufs", channel);
+	if (asprintf(&cmd, "%s %s_0", "get_n_subbufs", channel) < 0) {
+		ERR("ustcmd_get_subbuf_num : asprintf failed (get_n_subbufs, %s_0",
+				channel);
+		return -1;
+	}
 
 	result = ustcmd_send_cmd(cmd, pid, &reply);
 	if (result) {
@@ -432,7 +452,11 @@ int ustcmd_set_sock_path(const char *sock_path, pid_t pid)
 	char *cmd;
 	int result;
 
-	asprintf(&cmd, "%s %s", "set_sock_path", sock_path);
+	if (asprintf(&cmd, "%s %s", "set_sock_path", sock_path) < 0) {
+		ERR("ustcmd_set_sock_path : asprintf failed (set_sock_path, %s",
+				sock_path);
+		return -1;
+	}
 
 	result = ustcmd_send_cmd(cmd, pid, NULL);
 	if (result != 1) {
@@ -456,7 +480,10 @@ int ustcmd_get_sock_path(char **sock_path, pid_t pid)
 	char *cmd, *reply;
 	int result;
 
-	asprintf(&cmd, "%s", "get_sock_path");
+	if (asprintf(&cmd, "%s", "get_sock_path") < 0) {
+		ERR("ustcmd_get_sock_path : asprintf failed");
+		return USTCMD_ERR_GEN;
+	}
 
 	result = ustcmd_send_cmd(cmd, pid, &reply);
 	if (result != 1) {
diff --git a/libustcomm/ustcomm.c b/libustcomm/ustcomm.c
index f2b7a03..c854ad3 100644
--- a/libustcomm/ustcomm.c
+++ b/libustcomm/ustcomm.c
@@ -163,7 +163,11 @@ int ustcomm_request_consumer(pid_t pid, const char *channel)
 		return -1;
 	}
 
-	asprintf(&msg, "collect %d %s", pid, channel); 
+	if (asprintf(&msg, "collect %d %s", pid, channel) < 0) {
+		ERR("ustcomm_request_consumer : asprintf failed (collect %d/%s)",
+				pid, channel);
+		return -1;
+	}
 
 	/* don't signal it because it's the daemon */
 	result = ustcomm_connect_path(path, &conn, -1);
@@ -706,7 +710,11 @@ int ustcomm_init_ustd(struct ustcomm_ustd *handle, const char *sock_path)
 	int retval = 0;
 
 	if(sock_path) {
-		asprintf(&name, "%s", sock_path);
+		if (asprintf(&name, "%s", sock_path) < 0) {
+			ERR("ustcomm_init_ustd : asprintf failed (sock_path %s)",
+					sock_path);
+			return -1;
+		}
 	}
 	else {
 		int result;
@@ -718,7 +726,11 @@ int ustcomm_init_ustd(struct ustcomm_ustd *handle, const char *sock_path)
 			return -1;
 		}
 
-		asprintf(&name, "%s/%s", SOCK_DIR, "ustd");
+		if (asprintf(&name, "%s/%s", SOCK_DIR, "ustd") < 0) {
+			ERR("ustcomm_init_ustd : asprintf failed (%s/ustd)",
+					SOCK_DIR);
+			return -1;
+		}
 	}
 
 	handle->server.listen_fd = init_named_socket(name, &handle->server.socketpath);
@@ -864,7 +876,11 @@ char *nth_token(const char *str, int tok_no)
 		retval = NULL;
 	}
 
-	asprintf(&retval, "%.*s", (int)(end-start), start);
+	if (asprintf(&retval, "%.*s", (int)(end-start), start) < 0) {
+		ERR("nth_token : asprintf failed (%.*s)",
+				(int)(end-start), start);
+		return NULL;
+	}
 
 	return retval;
 }
diff --git a/libustd/libustd.c b/libustd/libustd.c
index 4935131..a006689 100644
--- a/libustd/libustd.c
+++ b/libustd/libustd.c
@@ -58,7 +58,12 @@ int get_subbuffer(struct buffer_info *buf)
 	int retval;
 	int result;
 
-	asprintf(&send_msg, "get_subbuffer %s", buf->name);
+	if (asprintf(&send_msg, "get_subbuffer %s", buf->name) < 0) {
+		ERR("get_subbuffer : asprintf failed (%s)",
+				buf->name);
+		retval = -1;
+		goto end;
+	}
 	result = ustcomm_send_request(buf->conn, send_msg, &received_msg);
 	if((result == -1 && (errno == ECONNRESET || errno == EPIPE)) || result == 0) {
 		DBG("app died while being traced");
@@ -118,7 +123,12 @@ int put_subbuffer(struct buffer_info *buf)
 	int retval;
 	int result;
 
-	asprintf(&send_msg, "put_subbuffer %s %ld", buf->name, buf->consumed_old);
+	if (asprintf(&send_msg, "put_subbuffer %s %ld", buf->name, buf->consumed_old) < 0) {
+		ERR("put_subbuffer : asprintf failed (%s %ld)",
+				buf->name, buf->consumed_old);
+		retval = -1;
+		goto end;
+	}
 	result = ustcomm_send_request(buf->conn, send_msg, &received_msg);
 	if(result < 0 && (errno == ECONNRESET || errno == EPIPE)) {
 		retval = PUT_SUBBUF_DIED;
@@ -215,7 +225,10 @@ struct buffer_info *connect_buffer(struct libustd_instance *instance, pid_t pid,
 	}
 
 	/* get pidunique */
-	asprintf(&send_msg, "get_pidunique");
+	if (asprintf(&send_msg, "get_pidunique") < 0) {
+		ERR("connect_buffer : asprintf failed (get_pidunique)");
+		return NULL;
+	}
 	result = ustcomm_send_request(buf->conn, send_msg, &received_msg);
 	free(send_msg);
 	if(result == -1) {
@@ -235,7 +248,11 @@ struct buffer_info *connect_buffer(struct libustd_instance *instance, pid_t pid,
 	DBG("got pidunique %lld", buf->pidunique);
 
 	/* get shmid */
-	asprintf(&send_msg, "get_shmid %s", buf->name);
+	if (asprintf(&send_msg, "get_shmid %s", buf->name) < 0) {
+		ERR("connect_buffer : asprintf failed (get_schmid %s)",
+				buf->name);
+		return NULL;
+	}
 	result = ustcomm_send_request(buf->conn, send_msg, &received_msg);
 	free(send_msg);
 	if(result == -1) {
@@ -255,7 +272,11 @@ struct buffer_info *connect_buffer(struct libustd_instance *instance, pid_t pid,
 	DBG("got shmids %d %d", buf->shmid, buf->bufstruct_shmid);
 
 	/* get n_subbufs */
-	asprintf(&send_msg, "get_n_subbufs %s", buf->name);
+	if (asprintf(&send_msg, "get_n_subbufs %s", buf->name) < 0) {
+		ERR("connect_buffer : asprintf failed (get_n_subbufs %s)",
+				buf->name);
+		return NULL;
+	}
 	result = ustcomm_send_request(buf->conn, send_msg, &received_msg);
 	free(send_msg);
 	if(result == -1) {
@@ -275,7 +296,11 @@ struct buffer_info *connect_buffer(struct libustd_instance *instance, pid_t pid,
 	DBG("got n_subbufs %d", buf->n_subbufs);
 
 	/* get subbuf size */
-	asprintf(&send_msg, "get_subbuf_size %s", buf->name);
+	if (asprintf(&send_msg, "get_subbuf_size %s", buf->name) < 0) {
+		ERR("connect_buffer : asprintf failed (get_subbuf_size %s)",
+				buf->name);
+		return NULL;
+	}
 	result = ustcomm_send_request(buf->conn, send_msg, &received_msg);
 	free(send_msg);
 	if(result == -1) {
diff --git a/tests/hello/hello.c b/tests/hello/hello.c
index 8147860..7eecf69 100644
--- a/tests/hello/hello.c
+++ b/tests/hello/hello.c
@@ -77,13 +77,15 @@ int main()
 		usleep(100000);
 	}
 
-	scanf("%*s");
+	if (scanf("%*s") == EOF)
+		PERROR("scanf failed");
 
 	ltt_trace_stop("auto");
 	ltt_trace_destroy("auto", 0);
 
 	DBG("TRACE STOPPED");
-	scanf("%*s");
+	if (scanf("%*s") == EOF)
+		PERROR("scanf failed");
 
 	return 0;
 }
diff --git a/ustd/ustd.c b/ustd/ustd.c
index c0f4c59..1fe8b63 100644
--- a/ustd/ustd.c
+++ b/ustd/ustd.c
@@ -191,7 +191,11 @@ int on_open_buffer(struct libustd_callbacks *data, struct buffer_info *buf)
 		trace_path = USTD_DEFAULT_TRACE_PATH;
 	}
 
-	asprintf(&tmp, "%s/%u_%lld", trace_path, buf->pid, buf->pidunique);
+	if (asprintf(&tmp, "%s/%u_%lld", trace_path, buf->pid, buf->pidunique) < 0) {
+		ERR("on_open_buffer : asprintf failed (%s/%u_%lld)",
+				trace_path, buf->pid, buf->pidunique);
+		return 1;
+	}
 	result = create_dir_if_needed(tmp);
 	if(result == -1) {
 		ERR("could not create directory %s", tmp);
@@ -200,7 +204,11 @@ int on_open_buffer(struct libustd_callbacks *data, struct buffer_info *buf)
 	}
 	free(tmp);
 
-	asprintf(&tmp, "%s/%u_%lld/%s", trace_path, buf->pid, buf->pidunique, buf->name);
+	if (asprintf(&tmp, "%s/%u_%lld/%s", trace_path, buf->pid, buf->pidunique, buf->name) < 0) {
+		ERR("on_open_buffer : asprintf failed (%s/%u_%lld/%s)",
+				trace_path, buf->pid, buf->pidunique, buf->name);
+		return 1;
+	}
 	result = fd = open(tmp, O_WRONLY | O_CREAT | O_TRUNC | O_EXCL, 00600);
 	if(result == -1) {
 		PERROR("open");
-- 
1.7.2.2




^ permalink raw reply	[flat|nested] 2+ messages in thread

* [ltt-dev] [PATCH] Fix asprintf and scanf ignoring return value
  2010-09-03 21:09 [ltt-dev] [PATCH] Fix asprintf and scanf ignoring return value David Goulet
@ 2010-09-06 14:06 ` Nils Carlson
  0 siblings, 0 replies; 2+ messages in thread
From: Nils Carlson @ 2010-09-06 14:06 UTC (permalink / raw)


Applied, thanks.

/Nils

On Fri, 3 Sep 2010, David Goulet wrote:

> Signed-off-by: David Goulet <david.goulet at polymtl.ca>
> ---
> libust/tracectl.c    |   63 ++++++++++++++++++++++++++++++++++++++++++--------
> libustcmd/ustcmd.c   |   41 +++++++++++++++++++++++++++-----
> libustcomm/ustcomm.c |   24 ++++++++++++++++---
> libustd/libustd.c    |   37 ++++++++++++++++++++++++----
> tests/hello/hello.c  |    6 +++-
> ustd/ustd.c          |   12 ++++++++-
> 6 files changed, 152 insertions(+), 31 deletions(-)
>
> diff --git a/libust/tracectl.c b/libust/tracectl.c
> index ac551d5..f3d7be6 100644
> --- a/libust/tracectl.c
> +++ b/libust/tracectl.c
> @@ -156,7 +156,11 @@ static void inform_consumer_daemon(const char *trace_name)
>                        /* iterate on all cpus */
>                        for(j=0; j<trace->channels[i].n_cpus; j++) {
>                                char *buf;
> -                               asprintf(&buf, "%s_%d", trace->channels[i].channel_name, j);
> +                               if (asprintf(&buf, "%s_%d", trace->channels[i].channel_name, j) < 0) {
> +                                       ERR("inform_consumer_daemon : asprintf failed (%s_%d)",
> +                                                       trace->channels[i].channel_name, j);
> +                                       goto finish;
> +                               }
>                                result = ustcomm_request_consumer(pid, buf);
>                                if(result == -1) {
>                                        WARN("Failed to request collection for channel %s. Is the daemon available?", trace->channels[i].channel_name);
> @@ -213,7 +217,11 @@ int process_blkd_consumer_act(void *priv, int fd, short events)
>        else if(result < 0) {
>                ERR("ust_buffers_get_subbuf: error: %s", strerror(-result));
>        }
> -       asprintf(&reply, "%s %ld", "OK", consumed_old);
> +       if (asprintf(&reply, "%s %ld", "OK", consumed_old) < 0) {
> +               ERR("process_blkd_consumer_act : asprintf failed (OK %ld)",
> +                               consumed_old);
> +               return -1;
> +       }
>        result = ustcomm_send_reply(&bc->server, reply, &bc->src);
>        if(result < 0) {
>                ERR("ustcomm_send_reply failed");
> @@ -250,7 +258,11 @@ void seperate_channel_cpu(const char *channel_and_cpu, char **channel, int *cpu)
>                *cpu = atoi(sep+1);
>        }
>
> -       asprintf(channel, "%.*s", (int)(sep-channel_and_cpu), channel_and_cpu);
> +       if (asprintf(channel, "%.*s", (int)(sep-channel_and_cpu), channel_and_cpu) < 0) {
> +               ERR("seperate_channel_cpu : asprintf failed (%.*s)",
> +                               (int)(sep-channel_and_cpu), channel_and_cpu);
> +               return;
> +       }
> }
>
> static int do_cmd_get_shmid(const char *recvbuf, struct ustcomm_source *src)
> @@ -298,7 +310,12 @@ static int do_cmd_get_shmid(const char *recvbuf, struct ustcomm_source *src)
>
> //                     DBG("the shmid for the requested channel is %d", buf->shmid);
> //                     DBG("the shmid for its buffer structure is %d", channel->buf_struct_shmids);
> -                       asprintf(&reply, "%d %d", buf->shmid, channel->buf_struct_shmids[ch_cpu]);
> +                       if (asprintf(&reply, "%d %d", buf->shmid, channel->buf_struct_shmids[ch_cpu]) < 0) {
> +                               ERR("do_cmd_get_shmid : asprintf failed (%d %d)",
> +                                               buf->shmid, channel->buf_struct_shmids[ch_cpu]);
> +                               retval = -1;
> +                               goto free_short_chan_name;
> +                       }
>
>                        result = ustcomm_send_reply(&ustcomm_app.server, reply, src);
>                        if(result) {
> @@ -369,7 +386,12 @@ static int do_cmd_get_n_subbufs(const char *recvbuf, struct ustcomm_source *src)
>                        char *reply;
>
>                        DBG("the n_subbufs for the requested channel is %d", channel->subbuf_cnt);
> -                       asprintf(&reply, "%d", channel->subbuf_cnt);
> +                       if (asprintf(&reply, "%d", channel->subbuf_cnt) < 0) {
> +                               ERR("do_cmd_get_n_subbufs : asprintf failed (%d)",
> +                                               channel->subbuf_cnt);
> +                               retval = -1;
> +                               goto free_short_chan_name;
> +                       }
>
>                        result = ustcomm_send_reply(&ustcomm_app.server, reply, src);
>                        if(result) {
> @@ -438,7 +460,12 @@ static int do_cmd_get_subbuf_size(const char *recvbuf, struct ustcomm_source *sr
>                        char *reply;
>
>                        DBG("the subbuf_size for the requested channel is %zd", channel->subbuf_size);
> -                       asprintf(&reply, "%zd", channel->subbuf_size);
> +                       if (asprintf(&reply, "%zd", channel->subbuf_size) < 0) {
> +                               ERR("do_cmd_get_subbuf_size : asprintf failed (%zd)",
> +                                               channel->subbuf_size);
> +                               retval = -1;
> +                               goto free_short_chan_name;
> +                       }
>
>                        result = ustcomm_send_reply(&ustcomm_app.server, reply, src);
>                        if(result) {
> @@ -746,11 +773,19 @@ static int do_cmd_put_subbuffer(const char *recvbuf, struct ustcomm_source *src)
>                        result = ust_buffers_put_subbuf(buf, consumed_old);
>                        if(result < 0) {
>                                WARN("ust_buffers_put_subbuf: error (subbuf=%s)", channel_and_cpu);
> -                               asprintf(&reply, "%s", "ERROR");
> +                               if (asprintf(&reply, "%s", "ERROR") < 0) {
> +                                       ERR("do_cmd_put_subbuffer : asprintf failed (ERROR)");
> +                                       retval = -1;
> +                                       goto unlock_traces;
> +                               }
>                        }
>                        else {
>                                DBG("ust_buffers_put_subbuf: success (subbuf=%s)", channel_and_cpu);
> -                               asprintf(&reply, "%s", "OK");
> +                               if (asprintf(&reply, "%s", "OK") < 0) {
> +                                       ERR("do_cmd_put_subbuffer : asprintf failed (OK)");
> +                                       retval = -1;
> +                                       goto unlock_traces;
> +                               }
>                        }
>
>                        result = ustcomm_send_reply(&ustcomm_app.server, reply, src);
> @@ -992,7 +1027,11 @@ int process_client_cmd(char *recvbuf, struct ustcomm_source *src)
>        else if(nth_token_is(recvbuf, "get_pidunique", 0) == 1) {
>                char *reply;
>
> -               asprintf(&reply, "%lld", pidunique);
> +               if (asprintf(&reply, "%lld", pidunique) < 0) {
> +                       ERR("process_client_cmd : asprintf failed (%lld)",
> +                                       pidunique);
> +                       goto next_cmd;
> +               }
>
>                result = ustcomm_send_reply(&ustcomm_app.server, reply, src);
>                if(result) {
> @@ -1005,7 +1044,11 @@ int process_client_cmd(char *recvbuf, struct ustcomm_source *src)
>        else if(nth_token_is(recvbuf, "get_sock_path", 0) == 1) {
>                char *reply = getenv("UST_DAEMON_SOCKET");
>                if(!reply) {
> -                       asprintf(&reply, "%s/%s", SOCK_DIR, "ustd");
> +                       if (asprintf(&reply, "%s/%s", SOCK_DIR, "ustd") < 0) {
> +                               ERR("process_client_cmd : asprintf failed (%s/ustd)",
> +                                               SOCK_DIR);
> +                               goto next_cmd;
> +                       }
>                        result = ustcomm_send_reply(&ustcomm_app.server, reply, src);
>                        free(reply);
>                }
> diff --git a/libustcmd/ustcmd.c b/libustcmd/ustcmd.c
> index cf6b9d7..67dc6d9 100644
> --- a/libustcmd/ustcmd.c
> +++ b/libustcmd/ustcmd.c
> @@ -90,7 +90,11 @@ int ustcmd_set_marker_state(const char *mn, int state, pid_t pid)
>                return USTCMD_ERR_ARG;
>        }
>
> -       asprintf(&cmd, "%s %s", cmd_str[state], mn);
> +       if (asprintf(&cmd, "%s %s", cmd_str[state], mn) < 0) {
> +               ERR("ustcmd_set_marker_state : asprintf failed (%s %s)",
> +                               cmd_str[state], mn);
> +               return USTCMD_ERR_GEN;
> +       }
>
>        result = ustcmd_send_cmd(cmd, pid, NULL);
>        if (result) {
> @@ -114,7 +118,11 @@ int ustcmd_set_subbuf_size(const char *channel_size, pid_t pid)
>        char *cmd;
>        int result;
>
> -       asprintf(&cmd, "%s %s", "set_subbuf_size", channel_size);
> +       if (asprintf(&cmd, "%s %s", "set_subbuf_size", channel_size) < 0) {
> +               ERR("ustcmd_set_subbuf_size : asprintf failed (set_subbuf_size %s)",
> +                               channel_size);
> +               return -1;
> +       }
>
>        result = ustcmd_send_cmd(cmd, pid, NULL);
>        if (result != 1) {
> @@ -138,7 +146,11 @@ int ustcmd_set_subbuf_num(const char *channel_size, pid_t pid)
>        char *cmd;
>        int result;
>
> -       asprintf(&cmd, "%s %s", "set_subbuf_num", channel_size);
> +       if (asprintf(&cmd, "%s %s", "set_subbuf_num", channel_size) < 0) {
> +               ERR("ustcmd_set_subbuf_num : asprintf failed (set_subbuf_num %s",
> +                               channel_size);
> +               return -1;
> +       }
>
>        result = ustcmd_send_cmd(cmd, pid, NULL);
>        if (result != 1) {
> @@ -163,7 +175,11 @@ int ustcmd_get_subbuf_size(const char *channel, pid_t pid)
>        int result;
>
>        /* format: channel_cpu */
> -       asprintf(&cmd, "%s %s_0", "get_subbuf_size", channel);
> +       if (asprintf(&cmd, "%s %s_0", "get_subbuf_size", channel) < 0) {
> +               ERR("ustcmd_get_subbuf_size : asprintf failed (get_subbuf_size, %s_0",
> +                               channel);
> +               return -1;
> +       }
>
>        result = ustcmd_send_cmd(cmd, pid, &reply);
>        if (result) {
> @@ -191,7 +207,11 @@ int ustcmd_get_subbuf_num(const char *channel, pid_t pid)
>        int result;
>
>        /* format: channel_cpu */
> -       asprintf(&cmd, "%s %s_0", "get_n_subbufs", channel);
> +       if (asprintf(&cmd, "%s %s_0", "get_n_subbufs", channel) < 0) {
> +               ERR("ustcmd_get_subbuf_num : asprintf failed (get_n_subbufs, %s_0",
> +                               channel);
> +               return -1;
> +       }
>
>        result = ustcmd_send_cmd(cmd, pid, &reply);
>        if (result) {
> @@ -432,7 +452,11 @@ int ustcmd_set_sock_path(const char *sock_path, pid_t pid)
>        char *cmd;
>        int result;
>
> -       asprintf(&cmd, "%s %s", "set_sock_path", sock_path);
> +       if (asprintf(&cmd, "%s %s", "set_sock_path", sock_path) < 0) {
> +               ERR("ustcmd_set_sock_path : asprintf failed (set_sock_path, %s",
> +                               sock_path);
> +               return -1;
> +       }
>
>        result = ustcmd_send_cmd(cmd, pid, NULL);
>        if (result != 1) {
> @@ -456,7 +480,10 @@ int ustcmd_get_sock_path(char **sock_path, pid_t pid)
>        char *cmd, *reply;
>        int result;
>
> -       asprintf(&cmd, "%s", "get_sock_path");
> +       if (asprintf(&cmd, "%s", "get_sock_path") < 0) {
> +               ERR("ustcmd_get_sock_path : asprintf failed");
> +               return USTCMD_ERR_GEN;
> +       }
>
>        result = ustcmd_send_cmd(cmd, pid, &reply);
>        if (result != 1) {
> diff --git a/libustcomm/ustcomm.c b/libustcomm/ustcomm.c
> index f2b7a03..c854ad3 100644
> --- a/libustcomm/ustcomm.c
> +++ b/libustcomm/ustcomm.c
> @@ -163,7 +163,11 @@ int ustcomm_request_consumer(pid_t pid, const char *channel)
>                return -1;
>        }
>
> -       asprintf(&msg, "collect %d %s", pid, channel);
> +       if (asprintf(&msg, "collect %d %s", pid, channel) < 0) {
> +               ERR("ustcomm_request_consumer : asprintf failed (collect %d/%s)",
> +                               pid, channel);
> +               return -1;
> +       }
>
>        /* don't signal it because it's the daemon */
>        result = ustcomm_connect_path(path, &conn, -1);
> @@ -706,7 +710,11 @@ int ustcomm_init_ustd(struct ustcomm_ustd *handle, const char *sock_path)
>        int retval = 0;
>
>        if(sock_path) {
> -               asprintf(&name, "%s", sock_path);
> +               if (asprintf(&name, "%s", sock_path) < 0) {
> +                       ERR("ustcomm_init_ustd : asprintf failed (sock_path %s)",
> +                                       sock_path);
> +                       return -1;
> +               }
>        }
>        else {
>                int result;
> @@ -718,7 +726,11 @@ int ustcomm_init_ustd(struct ustcomm_ustd *handle, const char *sock_path)
>                        return -1;
>                }
>
> -               asprintf(&name, "%s/%s", SOCK_DIR, "ustd");
> +               if (asprintf(&name, "%s/%s", SOCK_DIR, "ustd") < 0) {
> +                       ERR("ustcomm_init_ustd : asprintf failed (%s/ustd)",
> +                                       SOCK_DIR);
> +                       return -1;
> +               }
>        }
>
>        handle->server.listen_fd = init_named_socket(name, &handle->server.socketpath);
> @@ -864,7 +876,11 @@ char *nth_token(const char *str, int tok_no)
>                retval = NULL;
>        }
>
> -       asprintf(&retval, "%.*s", (int)(end-start), start);
> +       if (asprintf(&retval, "%.*s", (int)(end-start), start) < 0) {
> +               ERR("nth_token : asprintf failed (%.*s)",
> +                               (int)(end-start), start);
> +               return NULL;
> +       }
>
>        return retval;
> }
> diff --git a/libustd/libustd.c b/libustd/libustd.c
> index 4935131..a006689 100644
> --- a/libustd/libustd.c
> +++ b/libustd/libustd.c
> @@ -58,7 +58,12 @@ int get_subbuffer(struct buffer_info *buf)
>        int retval;
>        int result;
>
> -       asprintf(&send_msg, "get_subbuffer %s", buf->name);
> +       if (asprintf(&send_msg, "get_subbuffer %s", buf->name) < 0) {
> +               ERR("get_subbuffer : asprintf failed (%s)",
> +                               buf->name);
> +               retval = -1;
> +               goto end;
> +       }
>        result = ustcomm_send_request(buf->conn, send_msg, &received_msg);
>        if((result == -1 && (errno == ECONNRESET || errno == EPIPE)) || result == 0) {
>                DBG("app died while being traced");
> @@ -118,7 +123,12 @@ int put_subbuffer(struct buffer_info *buf)
>        int retval;
>        int result;
>
> -       asprintf(&send_msg, "put_subbuffer %s %ld", buf->name, buf->consumed_old);
> +       if (asprintf(&send_msg, "put_subbuffer %s %ld", buf->name, buf->consumed_old) < 0) {
> +               ERR("put_subbuffer : asprintf failed (%s %ld)",
> +                               buf->name, buf->consumed_old);
> +               retval = -1;
> +               goto end;
> +       }
>        result = ustcomm_send_request(buf->conn, send_msg, &received_msg);
>        if(result < 0 && (errno == ECONNRESET || errno == EPIPE)) {
>                retval = PUT_SUBBUF_DIED;
> @@ -215,7 +225,10 @@ struct buffer_info *connect_buffer(struct libustd_instance *instance, pid_t pid,
>        }
>
>        /* get pidunique */
> -       asprintf(&send_msg, "get_pidunique");
> +       if (asprintf(&send_msg, "get_pidunique") < 0) {
> +               ERR("connect_buffer : asprintf failed (get_pidunique)");
> +               return NULL;
> +       }
>        result = ustcomm_send_request(buf->conn, send_msg, &received_msg);
>        free(send_msg);
>        if(result == -1) {
> @@ -235,7 +248,11 @@ struct buffer_info *connect_buffer(struct libustd_instance *instance, pid_t pid,
>        DBG("got pidunique %lld", buf->pidunique);
>
>        /* get shmid */
> -       asprintf(&send_msg, "get_shmid %s", buf->name);
> +       if (asprintf(&send_msg, "get_shmid %s", buf->name) < 0) {
> +               ERR("connect_buffer : asprintf failed (get_schmid %s)",
> +                               buf->name);
> +               return NULL;
> +       }
>        result = ustcomm_send_request(buf->conn, send_msg, &received_msg);
>        free(send_msg);
>        if(result == -1) {
> @@ -255,7 +272,11 @@ struct buffer_info *connect_buffer(struct libustd_instance *instance, pid_t pid,
>        DBG("got shmids %d %d", buf->shmid, buf->bufstruct_shmid);
>
>        /* get n_subbufs */
> -       asprintf(&send_msg, "get_n_subbufs %s", buf->name);
> +       if (asprintf(&send_msg, "get_n_subbufs %s", buf->name) < 0) {
> +               ERR("connect_buffer : asprintf failed (get_n_subbufs %s)",
> +                               buf->name);
> +               return NULL;
> +       }
>        result = ustcomm_send_request(buf->conn, send_msg, &received_msg);
>        free(send_msg);
>        if(result == -1) {
> @@ -275,7 +296,11 @@ struct buffer_info *connect_buffer(struct libustd_instance *instance, pid_t pid,
>        DBG("got n_subbufs %d", buf->n_subbufs);
>
>        /* get subbuf size */
> -       asprintf(&send_msg, "get_subbuf_size %s", buf->name);
> +       if (asprintf(&send_msg, "get_subbuf_size %s", buf->name) < 0) {
> +               ERR("connect_buffer : asprintf failed (get_subbuf_size %s)",
> +                               buf->name);
> +               return NULL;
> +       }
>        result = ustcomm_send_request(buf->conn, send_msg, &received_msg);
>        free(send_msg);
>        if(result == -1) {
> diff --git a/tests/hello/hello.c b/tests/hello/hello.c
> index 8147860..7eecf69 100644
> --- a/tests/hello/hello.c
> +++ b/tests/hello/hello.c
> @@ -77,13 +77,15 @@ int main()
>                usleep(100000);
>        }
>
> -       scanf("%*s");
> +       if (scanf("%*s") == EOF)
> +               PERROR("scanf failed");
>
>        ltt_trace_stop("auto");
>        ltt_trace_destroy("auto", 0);
>
>        DBG("TRACE STOPPED");
> -       scanf("%*s");
> +       if (scanf("%*s") == EOF)
> +               PERROR("scanf failed");
>
>        return 0;
> }
> diff --git a/ustd/ustd.c b/ustd/ustd.c
> index c0f4c59..1fe8b63 100644
> --- a/ustd/ustd.c
> +++ b/ustd/ustd.c
> @@ -191,7 +191,11 @@ int on_open_buffer(struct libustd_callbacks *data, struct buffer_info *buf)
>                trace_path = USTD_DEFAULT_TRACE_PATH;
>        }
>
> -       asprintf(&tmp, "%s/%u_%lld", trace_path, buf->pid, buf->pidunique);
> +       if (asprintf(&tmp, "%s/%u_%lld", trace_path, buf->pid, buf->pidunique) < 0) {
> +               ERR("on_open_buffer : asprintf failed (%s/%u_%lld)",
> +                               trace_path, buf->pid, buf->pidunique);
> +               return 1;
> +       }
>        result = create_dir_if_needed(tmp);
>        if(result == -1) {
>                ERR("could not create directory %s", tmp);
> @@ -200,7 +204,11 @@ int on_open_buffer(struct libustd_callbacks *data, struct buffer_info *buf)
>        }
>        free(tmp);
>
> -       asprintf(&tmp, "%s/%u_%lld/%s", trace_path, buf->pid, buf->pidunique, buf->name);
> +       if (asprintf(&tmp, "%s/%u_%lld/%s", trace_path, buf->pid, buf->pidunique, buf->name) < 0) {
> +               ERR("on_open_buffer : asprintf failed (%s/%u_%lld/%s)",
> +                               trace_path, buf->pid, buf->pidunique, buf->name);
> +               return 1;
> +       }
>        result = fd = open(tmp, O_WRONLY | O_CREAT | O_TRUNC | O_EXCL, 00600);
>        if(result == -1) {
>                PERROR("open");
> --
> 1.7.2.2
>
>
> _______________________________________________
> ltt-dev mailing list
> ltt-dev at lists.casi.polymtl.ca
> http://lists.casi.polymtl.ca/cgi-bin/mailman/listinfo/ltt-dev
>




^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2010-09-06 14:06 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-09-03 21:09 [ltt-dev] [PATCH] Fix asprintf and scanf ignoring return value David Goulet
2010-09-06 14:06 ` Nils Carlson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox