Skip to content

Commit 20ab469

Browse files
brsonLucasSte
authored andcommitted
[SOL] Don't create invalid string slices in stdout/stderr on Solana
1 parent e6c060b commit 20ab469

File tree

4 files changed

+8
-20
lines changed

4 files changed

+8
-20
lines changed

library/std/src/alloc.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -378,7 +378,7 @@ pub fn rust_oom(layout: Layout) -> ! {
378378
}
379379
#[cfg(any(target_arch = "bpf", target_arch = "sbf"))]
380380
{
381-
crate::sys::sol_log("Error: memory allocation failed, out of memory");
381+
crate::sys::sol_log(b"Error: memory allocation failed, out of memory");
382382
}
383383
crate::process::abort()
384384
}

library/std/src/io/stdio.rs

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -992,9 +992,7 @@ impl Write for Stdout {
992992
#[cfg(any(target_arch = "bpf", target_arch = "sbf"))]
993993
impl Write for Stdout {
994994
fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
995-
unsafe {
996-
crate::sys::sol_log(core::str::from_utf8_unchecked(buf));
997-
}
995+
crate::sys::sol_log(buf);
998996
Ok(buf.len())
999997
}
1000998
fn write_vectored(&mut self, _bufs: &[IoSlice<'_>]) -> io::Result<usize> {
@@ -1008,9 +1006,7 @@ impl Write for Stdout {
10081006
Ok(())
10091007
}
10101008
fn write_all(&mut self, buf: &[u8]) -> io::Result<()> {
1011-
unsafe {
1012-
crate::sys::sol_log(core::str::from_utf8_unchecked(buf));
1013-
}
1009+
crate::sys::sol_log(buf);
10141010
Ok(())
10151011
}
10161012
fn write_all_vectored(&mut self, _bufs: &mut [IoSlice<'_>]) -> io::Result<()> {
@@ -1352,9 +1348,7 @@ impl Write for Stderr {
13521348
#[cfg(any(target_arch = "bpf", target_arch = "sbf"))]
13531349
impl Write for Stderr {
13541350
fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
1355-
unsafe {
1356-
crate::sys::sol_log(core::str::from_utf8_unchecked(buf));
1357-
}
1351+
crate::sys::sol_log(buf);
13581352
Ok(buf.len())
13591353
}
13601354
fn write_vectored(&mut self, _bufs: &[IoSlice<'_>]) -> io::Result<usize> {
@@ -1368,9 +1362,7 @@ impl Write for Stderr {
13681362
Ok(())
13691363
}
13701364
fn write_all(&mut self, buf: &[u8]) -> io::Result<()> {
1371-
unsafe {
1372-
crate::sys::sol_log(core::str::from_utf8_unchecked(buf));
1373-
}
1365+
crate::sys::sol_log(buf);
13741366
Ok(())
13751367
}
13761368
fn write_all_vectored(&mut self, _bufs: &mut [IoSlice<'_>]) -> io::Result<()> {

library/std/src/sys/sbf/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ extern "C" {
4949
fn sol_log_(message: *const u8, length: u64);
5050
}
5151

52-
pub fn sol_log(message: &str) {
52+
pub fn sol_log(message: &[u8]) {
5353
unsafe {
5454
sol_log_(message.as_ptr(), message.len() as u64);
5555
}

library/std/src/sys/sbf/stdio.rs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,7 @@ impl Stdout {
1818

1919
impl io::Write for Stdout {
2020
fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
21-
unsafe {
22-
crate::sys::sol_log(core::str::from_utf8_unchecked(buf));
23-
}
21+
crate::sys::sol_log(buf);
2422
Ok(buf.len())
2523
}
2624

@@ -34,9 +32,7 @@ impl Stderr {
3432

3533
impl io::Write for Stderr {
3634
fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
37-
unsafe {
38-
crate::sys::sol_log(core::str::from_utf8_unchecked(buf));
39-
}
35+
crate::sys::sol_log(buf);
4036
Ok(buf.len())
4137
}
4238

0 commit comments

Comments
 (0)