@@ -147,15 +147,20 @@ NETWORK_RESULT network_receive_buffer(network_data *data, const char *endpoint,
147147 }
148148
149149 __block NSData *responseData = nil ;
150- __block NSError *responseError = nil ;
150+ __block NSString *responseError = nil ;
151151 __block NSInteger statusCode = 0 ;
152+ __block NSInteger errorCode = 0 ;
152153
153154 dispatch_semaphore_t sema = dispatch_semaphore_create (0 );
154155
155156 NSURLSession *session = [NSURLSession sharedSession ];
156157 NSURLSessionDataTask *task = [session dataTaskWithRequest: request completionHandler: ^(NSData *data, NSURLResponse *response, NSError *error) {
157- responseData = data;
158- responseError = error;
158+ // Retain data to not get it deallocated, release it before returning
159+ responseData = [data retain ];
160+ if (error) {
161+ responseError = [error localizedDescription ];
162+ errorCode = [error code ];
163+ }
159164 if ([response isKindOfClass: [NSHTTPURLResponse class ]]) {
160165 statusCode = [(NSHTTPURLResponse *)response statusCode ];
161166 }
@@ -168,7 +173,10 @@ NETWORK_RESULT network_receive_buffer(network_data *data, const char *endpoint,
168173 if (!responseError && (statusCode >= 200 && statusCode < 300 )) {
169174 size_t len = [responseData length ];
170175 // check if OK should be returned
171- if (len == 0 ) return (NETWORK_RESULT){CLOUDSYNC_NETWORK_OK, NULL , 0 , NULL , NULL };
176+ if (len == 0 ) {
177+ [responseData release ];
178+ return (NETWORK_RESULT){CLOUDSYNC_NETWORK_OK, NULL , 0 , NULL , NULL };
179+ }
172180
173181 // otherwise return a buffer
174182 NETWORK_RESULT result = {};
@@ -183,19 +191,21 @@ NETWORK_RESULT network_receive_buffer(network_data *data, const char *endpoint,
183191 }
184192 result.blen = len;
185193 result.xfree = network_buffer_cleanup;
194+
195+ [responseData release ];
186196 return result;
187197 }
188198
189199 // return error
190200 NETWORK_RESULT result = {};
191- NSString *msg;
201+ NSString *msg = nil ;
192202 if (responseError) {
193- msg = [ responseError localizedDescription ] ;
203+ msg = responseError;
194204 } else if (responseData && [responseData length ] > 0 ) {
195205 // Use the actual response body as the error message
196206 msg = [[NSString alloc ] initWithData: responseData encoding: NSUTF8StringEncoding];
197207 if (!msg) {
198- msg = [NSString stringWithCString: " Invalid error response encoding " encoding: NSUTF8StringEncoding ];
208+ msg = [NSString stringWithFormat: @" HTTP %ld error " , ( long )statusCode ];
199209 }
200210 } else {
201211 msg = [NSString stringWithFormat: @" HTTP %ld error" , (long )statusCode];
@@ -204,6 +214,8 @@ NETWORK_RESULT network_receive_buffer(network_data *data, const char *endpoint,
204214 result.buffer = (char *)msg.UTF8String ;
205215 result.xdata = (void *)CFBridgingRetain (msg);
206216 result.xfree = network_buffer_cleanup;
207- result.blen = (responseError) ? (size_t )responseError.code : (size_t )statusCode;
217+ result.blen = responseError ? (size_t )errorCode : (size_t )statusCode;
218+
219+ [responseData release ];
208220 return result;
209221}
0 commit comments