Channel stable
-
changed:
stable head
2.1.0→2.1.2
stable: Artifacts
-
changed:
Artifact crate size
2416845 bytes→2419486 bytes
Releases
- added: Release 2.1.2stable, available, dated 2026-10-15 by its publisher
- added: Release 2.1.1stable, available, dated 2026-10-15 by its publisher
Publisher's notes for 2.1.2 stable
2.1.1's fixes, released through the pipeline: 2.1.1 went to crates.io by hand, without its GitHub release or documentation.
Changed
- Two push closures end with a semicolon, as the pedantic lints ask. Nothing else differs from 2.1.1.
Migration
Nothing to change. Take 2.1.2 in place of 2.1.1; they are the same code.
Written by the publisher and shown verbatim, rendered through a sanitizer.
Publisher's notes for 2.1.1 stable
Fixes to 2.1.0's limits: no push or host-level allocation aborts the process, a wait the time limit cuts short fails the call it ends, process.run stops at the limit whatever holds its pipes, and a child finds programs on the host's PATH again.
Fixed
- A child started without
process.environmentgets the host'sPATHalong with whatenvnames, soprocess.run('git')finds a program where the host would, and so does whatever that program starts. 2.1.0 clearedPATHwith the rest, and a bare name fell back to libc's default path.clearEnv = truestill clears it. bytes.shortest(value, 'f32')answersnilfor a double past single precision's range, which narrows to an infinity. It formatted that infinity asinf, found no exponent, and aborted the process from inside the native call.- Every scalar, vector, light userdata and pinned-value push makes room on the stack first, and pinning a value, making a table, a closure or a userdata, and looking up a global run under protection at host level. A host that filled the stack, or ran out of memory under the cap while doing any of those outside a Lua call, aborted with Rust cannot catch foreign exceptions; it gets
Err. - A
@dream/tcppoller's or@dream/dnsrequest's wait cut short by the execution time limit marks the call expired, asprocess.sleepandprocess.rundo, so a script that ends with the wait fails with the limit instead of returningOk. process.runends at the execution time limit even while a process the child started holds a captured pipe open, abandoning the capture instead of waiting for its reader, and kills and reaps a child whose wait fails.
Migration
Nothing to change. A host that wanted a child to have no PATH passes clearEnv = true. Value::clone, Value::type_of and Value::eq answer as for an invalid value (an invalid clone, Type::None, false) when the main thread has no stack slot left, where they could abort before.
Written by the publisher and shown verbatim, rendered through a sanitizer.