about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorbptato <nincsnevem662@gmail.com>2024-08-17 16:57:18 +0200
committerbptato <nincsnevem662@gmail.com>2024-08-17 16:57:18 +0200
commit30920fe12cbc6ab72078a68e308931bf865ede26 (patch)
treebb93a23bae417bb6196a634dab238628bffadebd
parentf5f841dc7528098c2a07bd06280fa9d1c4ea3164 (diff)
downloadchawan-30920fe12cbc6ab72078a68e308931bf865ede26.tar.gz
loader: fix crash on empty data URLs
-rw-r--r--src/loader/loader.nim9
-rw-r--r--test/js/data_url.html1
2 files changed, 9 insertions, 1 deletions
diff --git a/src/loader/loader.nim b/src/loader/loader.nim
index c9025153..c40c3cad 100644
--- a/src/loader/loader.nim
+++ b/src/loader/loader.nim
@@ -414,10 +414,17 @@ proc loadDataSend(ctx: LoaderContext; handle: LoaderHandle; s, ct: string) =
   handle.sendResult(0)
   handle.sendStatus(200)
   handle.sendHeaders(newHeaders({"Content-Type": ct}))
+  let output = handle.output
+  if s.len == 0:
+    if output.suspended:
+      output.istreamAtEnd = true
+      ctx.outputMap[output.ostream.fd] = output
+    else:
+      output.oclose()
+    return
   let buffer = newLoaderBuffer(size = s.len)
   buffer.len = s.len
   copyMem(buffer.page, unsafeAddr s[0], s.len)
-  let output = handle.output
   case ctx.pushBuffer(output, buffer, 0)
   of pbrUnregister:
     if output.registered:
diff --git a/test/js/data_url.html b/test/js/data_url.html
index 5da3f920..292bc974 100644
--- a/test/js/data_url.html
+++ b/test/js/data_url.html
@@ -1,4 +1,5 @@
 <!DOCTYPE html>
 <div id=abc>Fail</div>
+<script src="data:text/plain,"></script>
 <script src="data:text/javascript,document.getElementById('abc').textContent='Success'">
 </script>