tawasuyu

tawasuyu/brahman

Rust 492TOML 194Markdown 53JSON 176939 Definitions

gioser-graph: fix panic slicing multi-byte chars (á, ñ, etc)

- Use .chars().take(18) instead of byte slicing &node.name[..18]
  which panics on accented characters

2588673caf57bede06a28f7f2eb8c282533caf82 · by Sergio · (5 months ago) · parent fa2bedf85 · browse the tree at this commit

Semantic delta · 1

crates/modules/gioser/gioser-graph-web/src/lib.rs

2 files · +3 −2

diff --git a/crates/apps/gioser-web/pkg/gioser_web_bg.wasm b/crates/apps/gioser-web/pkg/gioser_web_bg.wasm
index 4dfe114..fa7efc8 100644
Binary files a/crates/apps/gioser-web/pkg/gioser_web_bg.wasm and b/crates/apps/gioser-web/pkg/gioser_web_bg.wasm differ
diff --git a/crates/modules/gioser/gioser-graph-web/src/lib.rs b/crates/modules/gioser/gioser-graph-web/src/lib.rs
index 7c0ce4c..43b92cd 100644
--- a/crates/modules/gioser/gioser-graph-web/src/lib.rs
+++ b/crates/modules/gioser/gioser-graph-web/src/lib.rs
@@ -248,8 +248,9 @@ impl GraphWidget {
         for (i, node) in self.nodes.iter().enumerate() {
             let Some((cx, cy)) = positions.get(i).map(|(_, p)| *p) else { continue; };
             let color = camino_color(&node.camino).to_string();
-            let label = if node.name.len() > 20 {
-                format!("{}…", &node.name[..18])
+            let label = if node.name.chars().count() > 20 {
+                let cutoff: String = node.name.chars().take(18).collect();
+                format!("{}…", cutoff)
             } else {
                 node.name.clone()
             };