diff options
| author | Aram Drevekenin <aram@poor.dev> | 2026-03-30 16:43:01 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-03-30 16:43:01 +0200 |
| commit | 00c6b0f549bd25ce82b73da8138d3c63599525f7 (patch) | |
| tree | 261a8c9d367d5edfd8b3f2f966d7f86e74967afe /zellij-client | |
| parent | Layout string flag (#4956) (diff) | |
| download | sl0ppij-00c6b0f549bd25ce82b73da8138d3c63599525f7.tar.gz sl0ppij-00c6b0f549bd25ce82b73da8138d3c63599525f7.tar.xz sl0ppij-00c6b0f549bd25ce82b73da8138d3c63599525f7.zip | |
Error on socket paths that are too long (#4957)
* error on socket paths that are too long
* add pr
Diffstat (limited to 'zellij-client')
| -rw-r--r-- | zellij-client/src/cli_client.rs | 2 | ||||
| -rw-r--r-- | zellij-client/src/lib.rs | 19 | ||||
| -rw-r--r-- | zellij-client/src/web_client/session_management.rs | 1 |
3 files changed, 22 insertions, 0 deletions
diff --git a/zellij-client/src/cli_client.rs b/zellij-client/src/cli_client.rs index 22fd6c74..5887035b 100644 --- a/zellij-client/src/cli_client.rs +++ b/zellij-client/src/cli_client.rs @@ -28,6 +28,7 @@ pub fn start_cli_client( sock_dir.push(session_name); sock_dir }; + crate::check_ipc_pipe_length(&zellij_ipc_pipe); os_input.connect_to_server(&*zellij_ipc_pipe); let pane_id = os_input .env_variable("ZELLIJ_PANE_ID") @@ -264,6 +265,7 @@ pub fn start_subscribe_client( sock_dir.push(session_name); sock_dir }; + crate::check_ipc_pipe_length(&zellij_ipc_pipe); os_input.connect_to_server(&*zellij_ipc_pipe); // Parse pane IDs diff --git a/zellij-client/src/lib.rs b/zellij-client/src/lib.rs index b4fb2e15..fbebb18f 100644 --- a/zellij-client/src/lib.rs +++ b/zellij-client/src/lib.rs @@ -302,6 +302,23 @@ fn spawn_web_server(_cli_args: &CliArgs) -> Result<String, String> { Ok("".to_owned()) } +fn check_ipc_pipe_length(ipc_pipe: &Path) { + use zellij_utils::consts::ZELLIJ_SOCK_MAX_LENGTH; + let path_len = ipc_pipe.as_os_str().len(); + if path_len >= ZELLIJ_SOCK_MAX_LENGTH { + eprintln!( + "Error: the IPC socket path is too long ({} bytes, max {}):\n {}\n\n\ + This is usually caused by a long $TMPDIR path.\n\ + To fix this, set a shorter socket directory, eg.:\n \ + ZELLIJ_SOCKET_DIR=/tmp/zellij zellij", + path_len, + ZELLIJ_SOCK_MAX_LENGTH - 1, + ipc_pipe.display() + ); + std::process::exit(1); + } +} + /// Spawn the Zellij server process. /// /// On Unix the server daemonizes (double-fork) inside start_server(), so @@ -757,6 +774,7 @@ pub fn start_client( std::fs::create_dir_all(&sock_dir).unwrap(); set_permissions(&sock_dir, 0o700).unwrap(); sock_dir.push(envs::get_session_name().unwrap()); + check_ipc_pipe_length(&sock_dir); sock_dir }; @@ -1293,6 +1311,7 @@ pub fn start_server_detached( std::fs::create_dir_all(&sock_dir).unwrap(); set_permissions(&sock_dir, 0o700).unwrap(); sock_dir.push(envs::get_session_name().unwrap()); + check_ipc_pipe_length(&sock_dir); sock_dir }; diff --git a/zellij-client/src/web_client/session_management.rs b/zellij-client/src/web_client/session_management.rs index 65d96ea1..3551ebb4 100644 --- a/zellij-client/src/web_client/session_management.rs +++ b/zellij-client/src/web_client/session_management.rs @@ -145,5 +145,6 @@ pub fn create_ipc_pipe(session_name: &str) -> PathBuf { sock_dir.push(session_name); sock_dir }; + crate::check_ipc_pipe_length(&zellij_ipc_pipe); zellij_ipc_pipe } |
