fix(utils): validate session name (#2607)

* fix(utils): validate session name

* cargo fmt

* refactor: assign constant values to variables

* refactor: move operations unrealted to the condition

---------

Co-authored-by: Jae-Heon Ji <atx6419@gmail.com>
This commit is contained in:
deepsghimire 2023-09-16 12:00:35 +05:45 committed by GitHub
parent e70743e3f1
commit f1bef8f0d1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 27 additions and 1 deletions

View file

@ -9,6 +9,30 @@ use serde::{Deserialize, Serialize};
use std::path::PathBuf; use std::path::PathBuf;
use url::Url; use url::Url;
fn validate_session(name: &str) -> Result<String, String> {
#[cfg(unix)]
{
use crate::consts::ZELLIJ_SOCK_MAX_LENGTH;
let mut socket_path = crate::consts::ZELLIJ_SOCK_DIR.clone();
socket_path.push(name);
if socket_path.as_os_str().len() >= ZELLIJ_SOCK_MAX_LENGTH {
// socket path must be less than 108 bytes
let available_length = ZELLIJ_SOCK_MAX_LENGTH
.saturating_sub(socket_path.as_os_str().len())
.saturating_sub(1);
return Err(format!(
"session name must be less than {} characters",
available_length
));
};
};
Ok(name.to_owned())
}
#[derive(Parser, Default, Debug, Clone, Serialize, Deserialize)] #[derive(Parser, Default, Debug, Clone, Serialize, Deserialize)]
#[clap(version, name = "zellij")] #[clap(version, name = "zellij")]
pub struct CliArgs { pub struct CliArgs {
@ -25,7 +49,7 @@ pub struct CliArgs {
pub server: Option<PathBuf>, pub server: Option<PathBuf>,
/// Specify name of a new session /// Specify name of a new session
#[clap(long, short, overrides_with = "session", value_parser)] #[clap(long, short, overrides_with = "session", value_parser = validate_session)]
pub session: Option<String>, pub session: Option<String>,
/// Name of a predefined layout inside the layout directory or the path to a layout file /// Name of a predefined layout inside the layout directory or the path to a layout file

View file

@ -112,6 +112,8 @@ mod unix_only {
use nix::unistd::Uid; use nix::unistd::Uid;
use std::env::temp_dir; use std::env::temp_dir;
pub const ZELLIJ_SOCK_MAX_LENGTH: usize = 108;
lazy_static! { lazy_static! {
static ref UID: Uid = Uid::current(); static ref UID: Uid = Uid::current();
pub static ref ZELLIJ_TMP_DIR: PathBuf = temp_dir().join(format!("zellij-{}", *UID)); pub static ref ZELLIJ_TMP_DIR: PathBuf = temp_dir().join(format!("zellij-{}", *UID));