Skip to content

Commit

Permalink
Catch panic from oo7 when reading credentials (#21617)
Browse files Browse the repository at this point in the history
  • Loading branch information
cole-miller authored Dec 6, 2024
1 parent e8f0ebc commit 304158e
Showing 1 changed file with 8 additions and 3 deletions.
11 changes: 8 additions & 3 deletions crates/gpui/src/platform/linux/platform.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ use std::fs::File;
use std::io::Read;
use std::ops::{Deref, DerefMut};
use std::os::fd::{AsFd, AsRawFd, FromRawFd};
use std::panic::Location;
use std::panic::{AssertUnwindSafe, Location};
use std::rc::Weak;
use std::{
path::{Path, PathBuf},
Expand All @@ -23,7 +23,7 @@ use async_task::Runnable;
use calloop::channel::Channel;
use calloop::{EventLoop, LoopHandle, LoopSignal};
use flume::{Receiver, Sender};
use futures::channel::oneshot;
use futures::{channel::oneshot, future::FutureExt};
use parking_lot::Mutex;
use util::ResultExt;

Expand Down Expand Up @@ -489,7 +489,12 @@ impl<P: LinuxClient + 'static> Platform for P {
let username = attributes
.get("username")
.ok_or_else(|| anyhow!("Cannot find username in stored credentials"))?;
let secret = item.secret().await?;
// oo7 panics if the retrieved secret can't be decrypted due to
// unexpected padding.
let secret = AssertUnwindSafe(item.secret())
.catch_unwind()
.await
.map_err(|_| anyhow!("oo7 panicked while trying to read credentials"))??;

// we lose the zeroizing capabilities at this boundary,
// a current limitation GPUI's credentials api
Expand Down

0 comments on commit 304158e

Please sign in to comment.