🐛 Fix wasm crash in set_shape_fills (wasm) when fill list is empty

This commit is contained in:
Belén Albeza 2025-06-05 09:52:51 +02:00
parent ab0219876e
commit a30ab17605

View file

@ -8,7 +8,7 @@
"A WASM based render API"
(:require
["react-dom/server" :as rds]
[app.common.data :as d]
[app.common.data :as d :refer [not-empty?]]
[app.common.data.macros :as dm]
[app.common.geom.matrix :as gmt]
[app.common.geom.point :as gpt]
@ -240,36 +240,37 @@
(defn set-shape-fills
[fills]
(let [fills (take types.fill/MAX-FILLS fills)
image-fills (filter :fill-image fills)
offset (mem/alloc-bytes (* (count fills) sr-fills/FILL-BYTE-SIZE))
heap (mem/get-heap-u8)
dview (js/DataView. (.-buffer heap))]
(when (not-empty? fills)
(let [fills (take types.fill/MAX-FILLS fills)
image-fills (filter :fill-image fills)
offset (mem/alloc-bytes (* (count fills) sr-fills/FILL-BYTE-SIZE))
heap (mem/get-heap-u8)
dview (js/DataView. (.-buffer heap))]
;; write fill data to heap
(loop [fills (seq fills)
current-offset 0]
(when-not (empty? fills)
(let [fill (first fills)]
(sr-fills/write-fill! offset dview fill)
(recur (rest fills) (+ current-offset sr-fills/FILL-BYTE-SIZE)))))
(loop [fills (seq fills)
current-offset 0]
(when-not (empty? fills)
(let [fill (first fills)]
(sr-fills/write-fill! offset dview fill)
(recur (rest fills) (+ current-offset sr-fills/FILL-BYTE-SIZE)))))
;; send fills to wasm
(h/call wasm/internal-module "_set_shape_fills")
(h/call wasm/internal-module "_set_shape_fills")
;; load images for image fills if not cached
(keep (fn [fill]
(let [image (:fill-image fill)
id (dm/get-prop image :id)
buffer (uuid/get-u32 id)
cached-image? (h/call wasm/internal-module "_is_image_cached"
(aget buffer 0)
(aget buffer 1)
(aget buffer 2)
(aget buffer 3))]
(when (zero? cached-image?)
(store-image id))))
image-fills)))
(keep (fn [fill]
(let [image (:fill-image fill)
id (dm/get-prop image :id)
buffer (uuid/get-u32 id)
cached-image? (h/call wasm/internal-module "_is_image_cached"
(aget buffer 0)
(aget buffer 1)
(aget buffer 2)
(aget buffer 3))]
(when (zero? cached-image?)
(store-image id))))
image-fills))))
(defn set-shape-strokes
[strokes]