[vte] lib: Make argv precondition check tighter



commit cf7a90fd03e0f36734a79000456d58421f4e29b8
Author: Christian Persch <chpe src gnome org>
Date:   Mon Apr 27 20:49:04 2020 +0200

    lib: Make argv precondition check tighter
    
    argv[0] must be non-nullptr too.

 src/app/app.cc | 6 ++++++
 src/vtegtk.cc  | 1 +
 src/vtepty.cc  | 1 +
 3 files changed, 8 insertions(+)
---
diff --git a/src/app/app.cc b/src/app/app.cc
index 14a6eea5..a284c764 100644
--- a/src/app/app.cc
+++ b/src/app/app.cc
@@ -594,6 +594,12 @@ public:
                                 continue;
 
                         i++; /* skip it */
+                        if (i == argc) {
+                                g_set_error(error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED,
+                                            "No command specified after -- terminator");
+                                return false;
+                        }
+
                         exec_argv = g_new(char*, argc - i + 1);
                         int j;
                         for (j = 0; i < argc; i++, j++)
diff --git a/src/vtegtk.cc b/src/vtegtk.cc
index b3ed2dd4..aba6f590 100644
--- a/src/vtegtk.cc
+++ b/src/vtegtk.cc
@@ -2743,6 +2743,7 @@ vte_terminal_spawn_sync(VteTerminal *terminal,
 {
         g_return_val_if_fail(VTE_IS_TERMINAL(terminal), FALSE);
         g_return_val_if_fail(argv != NULL, FALSE);
+        g_return_val_if_fail(argv[0] != nullptr, FALSE);
         g_return_val_if_fail((spawn_flags & (VTE_SPAWN_NO_SYSTEMD_SCOPE | VTE_SPAWN_REQUIRE_SYSTEMD_SCOPE)) 
== 0, FALSE);
         g_return_val_if_fail(child_setup_data == NULL || child_setup, FALSE);
         g_return_val_if_fail(error == NULL || *error == NULL, FALSE);
diff --git a/src/vtepty.cc b/src/vtepty.cc
index b64da787..edd9d0bc 100644
--- a/src/vtepty.cc
+++ b/src/vtepty.cc
@@ -714,6 +714,7 @@ vte_pty_spawn_with_fds_async(VtePty *pty,
                              gpointer user_data)
 {
         g_return_if_fail(argv != nullptr);
+        g_return_if_fail(argv[0] != nullptr);
         g_return_if_fail(n_fds == 0 || fds != nullptr);
         for (auto i = int{0}; i < n_fds; ++i)
                 g_return_if_fail(vte::libc::fd_get_cloexec(fds[i]));


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]