summary refs log tree commit diff stats
diff options
context:
space:
mode:
author握猫猫 <164346864@qq.com>2023-10-23 15:11:13 +0800
committerGitHub <noreply@github.com>2023-10-23 09:11:13 +0200
commit562a5fb8f9df8985be2543e5581252e449d6ae09 (patch)
tree662f0d7fd974f71bc2d08bc70697ed7f2a465440
parentca577dbab12cb7a9a73ca8d39ce03f568bade2bb (diff)
downloadNim-562a5fb8f9df8985be2543e5581252e449d6ae09.tar.gz
fix use after free (#22854)
1. `freeAddrInfo` is called prematurely, the variable `myAddr` is still
in use
2. Use defer syntax to ensure that `freeAddrInfo` is also called on
exceptions
-rw-r--r--lib/pure/nativesockets.nim4
1 files changed, 2 insertions, 2 deletions
diff --git a/lib/pure/nativesockets.nim b/lib/pure/nativesockets.nim
index e1784491b..593bd2d56 100644
--- a/lib/pure/nativesockets.nim
+++ b/lib/pure/nativesockets.nim
@@ -392,6 +392,8 @@ when not useNimNetLite:
       myAddr: pointer
       addrLen = 0
       family = 0
+    
+    defer: freeAddrInfo(addrInfo)
 
     if addrInfo.ai_addr.sa_family.cint == nativeAfInet:
       family = nativeAfInet
@@ -404,8 +406,6 @@ when not useNimNetLite:
     else:
       raise newException(IOError, "Unknown socket family in `getHostByAddr()`")
 
-    freeAddrInfo(addrInfo)
-
     when useWinVersion:
       var s = winlean.gethostbyaddr(cast[ptr InAddr](myAddr), addrLen.cuint,
                                     cint(family))