mirror of
https://github.com/penpot/penpot.git
synced 2026-09-19 02:16:14 +00:00
🐛 Fix workspace crash on non-string thumbnail URIs
Thumbnail :uri values arrive from the server over transit, so media-ids decode to UUID objects instead of strings. The resolved-uri? helper added in #11563 called clojure.string/starts-with? on them unconditionally, raising TypeError: str.lastIndexOf is not a function and crashing the workspace on frame render. Guard with string? so non-string URIs fall through to resolve-media, which stringifies them. AI-assisted-by: muse-spark-1.3-contributor
This commit is contained in:
parent
f4cf6f46f8
commit
5d5f7fcc14
@ -587,8 +587,9 @@
|
|||||||
(defn- resolved-uri?
|
(defn- resolved-uri?
|
||||||
"Returns true if the uri is already a fully resolved URI (blob or data)."
|
"Returns true if the uri is already a fully resolved URI (blob or data)."
|
||||||
[uri]
|
[uri]
|
||||||
(or (str/starts-with? uri "blob:")
|
(and (string? uri)
|
||||||
(str/starts-with? uri "data:")))
|
(or (str/starts-with? uri "blob:")
|
||||||
|
(str/starts-with? uri "data:"))))
|
||||||
|
|
||||||
(defn workspace-thumbnail-by-id
|
(defn workspace-thumbnail-by-id
|
||||||
[object-id]
|
[object-id]
|
||||||
|
|||||||
30
frontend/test/frontend_tests/main/refs_test.cljs
Normal file
30
frontend/test/frontend_tests/main/refs_test.cljs
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
;; This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
;; License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
;; file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
;;
|
||||||
|
;; Copyright (c) KALEIDOS SUBSIDIARY SL
|
||||||
|
|
||||||
|
(ns frontend-tests.main.refs-test
|
||||||
|
(:require
|
||||||
|
[app.common.uuid :as uuid]
|
||||||
|
[app.main.refs :as refs]
|
||||||
|
[cljs.test :as t :include-macros true]))
|
||||||
|
|
||||||
|
(def ^:private resolved-uri? @#'refs/resolved-uri?)
|
||||||
|
|
||||||
|
(t/deftest resolved-uri-detects-blob-and-data-uris
|
||||||
|
(t/is (true? (resolved-uri? "blob:http://localhost/thumb")))
|
||||||
|
(t/is (true? (resolved-uri? "data:image/png;base64,iVBOR"))))
|
||||||
|
|
||||||
|
(t/deftest resolved-uri-rejects-plain-media-ids
|
||||||
|
(t/is (false? (resolved-uri? "275c9c60-7f5e-4a2b-9f1c-2d3e4f5a6b7c")))
|
||||||
|
(t/is (false? (resolved-uri? ""))))
|
||||||
|
|
||||||
|
(t/deftest resolved-uri-tolerates-non-string-uris
|
||||||
|
;; Thumbnail :uri values arrive from the server over transit, so
|
||||||
|
;; media-ids decode to UUID objects instead of strings. These must
|
||||||
|
;; fall through to resolve-media instead of raising a TypeError
|
||||||
|
;; (str.lastIndexOf is not a function) that crashes the workspace.
|
||||||
|
(t/is (false? (resolved-uri? (uuid/next))))
|
||||||
|
(t/is (false? (resolved-uri? nil)))
|
||||||
|
(t/is (false? (resolved-uri? 42))))
|
||||||
@ -41,6 +41,7 @@
|
|||||||
[frontend-tests.logic.update-position-test]
|
[frontend-tests.logic.update-position-test]
|
||||||
[frontend-tests.logic.wasm-modifiers-nil-id-test]
|
[frontend-tests.logic.wasm-modifiers-nil-id-test]
|
||||||
[frontend-tests.main-errors-test]
|
[frontend-tests.main-errors-test]
|
||||||
|
[frontend-tests.main.refs-test]
|
||||||
[frontend-tests.plugins.comments-test]
|
[frontend-tests.plugins.comments-test]
|
||||||
[frontend-tests.plugins.context-shapes-test]
|
[frontend-tests.plugins.context-shapes-test]
|
||||||
[frontend-tests.plugins.file-test]
|
[frontend-tests.plugins.file-test]
|
||||||
@ -138,6 +139,7 @@
|
|||||||
'frontend-tests.logic.groups-test
|
'frontend-tests.logic.groups-test
|
||||||
'frontend-tests.logic.nudge-selected-shapes-test
|
'frontend-tests.logic.nudge-selected-shapes-test
|
||||||
'frontend-tests.logic.pasting-in-containers-test
|
'frontend-tests.logic.pasting-in-containers-test
|
||||||
|
'frontend-tests.main.refs-test
|
||||||
'frontend-tests.main-errors-test
|
'frontend-tests.main-errors-test
|
||||||
'frontend-tests.logic.sidebar-transform-coalescing-test
|
'frontend-tests.logic.sidebar-transform-coalescing-test
|
||||||
'frontend-tests.logic.update-position-test
|
'frontend-tests.logic.update-position-test
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user