From 302a97e29c7e920602121f80e523f9219e6f8132 Mon Sep 17 00:00:00 2001 From: Alexandru Carp Date: Wed, 3 May 2023 21:30:45 +0300 Subject: [PATCH 1/3] added check for command return and for buf size --- apis/console/src/lib.rs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/apis/console/src/lib.rs b/apis/console/src/lib.rs index 423344c1..1acf6e10 100644 --- a/apis/console/src/lib.rs +++ b/apis/console/src/lib.rs @@ -39,6 +39,9 @@ impl Console { /// This is an alternative to `fmt::Write::write` /// because this can actually return an error code. pub fn write(s: &[u8]) -> Result<(), ErrorCode> { + if s.len() == 0 { + return Ok(()); + } let called: Cell> = Cell::new(None); share::scope::< ( @@ -54,7 +57,11 @@ impl Console { S::subscribe::<_, _, C, DRIVER_NUM, { subscribe::WRITE }>(subscribe, &called)?; - S::command(DRIVER_NUM, command::WRITE, s.len() as u32, 0).to_result()?; + if let Err(err) = S::command(DRIVER_NUM, command::WRITE, s.len() as u32, 0) + .to_result::<(), ErrorCode>() + { + return Err(err); + } loop { S::yield_wait(); From e0e3fc4377277cbae22b06fb395359dfb22cc707 Mon Sep 17 00:00:00 2001 From: Alexandru Carp Date: Wed, 3 May 2023 22:10:45 +0300 Subject: [PATCH 2/3] clippy error --- apis/console/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apis/console/src/lib.rs b/apis/console/src/lib.rs index 1acf6e10..f263f193 100644 --- a/apis/console/src/lib.rs +++ b/apis/console/src/lib.rs @@ -39,7 +39,7 @@ impl Console { /// This is an alternative to `fmt::Write::write` /// because this can actually return an error code. pub fn write(s: &[u8]) -> Result<(), ErrorCode> { - if s.len() == 0 { + if s.is_empty() { return Ok(()); } let called: Cell> = Cell::new(None); From b308f77855f4e9a7b5c0c1fd43bfc2ae82a625e3 Mon Sep 17 00:00:00 2001 From: Alexandru Carp Date: Mon, 8 May 2023 18:27:34 +0300 Subject: [PATCH 3/3] added comment --- apis/console/src/lib.rs | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/apis/console/src/lib.rs b/apis/console/src/lib.rs index f263f193..20011214 100644 --- a/apis/console/src/lib.rs +++ b/apis/console/src/lib.rs @@ -39,6 +39,7 @@ impl Console { /// This is an alternative to `fmt::Write::write` /// because this can actually return an error code. pub fn write(s: &[u8]) -> Result<(), ErrorCode> { + // for an empty string the driver would never schedule an upcall, so the app would yield infinitely if s.is_empty() { return Ok(()); } @@ -57,11 +58,7 @@ impl Console { S::subscribe::<_, _, C, DRIVER_NUM, { subscribe::WRITE }>(subscribe, &called)?; - if let Err(err) = S::command(DRIVER_NUM, command::WRITE, s.len() as u32, 0) - .to_result::<(), ErrorCode>() - { - return Err(err); - } + S::command(DRIVER_NUM, command::WRITE, s.len() as u32, 0).to_result()?; loop { S::yield_wait();