Skip to content

Commit

Permalink
chore(cli): remove atty crate (#20275)
Browse files Browse the repository at this point in the history
Removes a crate with an outstanding vulnerability.
  • Loading branch information
mmastrac authored and bartlomieju committed Aug 31, 2023
1 parent 5f69cda commit 60531fa
Show file tree
Hide file tree
Showing 10 changed files with 37 additions and 39 deletions.
1 change: 0 additions & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 0 additions & 1 deletion cli/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,6 @@ eszip = "=0.50.0"
napi_sym.workspace = true

async-trait.workspace = true
atty.workspace = true
base32 = "=0.4.0"
base64.workspace = true
bincode = "=1.3.3"
Expand Down
3 changes: 2 additions & 1 deletion cli/cache/cache_db.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ use deno_runtime::deno_webstorage::rusqlite::Connection;
use deno_runtime::deno_webstorage::rusqlite::OptionalExtension;
use deno_runtime::deno_webstorage::rusqlite::Params;
use once_cell::sync::OnceCell;
use std::io::IsTerminal;
use std::path::PathBuf;
use std::sync::Arc;

Expand Down Expand Up @@ -261,7 +262,7 @@ impl CacheDB {
};

// Failed, try deleting it
let is_tty = atty::is(atty::Stream::Stderr);
let is_tty = std::io::stderr().is_terminal();
log::log!(
if is_tty { log::Level::Warn } else { log::Level::Trace },
"Could not initialize cache database '{}', deleting and retrying... ({err:?})",
Expand Down
3 changes: 2 additions & 1 deletion cli/tools/upgrade.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ use once_cell::sync::Lazy;
use std::borrow::Cow;
use std::env;
use std::fs;
use std::io::IsTerminal;
use std::ops::Sub;
use std::path::Path;
use std::path::PathBuf;
Expand Down Expand Up @@ -210,7 +211,7 @@ pub fn check_for_upgrades(

// Print a message if an update is available
if let Some(upgrade_version) = update_checker.should_prompt() {
if log::log_enabled!(log::Level::Info) && atty::is(atty::Stream::Stderr) {
if log::log_enabled!(log::Level::Info) && std::io::stderr().is_terminal() {
if version::is_canary() {
eprint!(
"{} ",
Expand Down
3 changes: 2 additions & 1 deletion cli/util/draw_thread.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ use deno_core::parking_lot::Mutex;
use deno_core::unsync::spawn_blocking;
use deno_runtime::ops::tty::ConsoleSize;
use once_cell::sync::Lazy;
use std::io::IsTerminal;
use std::sync::Arc;
use std::time::Duration;

Expand Down Expand Up @@ -70,7 +71,7 @@ static INTERNAL_STATE: Lazy<Arc<Mutex<InternalState>>> = Lazy::new(|| {
});

static IS_TTY_WITH_CONSOLE_SIZE: Lazy<bool> = Lazy::new(|| {
atty::is(atty::Stream::Stderr)
std::io::stderr().is_terminal()
&& console_size()
.map(|s| s.cols > 0 && s.rows > 0)
.unwrap_or(false)
Expand Down
3 changes: 2 additions & 1 deletion cli/util/file_watcher.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ use notify::RecommendedWatcher;
use notify::RecursiveMode;
use notify::Watcher;
use std::collections::HashSet;
use std::io::IsTerminal;
use std::path::PathBuf;
use std::sync::Arc;
use std::time::Duration;
Expand Down Expand Up @@ -98,7 +99,7 @@ pub struct PrintConfig {

fn create_print_after_restart_fn(clear_screen: bool) -> impl Fn() {
move || {
if clear_screen && atty::is(atty::Stream::Stderr) {
if clear_screen && std::io::stderr().is_terminal() {
eprint!("{CLEAR_SCREEN}");
}
info!(
Expand Down
4 changes: 2 additions & 2 deletions runtime/colors.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.

use atty;
use once_cell::sync::Lazy;
use std::fmt;
use std::io::IsTerminal;
use std::io::Write;
use termcolor::Ansi;
use termcolor::Color::Ansi256;
Expand All @@ -25,7 +25,7 @@ use termcolor::ColorChoice;
static NO_COLOR: Lazy<bool> =
Lazy::new(|| std::env::var_os("NO_COLOR").is_some());

static IS_TTY: Lazy<bool> = Lazy::new(|| atty::is(atty::Stream::Stdout));
static IS_TTY: Lazy<bool> = Lazy::new(|| std::io::stdout().is_terminal());

pub fn is_tty() -> bool {
*IS_TTY
Expand Down
5 changes: 1 addition & 4 deletions runtime/js/40_tty.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ const ops = core.ops;
const primordials = globalThis.__bootstrap.primordials;
const {
Uint32Array,
Uint8Array,
} = primordials;

const size = new Uint32Array(2);
Expand All @@ -14,10 +13,8 @@ function consoleSize() {
return { columns: size[0], rows: size[1] };
}

const isattyBuffer = new Uint8Array(1);
function isatty(rid) {
ops.op_isatty(rid, isattyBuffer);
return !!isattyBuffer[0];
return ops.op_isatty(rid);
}

export { consoleSize, isatty };
50 changes: 24 additions & 26 deletions runtime/ops/tty.rs
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.

use std::io::Error;
use std::io::IsTerminal;

use deno_core::error::AnyError;
use deno_core::op;
use deno_core::op2;
use deno_core::OpState;
use deno_core::ResourceHandle;

#[cfg(unix)]
use deno_core::ResourceId;
Expand Down Expand Up @@ -162,32 +165,27 @@ fn op_stdin_set_raw(
}
}

#[op(fast)]
fn op_isatty(
state: &mut OpState,
rid: u32,
out: &mut [u8],
) -> Result<(), AnyError> {
let raw_fd = state.resource_table.get_fd(rid)?;
#[cfg(windows)]
{
use winapi::shared::minwindef::FALSE;
use winapi::um::consoleapi;

let handle = raw_fd;
let mut test_mode: DWORD = 0;
// If I cannot get mode out of console, it is not a console.
out[0] =
// SAFETY: Windows API
unsafe { consoleapi::GetConsoleMode(handle, &mut test_mode) != FALSE }
as u8;
}
#[cfg(unix)]
{
// SAFETY: Posix API
out[0] = unsafe { libc::isatty(raw_fd as libc::c_int) == 1 } as u8;
}
Ok(())
#[op2(fast)]
fn op_isatty(state: &mut OpState, rid: u32) -> Result<bool, AnyError> {
let handle = state.resource_table.get_handle(rid)?;
// TODO(mmastrac): this can migrate to the deno_core implementation when it lands
Ok(match handle {
ResourceHandle::Fd(fd) if handle.is_valid() => {
#[cfg(windows)]
{
// SAFETY: The resource remains open for the for the duration of borrow_raw
unsafe {
std::os::windows::io::BorrowedHandle::borrow_raw(fd).is_terminal()
}
}
#[cfg(unix)]
{
// SAFETY: The resource remains open for the for the duration of borrow_raw
unsafe { std::os::fd::BorrowedFd::borrow_raw(fd).is_terminal() }
}
}
_ => false,
})
}

#[op(fast)]
Expand Down
3 changes: 2 additions & 1 deletion runtime/permissions/prompter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ use deno_core::parking_lot::Mutex;
use once_cell::sync::Lazy;
use std::fmt::Write;
use std::io::BufRead;
use std::io::IsTerminal;
use std::io::StderrLock;
use std::io::StdinLock;
use std::io::Write as IoWrite;
Expand Down Expand Up @@ -84,7 +85,7 @@ impl PermissionPrompter for TtyPrompter {
api_name: Option<&str>,
is_unary: bool,
) -> PromptResponse {
if !atty::is(atty::Stream::Stdin) || !atty::is(atty::Stream::Stderr) {
if !std::io::stdin().is_terminal() || !std::io::stderr().is_terminal() {
return PromptResponse::Deny;
};

Expand Down

0 comments on commit 60531fa

Please sign in to comment.