Skip to content

Commit

Permalink
patch: forbid enable cliprdr without feature
Browse files Browse the repository at this point in the history
Signed-off-by: ClSlaid <[email protected]>
  • Loading branch information
ClSlaid committed Oct 29, 2023
1 parent dc02ce3 commit 79f6b5c
Show file tree
Hide file tree
Showing 6 changed files with 23 additions and 16 deletions.
3 changes: 2 additions & 1 deletion libs/clipboard/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@ unix-file-copy-paste = [
"dep:libc",
"dep:dashmap",
"dep:percent-encoding",
"dep:utf16string"
"dep:utf16string",
"dep:once_cell"
]

[dependencies]
Expand Down
5 changes: 4 additions & 1 deletion src/client/io_loop.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1704,7 +1704,10 @@ impl<T: InvokeUiSession> Remote<T> {
}

fn check_clipboard_file_context(&self) {
#[cfg(any(target_os = "windows", target_os = "linux"))]
#[cfg(any(
target_os = "windows",
all(feature = "unix-file-copy-paste", target_os = "linux")
))]
{
let enabled = *self.handler.server_file_transfer_enabled.read().unwrap()
&& self.handler.lc.read().unwrap().enable_file_transfer.v;
Expand Down
12 changes: 6 additions & 6 deletions src/common.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,22 +14,22 @@ pub enum GrabState {
#[cfg(not(any(
target_os = "android",
target_os = "ios",
all(target_os = "linux", not(feature = "wayland"))
all(target_os = "linux", feature = "unix-file-copy-paste")
)))]
pub use arboard::Clipboard as ClipboardContext;

#[cfg(all(target_os = "linux", not(feature = "wayland")))]
#[cfg(all(target_os = "linux", feature = "unix-file-copy-paste"))]
static X11_CLIPBOARD: once_cell::sync::OnceCell<x11_clipboard::Clipboard> =
once_cell::sync::OnceCell::new();

#[cfg(all(target_os = "linux", not(feature = "wayland")))]
#[cfg(all(target_os = "linux", feature = "unix-file-copy-paste"))]
fn get_clipboard() -> Result<&'static x11_clipboard::Clipboard, String> {
X11_CLIPBOARD
.get_or_try_init(|| x11_clipboard::Clipboard::new())
.map_err(|e| e.to_string())
}

#[cfg(all(target_os = "linux", not(feature = "wayland")))]
#[cfg(all(target_os = "linux", feature = "unix-file-copy-paste"))]
pub struct ClipboardContext {
string_setter: x11rb::protocol::xproto::Atom,
string_getter: x11rb::protocol::xproto::Atom,
Expand All @@ -39,7 +39,7 @@ pub struct ClipboardContext {
prop: x11rb::protocol::xproto::Atom,
}

#[cfg(all(target_os = "linux", not(feature = "wayland")))]
#[cfg(all(target_os = "linux", feature = "unix-file-copy-paste"))]
fn parse_plain_uri_list(v: Vec<u8>) -> Result<String, String> {
let text = String::from_utf8(v).map_err(|_| "ConversionFailure".to_owned())?;
let mut list = String::new();
Expand All @@ -56,7 +56,7 @@ fn parse_plain_uri_list(v: Vec<u8>) -> Result<String, String> {
Ok(list)
}

#[cfg(all(target_os = "linux", not(feature = "wayland")))]
#[cfg(all(target_os = "linux", feature = "unix-file-copy-paste"))]
impl ClipboardContext {
pub fn new() -> Result<Self, String> {
let clipboard = get_clipboard()?;
Expand Down
10 changes: 4 additions & 6 deletions src/ui_cm_interface.rs
Original file line number Diff line number Diff line change
Expand Up @@ -575,12 +575,10 @@ pub async fn start_ipc<T: InvokeUiCM>(cm: ConnectionManager<T>) {
}
});

log::debug!(
"start_ipc enable context_send: {}",
Config::get_option("enable-file-transfer").is_empty()
);

#[cfg(any(target_os = "windows", target_os = "linux"))]
#[cfg(any(
target_os = "windows",
all(target_os = "linux", feature = "unix-file-copy-paste"),
))]
ContextSend::enable(Config::get_option("enable-file-transfer").is_empty());

match ipc::new_listener("_cm").await {
Expand Down
4 changes: 3 additions & 1 deletion src/ui_interface.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1030,7 +1030,9 @@ async fn check_connect_status_(reconnect: bool, rx: mpsc::UnboundedReceiver<ipc:
*OPTIONS.lock().unwrap() = v;
*OPTION_SYNCED.lock().unwrap() = true;

#[cfg(any(target_os="windows", target_os="linux"))]
#[cfg(any(target_os="windows",
all(target_os="linux", feature = "unix-file-copy-paste")
))]
{
let b = OPTIONS.lock().unwrap().get("enable-file-transfer").map(|x| x.to_string()).unwrap_or_default();
if b != enable_file_transfer {
Expand Down
5 changes: 4 additions & 1 deletion src/ui_session_interface.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1420,7 +1420,10 @@ impl<T: InvokeUiSession> Session<T> {
#[tokio::main(flavor = "current_thread")]
pub async fn io_loop<T: InvokeUiSession>(handler: Session<T>, round: u32) {
// It is ok to call this function multiple times.
#[cfg(any(target_os = "windows", target_os = "linux"))]
#[cfg(any(
target_os = "windows",
all(target_os = "linux", feature = "unix-file-copy-paste")
))]
if !handler.is_file_transfer() && !handler.is_port_forward() {
clipboard::ContextSend::enable(true);
}
Expand Down

0 comments on commit 79f6b5c

Please sign in to comment.