@@ -17,6 +17,13 @@ function fetchCall(fetchMock: ReturnType<typeof vi.fn>, index = 0): [string, Req
1717 return call as [ string , RequestInit ] ;
1818}
1919
20+ function oversizedJsonResponse ( ) : Response {
21+ return new Response ( Buffer . alloc ( 16 * 1024 * 1024 + 1 , 0x20 ) , {
22+ status : 200 ,
23+ headers : { "Content-Type" : "application/json" } ,
24+ } ) ;
25+ }
26+
2027describe ( "vydra image-generation provider" , ( ) => {
2128 installPinnedHostnameTestHooks ( ) ;
2229
@@ -94,6 +101,21 @@ describe("vydra image-generation provider", () => {
94101 ) . rejects . toThrow ( "Vydra image download exceeds 1 bytes" ) ;
95102 } ) ;
96103
104+ it ( "rejects image creation JSON responses that exceed the provider cap" , async ( ) => {
105+ stubVydraApiKey ( ) ;
106+ stubFetch ( oversizedJsonResponse ( ) ) ;
107+
108+ const provider = buildVydraImageGenerationProvider ( ) ;
109+ await expect (
110+ provider . generateImage ( {
111+ provider : "vydra" ,
112+ model : "grok-imagine" ,
113+ prompt : "draw a cat" ,
114+ cfg : { } ,
115+ } ) ,
116+ ) . rejects . toThrow ( "vydra.image-generation: JSON response exceeds 16777216 bytes" ) ;
117+ } ) ;
118+
97119 it ( "passes request SSRF policy to the image creation request" , async ( ) => {
98120 stubVydraApiKey ( ) ;
99121 const fetchMock = stubFetch (
@@ -151,4 +173,19 @@ describe("vydra image-generation provider", () => {
151173 expect ( pollCall [ 0 ] ) . toBe ( "https://www.vydra.ai/api/v1/jobs/job-456" ) ;
152174 expect ( pollCall [ 1 ] . method ) . toBe ( "GET" ) ;
153175 } ) ;
176+
177+ it ( "rejects job poll JSON responses that exceed the provider cap" , async ( ) => {
178+ stubVydraApiKey ( ) ;
179+ stubFetch ( jsonResponse ( { jobId : "job-456" , status : "queued" } ) , oversizedJsonResponse ( ) ) ;
180+
181+ const provider = buildVydraImageGenerationProvider ( ) ;
182+ await expect (
183+ provider . generateImage ( {
184+ provider : "vydra" ,
185+ model : "grok-imagine" ,
186+ prompt : "draw a cat" ,
187+ cfg : { } ,
188+ } ) ,
189+ ) . rejects . toThrow ( "Vydra job status: JSON response exceeds 16777216 bytes" ) ;
190+ } ) ;
154191} ) ;
0 commit comments