[glib] gsubprocess: Fix potential strlen(NULL) calls
- From: Philip Withnall <pwithnall src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib] gsubprocess: Fix potential strlen(NULL) calls
- Date: Mon, 25 Nov 2013 15:47:01 +0000 (UTC)
commit 299bcbfa41db0093bc876c1095f0aab248e3b771
Author: Philip Withnall <philip withnall collabora co uk>
Date: Mon Nov 25 13:35:53 2013 +0000
gsubprocess: Fix potential strlen(NULL) calls
Also clarify the nullability of stdin_buf arguments in GSubprocess
communication calls.
Found with scan-build.
https://bugzilla.gnome.org/show_bug.cgi?id=715164
gio/gsubprocess.c | 24 ++++++++++++++++--------
1 files changed, 16 insertions(+), 8 deletions(-)
---
diff --git a/gio/gsubprocess.c b/gio/gsubprocess.c
index bced7a5..e1ba088 100644
--- a/gio/gsubprocess.c
+++ b/gio/gsubprocess.c
@@ -1561,7 +1561,7 @@ g_subprocess_communicate_internal (GSubprocess *subprocess,
/**
* g_subprocess_communicate:
* @subprocess: a #GSubprocess
- * @stdin_buf: data to send to the stdin of the subprocess, or %NULL
+ * @stdin_buf: (allow-none): data to send to the stdin of the subprocess, or %NULL
* @cancellable: a #GCancellable
* @stdout_buf: (out): data read from the subprocess stdout
* @stderr_buf: (out): data read from the subprocess stderr
@@ -1570,7 +1570,7 @@ g_subprocess_communicate_internal (GSubprocess *subprocess,
* Communicate with the subprocess until it terminates, and all input
* and output has been completed.
*
- * If @stdin is given, the subprocess must have been created with
+ * If @stdin_buf is given, the subprocess must have been created with
* %G_SUBPROCESS_FLAGS_STDIN_PIPE. The given data is fed to the
* stdin of the subprocess and the pipe is closed (ie: EOF).
*
@@ -1642,8 +1642,8 @@ g_subprocess_communicate (GSubprocess *subprocess,
/**
* g_subprocess_communicate_async:
* @subprocess: Self
- * @stdin_buf: Input data
- * @cancellable: Cancellable
+ * @stdin_buf: (allow-none): Input data, or %NULL
+ * @cancellable: (allow-none): Cancellable
* @callback: Callback
* @user_data: User data
*
@@ -1708,7 +1708,7 @@ g_subprocess_communicate_finish (GSubprocess *subprocess,
/**
* g_subprocess_communicate_utf8:
* @subprocess: a #GSubprocess
- * @stdin_buf: data to send to the stdin of the subprocess, or %NULL
+ * @stdin_buf: (allow-none): data to send to the stdin of the subprocess, or %NULL
* @cancellable: a #GCancellable
* @stdout_buf: (out): data read from the subprocess stdout
* @stderr_buf: (out): data read from the subprocess stderr
@@ -1728,13 +1728,16 @@ g_subprocess_communicate_utf8 (GSubprocess *subprocess,
GAsyncResult *result = NULL;
gboolean success;
GBytes *stdin_bytes;
+ size_t stdin_buf_len = 0;
g_return_val_if_fail (G_IS_SUBPROCESS (subprocess), FALSE);
g_return_val_if_fail (stdin_buf == NULL || (subprocess->flags & G_SUBPROCESS_FLAGS_STDIN_PIPE), FALSE);
g_return_val_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable), FALSE);
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
- stdin_bytes = g_bytes_new (stdin_buf, strlen (stdin_buf));
+ if (stdin_buf != NULL)
+ stdin_buf_len = strlen (stdin_buf);
+ stdin_bytes = g_bytes_new (stdin_buf, stdin_buf_len);
g_subprocess_sync_setup ();
g_subprocess_communicate_internal (subprocess, TRUE, stdin_bytes, cancellable,
@@ -1750,7 +1753,7 @@ g_subprocess_communicate_utf8 (GSubprocess *subprocess,
/**
* g_subprocess_communicate_utf8_async:
* @subprocess: Self
- * @stdin_buf: Input data
+ * @stdin_buf: (allow-none): Input data, or %NULL
* @cancellable: Cancellable
* @callback: Callback
* @user_data: User data
@@ -1766,13 +1769,18 @@ g_subprocess_communicate_utf8_async (GSubprocess *subprocess,
gpointer user_data)
{
GBytes *stdin_bytes;
+ size_t stdin_buf_len = 0;
g_return_if_fail (G_IS_SUBPROCESS (subprocess));
g_return_if_fail (stdin_buf == NULL || (subprocess->flags & G_SUBPROCESS_FLAGS_STDIN_PIPE));
g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable));
- stdin_bytes = g_bytes_new (stdin_buf, strlen (stdin_buf));
+ if (stdin_buf != NULL)
+ stdin_buf_len = strlen (stdin_buf);
+ stdin_bytes = g_bytes_new (stdin_buf, stdin_buf_len);
+
g_subprocess_communicate_internal (subprocess, TRUE, stdin_bytes, cancellable, callback, user_data);
+
g_bytes_unref (stdin_bytes);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]