aboutsummaryrefslogtreecommitdiff
path: root/src/platform/macos.rs
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-05-20 14:40:01 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-05-20 14:40:01 +0300
commit5be7d07018c4e039468a0c48e7103e7508ef55cd (patch)
tree3c6d12f5a09f207903130d6537854521435b9999 /src/platform/macos.rs
parent00819ac000bf89dc822da67bca6cd238796c23e6 (diff)
fix: cap clipboard image reads
Diffstat (limited to 'src/platform/macos.rs')
-rw-r--r--src/platform/macos.rs18
1 files changed, 14 insertions, 4 deletions
diff --git a/src/platform/macos.rs b/src/platform/macos.rs
index d0cf43c8..7bec8e26 100644
--- a/src/platform/macos.rs
+++ b/src/platform/macos.rs
@@ -5,7 +5,10 @@ use std::path::{Path, PathBuf};
use std::process::{Command, Stdio};
use std::sync::OnceLock;
-use super::{ClipboardCommand, ClipboardImage, ForegroundJob, ForegroundProcess, Signal};
+use super::{
+ read_limited_reader, ClipboardCommand, ClipboardImage, ForegroundJob, ForegroundProcess,
+ LimitedRead, Signal,
+};
const PROC_PGRP_ONLY: u32 = 2;
@@ -227,10 +230,17 @@ pub fn read_clipboard_image() -> Option<ClipboardImage> {
return None;
}
- let bytes = std::fs::read(&path).ok();
+ let bytes = match std::fs::File::open(&path).ok().and_then(|file| {
+ read_limited_reader(file, crate::server::protocol::MAX_CLIPBOARD_IMAGE_PAYLOAD).ok()
+ }) {
+ Some(LimitedRead::Complete(bytes)) => bytes,
+ Some(LimitedRead::Empty | LimitedRead::Oversized) | None => {
+ let _ = std::fs::remove_file(&path);
+ return None;
+ }
+ };
let _ = std::fs::remove_file(&path);
- let bytes = bytes?;
- (!bytes.is_empty()).then_some(ClipboardImage {
+ Some(ClipboardImage {
bytes,
extension: "png",
})