Browse Source

Fix potential stack overflow usage in createFile and writeChunk API.

Ben Hsieh 8 years ago
parent
commit
386ac02c87
1 changed files with 7 additions and 4 deletions
  1. 7
    4
      src/ios/RNFetchBlob/RNFetchBlob.m

+ 7
- 4
src/ios/RNFetchBlob/RNFetchBlob.m View File

209
     
209
     
210
     NSFileManager * fm = [NSFileManager defaultManager];
210
     NSFileManager * fm = [NSFileManager defaultManager];
211
     NSMutableData * fileContent = [NSMutableData alloc];
211
     NSMutableData * fileContent = [NSMutableData alloc];
212
-    
213
-    char bytes[[dataArray count]];
212
+    // prevent stack overflow, alloc on heap
213
+    char * bytes = (char*) malloc([dataArray count]);
214
+//    char bytes[[dataArray count]];
214
     for(int i = 0; i < dataArray.count; i++) {
215
     for(int i = 0; i < dataArray.count; i++) {
215
         bytes[i] = [[dataArray objectAtIndex:i] charValue];
216
         bytes[i] = [[dataArray objectAtIndex:i] charValue];
216
     }
217
     }
217
     [fileContent appendBytes:bytes length:dataArray.count];
218
     [fileContent appendBytes:bytes length:dataArray.count];
218
     BOOL success = [fm createFileAtPath:path contents:fileContent attributes:NULL];
219
     BOOL success = [fm createFileAtPath:path contents:fileContent attributes:NULL];
219
-    
220
+    free(bytes);
220
     if(success == YES)
221
     if(success == YES)
221
         callback(@[[NSNull null]]);
222
         callback(@[[NSNull null]]);
222
     else
223
     else
259
 
260
 
260
 RCT_EXPORT_METHOD(writeArrayChunk:(NSString *)streamId withArray:(NSArray *)dataArray callback:(RCTResponseSenderBlock) callback) {
261
 RCT_EXPORT_METHOD(writeArrayChunk:(NSString *)streamId withArray:(NSArray *)dataArray callback:(RCTResponseSenderBlock) callback) {
261
     RNFetchBlobFS *fs = [[RNFetchBlobFS getFileStreams] valueForKey:streamId];
262
     RNFetchBlobFS *fs = [[RNFetchBlobFS getFileStreams] valueForKey:streamId];
262
-    char bytes[[dataArray count]];
263
+//    char bytes[[dataArray count]];
264
+    char * bytes = (char *) malloc([dataArray count]);
263
     for(int i = 0; i < dataArray.count; i++) {
265
     for(int i = 0; i < dataArray.count; i++) {
264
         bytes[i] = [[dataArray objectAtIndex:i] charValue];
266
         bytes[i] = [[dataArray objectAtIndex:i] charValue];
265
     }
267
     }
266
     NSMutableData * data = [NSMutableData alloc];
268
     NSMutableData * data = [NSMutableData alloc];
267
     [data appendBytes:bytes length:dataArray.count];
269
     [data appendBytes:bytes length:dataArray.count];
268
     [fs write:data];
270
     [fs write:data];
271
+    free(bytes);
269
     callback(@[[NSNull null]]);
272
     callback(@[[NSNull null]]);
270
 }
273
 }
271
 
274