mirror of
https://github.com/storytold/figcraft.git
synced 2026-10-31 22:06:49 -06:00
M8: an explicit variables file is refused past 256 MiB or when it isn't a regular file (part of #1114)
variable.import and the variables parameter of file.open and file.import read an explicit path with the uncapped reader, while the sibling variables.json next to a REST file already went through read_capped with MAX_VARIABLES_FILE. variables_param now uses that capped read for paths on native builds; the browser keeps its no-file-system error. Inline objects and JSON text, and access roots, are unchanged. The check reads the size before the file, so it does not bound a file that grows or is replaced in between. Primary file reads and image.place stay uncapped. variable.import's help and docs/mcp.md name the limit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Co-Authored-By: GPT-6.1 Sol <noreply@openai.com> Co-Authored-By: GPT-6 Astra <noreply@openai.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
GPT-6.1 Sol
parent
38a4feccc9
commit
9093afac10
@@ -699,6 +699,10 @@ pub(crate) fn variables_param(cmd: &str, p: &Value) -> Result<Option<Value>> {
|
||||
None | Some(Value::Null) => return Ok(None),
|
||||
Some(v @ Value::Object(_)) => v.clone(),
|
||||
Some(Value::String(s)) if s.trim_start().starts_with('{') => parse(s.as_bytes())?,
|
||||
// Capped like the sibling file; the browser has no file system, which `read` says.
|
||||
#[cfg(not(target_arch = "wasm32"))]
|
||||
Some(Value::String(path)) => parse(&read_capped(path, MAX_VARIABLES_FILE)?)?,
|
||||
#[cfg(target_arch = "wasm32")]
|
||||
Some(Value::String(path)) => parse(&read(path)?)?,
|
||||
Some(_) => return Err(bad(cmd, "variables: the local variables JSON (an object, JSON text or a path)")),
|
||||
};
|
||||
|
||||
@@ -25,7 +25,7 @@ pub fn specs() -> Vec<CommandSpec> {
|
||||
spec!(
|
||||
"variable.import",
|
||||
"Import variables",
|
||||
"{variables (the local variables JSON, as variable.export writes it: an object, JSON text or a path; `variableCollections` and `variables` under `meta` or at the top level)} collections join this file's collection of the same name (values by mode name; new modes and variables are added, a variable of another type is skipped), others are added → {collections (added), variables (added), updated, warnings (also when it holds no variables, or fewer than its collections list)}",
|
||||
"{variables (the local variables JSON, as variable.export writes it: an object, JSON text or a path to a regular file of at most 256 MiB; `variableCollections` and `variables` under `meta` or at the top level)} collections join this file's collection of the same name (values by mode name; new modes and variables are added, a variable of another type is skipped), others are added → {collections (added), variables (added), updated, warnings (also when it holds no variables, or fewer than its collections list)}",
|
||||
true,
|
||||
import
|
||||
),
|
||||
|
||||
Reference in New Issue
Block a user