diff options
author | 握猫猫 <164346864@qq.com> | 2023-10-23 15:11:13 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-10-23 09:11:13 +0200 |
commit | 562a5fb8f9df8985be2543e5581252e449d6ae09 (patch) | |
tree | 662f0d7fd974f71bc2d08bc70697ed7f2a465440 | |
parent | ca577dbab12cb7a9a73ca8d39ce03f568bade2bb (diff) | |
download | Nim-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.nim | 4 |
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)) |