Browse Source

Fix potential crash by safely unwrapping baseAddress before using mlock/munlock

Added guard statement to ensure baseAddress is non-nil before calling memory
locking functions to avoid undefined behavior or crashes when pointer is nil.
Marcin Krzyzanowski 6 days ago
parent
commit
a41ae3ba4f
1 changed files with 8 additions and 6 deletions
  1. 8 6
      Sources/CryptoSwift/SecureBytes.swift

+ 8 - 6
Sources/CryptoSwift/SecureBytes.swift

@@ -37,28 +37,30 @@ final class SecureBytes {
     self.bytes = bytes
     self.count = bytes.count
     self.bytes.withUnsafeBufferPointer { (pointer) -> Void in
+      guard let baseAddress = pointer.baseAddress else { return }
       #if os(Windows)
-        VirtualLock(UnsafeMutableRawPointer(mutating: pointer.baseAddress), SIZE_T(pointer.count))
+        VirtualLock(UnsafeMutableRawPointer(mutating: baseAddress), SIZE_T(pointer.count))
       #elseif os(WASI)
         // not supported on WASI
       #elseif os(Android)
-        mlock(pointer.baseAddress!, pointer.count)
+        mlock(baseAddress, pointer.count)
       #else
-        mlock(pointer.baseAddress, pointer.count)
+        mlock(baseAddress, pointer.count)
       #endif
     }
   }
 
   deinit {
     self.bytes.withUnsafeBufferPointer { (pointer) -> Void in
+      guard let baseAddress = pointer.baseAddress else { return }
       #if os(Windows)
-        VirtualUnlock(UnsafeMutableRawPointer(mutating: pointer.baseAddress), SIZE_T(pointer.count))
+        VirtualUnlock(UnsafeMutableRawPointer(mutating: baseAddress), SIZE_T(pointer.count))
       #elseif os(WASI)
         // not supported on WASI
       #elseif os(Android)
-        munlock(pointer.baseAddress!, pointer.count)
+        munlock(baseAddress, pointer.count)
       #else
-        munlock(pointer.baseAddress, pointer.count)
+        munlock(baseAddress, pointer.count)
       #endif
     }
   }