aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md1
-rw-r--r--Cargo.lock2
-rw-r--r--alacritty/Cargo.toml2
-rw-r--r--alacritty_terminal/Cargo.toml2
-rw-r--r--alacritty_terminal/src/config/mod.rs25
-rw-r--r--alacritty_terminal/src/term/mod.rs18
-rw-r--r--extra/man/alacritty.5.scd14
7 files changed, 60 insertions, 4 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0f4957ef..c6801762 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -33,6 +33,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- The default colorscheme is now based on base16 classic dark
- IME popup now tries to not obscure the current cursor line
- The double click threshold was raised to `400ms`
+- OSC 52 paste ability is now **disabled by default**; use `terminal.osc52` to adjust it
### Fixed
diff --git a/Cargo.lock b/Cargo.lock
index b45e2414..1dbb4dff 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -72,7 +72,7 @@ dependencies = [
[[package]]
name = "alacritty_terminal"
-version = "0.19.2-dev"
+version = "0.20.0-dev"
dependencies = [
"alacritty_config",
"alacritty_config_derive",
diff --git a/alacritty/Cargo.toml b/alacritty/Cargo.toml
index 5ab00f2b..d983d962 100644
--- a/alacritty/Cargo.toml
+++ b/alacritty/Cargo.toml
@@ -11,7 +11,7 @@ rust-version = "1.65.0"
[dependencies.alacritty_terminal]
path = "../alacritty_terminal"
-version = "0.19.2-dev"
+version = "0.20.0-dev"
default-features = false
[dependencies.alacritty_config_derive]
diff --git a/alacritty_terminal/Cargo.toml b/alacritty_terminal/Cargo.toml
index 5782a8fb..2f5e930a 100644
--- a/alacritty_terminal/Cargo.toml
+++ b/alacritty_terminal/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "alacritty_terminal"
-version = "0.19.2-dev"
+version = "0.20.0-dev"
authors = ["Christian Duerr <contact@christianduerr.com>", "Joe Wilm <joe@jwilm.com>"]
license = "Apache-2.0"
description = "Library for writing terminal emulators"
diff --git a/alacritty_terminal/src/config/mod.rs b/alacritty_terminal/src/config/mod.rs
index 80be4d16..e70389ec 100644
--- a/alacritty_terminal/src/config/mod.rs
+++ b/alacritty_terminal/src/config/mod.rs
@@ -31,11 +31,36 @@ pub struct Config {
/// Cursor configuration.
pub cursor: Cursor,
+ /// Terminal specific settings.
+ pub terminal: Terminal,
+
#[config(flatten)]
pub pty_config: PtyConfig,
}
#[derive(ConfigDeserialize, Clone, Debug, PartialEq, Eq, Default)]
+pub struct Terminal {
+ // OSC 52 handling (clipboard handling).
+ pub osc52: Osc52,
+}
+
+#[derive(ConfigDeserialize, Clone, Debug, PartialEq, Eq, Default)]
+pub enum Osc52 {
+ /// The handling of the escape sequence is disabled.
+ Disabled,
+ /// Only copy sequence is accepted.
+ ///
+ /// This option is the default as a compromiss between entirely
+ /// disabling it (the most secure) and allowing `paste` (the less secure).
+ #[default]
+ OnlyCopy,
+ /// Only paste sequence is accepted.
+ OnlyPaste,
+ /// Both are accepted.
+ CopyPaste,
+}
+
+#[derive(ConfigDeserialize, Clone, Debug, PartialEq, Eq, Default)]
pub struct PtyConfig {
/// Path to a shell program to run on startup.
pub shell: Option<Program>,
diff --git a/alacritty_terminal/src/term/mod.rs b/alacritty_terminal/src/term/mod.rs
index 7c4abb57..2e66b402 100644
--- a/alacritty_terminal/src/term/mod.rs
+++ b/alacritty_terminal/src/term/mod.rs
@@ -12,7 +12,7 @@ use vte::ansi::{Hyperlink as VteHyperlink, Rgb as VteRgb};
use crate::ansi::{
self, Attr, CharsetIndex, Color, CursorShape, CursorStyle, Handler, NamedColor, StandardCharset,
};
-use crate::config::Config;
+use crate::config::{Config, Osc52, Terminal};
use crate::event::{Event, EventListener};
use crate::grid::{Dimensions, Grid, GridIterator, Scroll};
use crate::index::{self, Boundary, Column, Direction, Line, Point, Side};
@@ -304,6 +304,9 @@ pub struct Term<T> {
/// Information about damaged cells.
damage: TermDamageState,
+
+ /// Config directly for the terminal.
+ config: Terminal,
}
impl<T> Term<T> {
@@ -363,6 +366,7 @@ impl<T> Term<T> {
title_stack: Vec::new(),
selection: None,
damage,
+ config: config.terminal.clone(),
}
}
@@ -461,6 +465,8 @@ impl<T> Term<T> {
self.grid.update_history(config.scrolling.history() as usize);
}
+ self.config = config.terminal.clone();
+
// Damage everything on config updates.
self.mark_fully_damaged();
}
@@ -1539,6 +1545,11 @@ impl<T: EventListener> Handler for Term<T> {
/// Store data into clipboard.
#[inline]
fn clipboard_store(&mut self, clipboard: u8, base64: &[u8]) {
+ if !matches!(self.config.osc52, Osc52::OnlyCopy | Osc52::CopyPaste) {
+ debug!("Denied osc52 store");
+ return;
+ }
+
let clipboard_type = match clipboard {
b'c' => ClipboardType::Clipboard,
b'p' | b's' => ClipboardType::Selection,
@@ -1555,6 +1566,11 @@ impl<T: EventListener> Handler for Term<T> {
/// Load data from clipboard.
#[inline]
fn clipboard_load(&mut self, clipboard: u8, terminator: &str) {
+ if !matches!(self.config.osc52, Osc52::OnlyPaste | Osc52::CopyPaste) {
+ debug!("Denied osc52 load");
+ return;
+ }
+
let clipboard_type = match clipboard {
b'c' => ClipboardType::Clipboard,
b'p' | b's' => ClipboardType::Selection,
diff --git a/extra/man/alacritty.5.scd b/extra/man/alacritty.5.scd
index ec670e75..f9e82ba3 100644
--- a/extra/man/alacritty.5.scd
+++ b/extra/man/alacritty.5.scd
@@ -534,6 +534,20 @@ This section documents the *[cursor]* table of the configuration file.
Default: _0.15_
+# Terminal
+
+This section documents the *[terminal]* table of the configuration file.
+
+*osc52* "Disabled" | "OnlyCopy" | "OnlyPaste" | "CopyPaste"
+
+ Controls the ability to write to the system clipboard with the _OSC 52_
+ escape sequence. While this escape sequence is useful to copy contents
+ from the remote server, allowing any application to read from the clipboard
+ can be easily abused while not providing significant benefits over
+ explicitly pasting text.
+
+ Default: _"OnlyCopy"_
+
# Mouse
This section documents the *[mouse]* table of the configuration file.