fix(lib): pass raw duped fd to _fdopen

Attempting to call `_get_osfhandle(fd)` leads to a stack overflow
This commit is contained in:
WillLillis 2025-09-21 13:55:44 -04:00 committed by William Lillis
parent c89e40f008
commit 047de9bf96
2 changed files with 9 additions and 2 deletions

View file

@ -88,7 +88,6 @@ fn test_parsing_with_logging() {
}
#[test]
#[cfg(unix)]
fn test_parsing_with_debug_graph_enabled() {
use std::io::{BufRead, BufReader, Seek};

View file

@ -1386,6 +1386,11 @@ impl Drop for Parser {
}
}
#[cfg(windows)]
extern "C" {
fn _open_osfhandle(osfhandle: isize, flags: core::ffi::c_int) -> core::ffi::c_int;
}
impl Tree {
/// Get the root node of the syntax tree.
#[doc(alias = "ts_tree_root_node")]
@ -1495,7 +1500,10 @@ impl Tree {
#[cfg(windows)]
{
let handle = file.as_raw_handle();
unsafe { ffi::ts_tree_print_dot_graph(self.0.as_ptr(), handle as i32) }
unsafe {
let fd = _open_osfhandle(handle as isize, 0);
ffi::ts_tree_print_dot_graph(self.0.as_ptr(), fd);
}
}
}
}