diff options
| author | Fuwn <[email protected]> | 2026-05-27 09:57:05 +0000 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2026-05-27 10:12:41 +0000 |
| commit | 5788c408b7e8afe35926cf62daefa3d45777a67c (patch) | |
| tree | fe2130df6fffa5976e1e2b4ffd9bbe192e3e1df8 | |
| parent | refactor: Fold images, extract pad_digits, rename xml binding (diff) | |
| download | mayu-5788c408b7e8afe35926cf62daefa3d45777a67c.tar.xz mayu-5788c408b7e8afe35926cf62daefa3d45777a67c.zip | |
fix: Reject out-of-range digits and surface data directory errors
| -rw-r--r-- | src/cache.gleam | 7 | ||||
| -rw-r--r-- | src/mayu.gleam | 11 |
2 files changed, 16 insertions, 2 deletions
diff --git a/src/cache.gleam b/src/cache.gleam index f3baade..17fc168 100644 --- a/src/cache.gleam +++ b/src/cache.gleam @@ -55,7 +55,12 @@ fn load_theme(theme) -> Dict(Int, CachedImage) { fn parse_digit_filename(file) { case string.split(file, ".") { - [digit, _extension] -> int.parse(digit) + [digit, _extension] -> + case int.parse(digit) { + Ok(parsed_digit) if parsed_digit >= 0 && parsed_digit <= 9 -> + Ok(parsed_digit) + _ -> Error(Nil) + } _ -> Error(Nil) } } diff --git a/src/mayu.gleam b/src/mayu.gleam index 0d9fcf9..edb912d 100644 --- a/src/mayu.gleam +++ b/src/mayu.gleam @@ -12,7 +12,16 @@ import wisp pub fn main() { wisp.configure_logger() - let _ = simplifile.create_directory("./data") + case simplifile.create_directory("./data") { + Ok(_) | Error(simplifile.Eexist) -> Nil + Error(error) -> { + wisp.log_error( + "Failed to create ./data directory: " + <> simplifile.describe_error(error), + ) + panic as "cannot create data directory" + } + } let image_cache = cache.load_themes() let version_tag = case envoy.get("MAYU_VERSION") { Ok(version) -> "(v" <> version <> ")" |