Эх сурвалжийг харах

Mkirk/handle sec err (#584)

* Remove unused code

In d3beb35574d72ca6fcb885ce87bc6e12ee95c84e creating the connection message was
extracted into the SRHTTPConnectMessageCreate function; However, generating the
secKey was pulled *outside* of that extracted method and passed in as a
parameter.  It looks like in the extraction process the now redundant
and unused key generation code was left in the extracted function.

* Consider random-data-generation as failing if data couldn't be allocated.

Also, per docs, compare to the more readable `errSecSuccess` constant rather
than 0.

* Handle failure in random generation

---------

Co-authored-by: Michael Kirk <michael.code@endoftheworl.de>
Michael Kirk 2 жил өмнө
parent
commit
57483d44a4

+ 0 - 6
SocketRocket/Internal/Utilities/SRHTTPConnectMessage.m

@@ -35,12 +35,6 @@ CFHTTPMessageRef SRHTTPConnectMessageCreate(NSURLRequest *request,
     // Set host first so it defaults
     CFHTTPMessageSetHeaderFieldValue(message, CFSTR("Host"), (__bridge CFStringRef)_SRHTTPConnectMessageHost(url));
 
-    NSMutableData *keyBytes = [[NSMutableData alloc] initWithLength:16];
-    int result = SecRandomCopyBytes(kSecRandomDefault, keyBytes.length, keyBytes.mutableBytes);
-    if (result != 0) {
-        //TODO: (nlutsenko) Check if there was an error.
-    }
-
     // Apply cookies if any have been provided
     if (cookies) {
         NSDictionary<NSString *, NSString *> *messageCookies = [NSHTTPCookie requestHeaderFieldsWithCookies:cookies];

+ 6 - 2
SocketRocket/Internal/Utilities/SRRandom.m

@@ -15,9 +15,13 @@ NS_ASSUME_NONNULL_BEGIN
 
 NSData *SRRandomData(NSUInteger length)
 {
-    NSMutableData *data = [NSMutableData dataWithLength:length];
+    NSMutableData *_Nullable data = [NSMutableData dataWithLength:length];
+    if (data == nil) {
+        [NSException raise:NSInternalInconsistencyException format:@"Failed to allocate random data"];
+    }
+    
     int result = SecRandomCopyBytes(kSecRandomDefault, data.length, data.mutableBytes);
-    if (result != 0) {
+    if (result != errSecSuccess) {
         [NSException raise:NSInternalInconsistencyException format:@"Failed to generate random bytes with OSStatus: %d", result];
     }
     return data;

+ 3 - 5
SocketRocket/SRWebSocket.m

@@ -1381,12 +1381,10 @@ static const size_t SRFrameHeaderOverhead = 32;
 
     const uint8_t *unmaskedPayloadBuffer = (uint8_t *)data.bytes;
     uint8_t *maskKey = frameBuffer + frameBufferSize;
-
+    
     size_t randomBytesSize = sizeof(uint32_t);
-    int result = SecRandomCopyBytes(kSecRandomDefault, randomBytesSize, maskKey);
-    if (result != 0) {
-        //TODO: (nlutsenko) Check if there was an error.
-    }
+    NSData *randomData = SRRandomData(randomBytesSize);
+    [randomData getBytes:maskKey range:NSMakeRange(0, randomBytesSize)];
     frameBufferSize += randomBytesSize;
 
     // Copy and unmask the buffer