summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorJack Tang <1190545+jackhftang@users.noreply.github.com>2019-11-22 22:37:59 +0800
committerMiran <narimiran@disroot.org>2019-11-22 15:37:59 +0100
commitf0c5d99924768175c332f412eb9c72ce5e28d0cb (patch)
tree836317cedbfada1d2b457f8c58350f100ea94ffc
parent5bb6c67a45045f41c39b11c085f5ff072e1615d7 (diff)
downloadNim-f0c5d99924768175c332f412eb9c72ce5e28d0cb.tar.gz
index out of bounds exception when data is empty (#12428)
-rw-r--r--lib/pure/asyncdispatch.nim20
1 files changed, 11 insertions, 9 deletions
diff --git a/lib/pure/asyncdispatch.nim b/lib/pure/asyncdispatch.nim
index a99a465f8..d7d829742 100644
--- a/lib/pure/asyncdispatch.nim
+++ b/lib/pure/asyncdispatch.nim
@@ -1838,15 +1838,17 @@ proc send*(socket: AsyncFD, data: string,
   ## Sends ``data`` to ``socket``. The returned future will complete once all
   ## data has been sent.
   var retFuture = newFuture[void]("send")
-
-  let sendFut = socket.send(unsafeAddr data[0], data.len, flags)
-  sendFut.callback =
-    proc () =
-      keepAlive(data)
-      if sendFut.failed:
-        retFuture.fail(sendFut.error)
-      else:
-        retFuture.complete()
+  if data.len > 0:
+    let sendFut = socket.send(unsafeAddr data[0], data.len, flags)
+    sendFut.callback =
+      proc () =
+        keepAlive(data)
+        if sendFut.failed:
+          retFuture.fail(sendFut.error)
+        else:
+          retFuture.complete()
+  else:
+    retFuture.complete()
 
   return retFuture