11import { describe , expect , it } from "vitest" ;
2- import { parseCanvasSnapshotPayload } from "./cli-helpers.js" ;
2+ import {
3+ canvasSnapshotTempPath ,
4+ normalizeCanvasSnapshotFileExtension ,
5+ parseCanvasSnapshotPayload ,
6+ } from "./cli-helpers.js" ;
37
48describe ( "canvas CLI helpers" , ( ) => {
59 it ( "parses canvas.snapshot payload" , ( ) => {
@@ -14,4 +18,45 @@ describe("canvas CLI helpers", () => {
1418 / i n v a l i d c a n v a s \. s n a p s h o t p a y l o a d / i,
1519 ) ;
1620 } ) ;
21+
22+ it . each ( [ { base64 : "aGk=" } , { format : 42 , base64 : "aGk=" } ] ) (
23+ "rejects invalid canvas.snapshot format fields" ,
24+ ( payload ) => {
25+ expect ( ( ) => parseCanvasSnapshotPayload ( payload ) ) . toThrow (
26+ / i n v a l i d c a n v a s \. s n a p s h o t p a y l o a d / i,
27+ ) ;
28+ } ,
29+ ) ;
30+
31+ it . each ( [ "/../../target.sh" , "../target.sh" , "png/../../target.sh" , "image/png" , "" ] ) (
32+ "rejects unsafe canvas.snapshot formats from responses: %s" ,
33+ ( format ) => {
34+ expect ( ( ) => parseCanvasSnapshotPayload ( { format, base64 : "aGk=" } ) ) . toThrow (
35+ / i n v a l i d c a n v a s \. s n a p s h o t p a y l o a d / i,
36+ ) ;
37+ } ,
38+ ) ;
39+
40+ it ( "normalizes supported snapshot file extensions" , ( ) => {
41+ expect ( normalizeCanvasSnapshotFileExtension ( "png" ) ) . toBe ( "png" ) ;
42+ expect ( normalizeCanvasSnapshotFileExtension ( ".jpeg" ) ) . toBe ( "jpg" ) ;
43+ expect ( normalizeCanvasSnapshotFileExtension ( " JPG " ) ) . toBe ( "jpg" ) ;
44+ } ) ;
45+
46+ it ( "rejects unsafe snapshot temp path parts" , ( ) => {
47+ expect ( ( ) =>
48+ canvasSnapshotTempPath ( {
49+ tmpDir : "/tmp/openclaw-canvas-test" ,
50+ id : "snapshot" ,
51+ ext : "/../../target.sh" ,
52+ } ) ,
53+ ) . toThrow ( / i n v a l i d c a n v a s \. s n a p s h o t f o r m a t / i) ;
54+ expect ( ( ) =>
55+ canvasSnapshotTempPath ( {
56+ tmpDir : "/tmp/openclaw-canvas-test" ,
57+ id : "../../snapshot" ,
58+ ext : "png" ,
59+ } ) ,
60+ ) . toThrow ( / i n v a l i d c a n v a s s n a p s h o t i d / i) ;
61+ } ) ;
1762} ) ;
0 commit comments