]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.1.1661: Coverity finds a few issues in clientserver.c v9.1.1661
authorFoxe Chen <chen.foxe@gmail.com>
Wed, 20 Aug 2025 20:00:41 +0000 (22:00 +0200)
committerChristian Brabandt <cb@256bit.org>
Wed, 20 Aug 2025 20:00:41 +0000 (22:00 +0200)
Problem:  Coverity finds a few issues in clientserver.c
          (also by Tony Mechelynck)
Solution: Fix issues and warnings (Foxe Chen)

closes: #18057

Signed-off-by: Foxe Chen <chen.foxe@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
src/clientserver.c
src/os_unix.c
src/testdir/test_remote.vim
src/version.c

index bc3fe2d3dbf05495bbd8ecd0305bc526171656af..6ff3ad7e990ce542f08acc56e9e8aa7f1dc4e29e 100644 (file)
@@ -330,7 +330,7 @@ cmdsrv_main(
     char_u     *res;
     int                i;
     char_u     *sname;
-    int                ret;
+    int                ret = -1;
     int                didone = FALSE;
     int                exiterr = 0;
     char       **newArgV = argv + 1;
@@ -904,19 +904,19 @@ remote_common(typval_T *argvars, typval_T *rettv, int expr)
     if (clientserver_method == CLIENTSERVER_METHOD_SOCKET)
        if (socket_server_send(server_name, keys, &r, &client, expr,
                    timeout * 1000, TRUE) < 0)
-           goto stuff;
+           goto fail;
 #endif
 #ifdef FEAT_X11
     if (clientserver_method == CLIENTSERVER_METHOD_X11)
        if (serverSendToVim(X_DISPLAY, server_name, keys, &r, &w, expr, timeout,
                    0, TRUE) < 0)
-           goto stuff;
+           goto fail;
 #endif
 # endif
 #if !defined(MSWIN)
     if (FALSE)
     {
-stuff:
+fail:
 #else
     {
 #endif
@@ -949,6 +949,7 @@ stuff:
        idvar = tv_get_string_chk(&argvars[2]);
        if (idvar != NULL && *idvar != NUL)
        {
+           str[0] = NUL;
 #ifdef MSWIN
            sprintf((char *)str, PRINTF_HEX_LONG_U, (long_u)w);
 #else
index cc1db3d19837bd52532d28caf0a8c6827e810ae2..b1b7b33dcbd70318b72e5fab2c741b5eb0bbf6a8 100644 (file)
@@ -9326,6 +9326,7 @@ socket_server_init(char_u *name)
     vim_free(path);
     return OK;
 fail:
+    close(fd);
     vim_free(path);
     socket_server_uninit();
     return FAIL;
@@ -9844,7 +9845,10 @@ socket_server_connect(char_u *name, char_u **path, int silent)
     socket_fd = socket(AF_UNIX, SOCK_STREAM, 0);
 
     if (socket_fd == -1)
-       goto fail;
+    {
+       vim_free(socket_path);
+       return -1;
+    }
 
     addr.sun_family = AF_UNIX;
     vim_snprintf(addr.sun_path, sizeof(addr.sun_path), "%s", socket_path);
@@ -9856,7 +9860,9 @@ socket_server_connect(char_u *name, char_u **path, int silent)
        if (!silent)
            semsg(_(e_socket_server_failed_connecting), socket_path,
                    strerror(errno));
-       goto fail;
+       close(socket_fd);
+       vim_free(socket_path);
+       return -1;
     }
 
     if (path != NULL)
@@ -9865,10 +9871,6 @@ socket_server_connect(char_u *name, char_u **path, int silent)
        vim_free(socket_path);
 
     return socket_fd;
-fail:
-    close(socket_fd);
-    vim_free(socket_path);
-    return -1;
 
 }
 
@@ -10337,7 +10339,7 @@ socket_server_exec_cmd(ss_cmd_T *cmd, int fd)
            cmd->cmd_type == SS_CMD_TYPE_KEYSTROKES)
     {
        // Either an expression or keystrokes.
-       if (socket_server_valid() && enc != NULL)
+       if (socket_server_valid() && enc != NULL && str != NULL)
        {
            str = serverConvert(enc, str, &to_free);
 
index 742c8e2831a9da6c89c57c8225eb919966d5fbb1..af70f2217ebb857538004e13802e2f6fe656efdf 100644 (file)
@@ -15,6 +15,19 @@ func Verify_remote_feature_works()
   enew
   let buf = RunVimInTerminal('--servername XVIMTEST', {'rows': 8})
   call TermWait(buf)
+
+  " For some reason when the socket server is being used, the terminal Vim never
+  " receives the `:w! XVimRemoteTest.txt` command from term_sendkeys.
+  if has('socketserver') && !has('X11')
+    if match(serverlist(), "XVIMTEST") == -1
+      call StopVimInTerminal(buf)
+      throw s:skip
+    endif
+
+    let s:remote = 1
+    return
+  endif
+
   let cmd = GetVimCommandCleanTerm() .. '--serverlist'
   call term_sendkeys(buf, ":r! " .. cmd .. "\<CR>")
   call TermWait(buf)
index 85532296337195e3b514ec7b73df1643ec5059f0..bb381030276e83b1931ad0411e72d4a764d3d190 100644 (file)
@@ -724,6 +724,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1661,
 /**/
     1660,
 /**/