Browse Source

Merge pull request #353 from thinkproductivity/mjmasn-patch-1

(Android) Fix UTF-8 related crashes
Travis Nuttall 5 years ago
parent
commit
6bbebd3429
No account linked to committer's email address

+ 0
- 4
android/src/main/java/com/RNFetchBlob/RNFetchBlobFS.java View File

21
 import com.facebook.react.modules.core.DeviceEventManagerModule;
21
 import com.facebook.react.modules.core.DeviceEventManagerModule;
22
 
22
 
23
 import java.io.*;
23
 import java.io.*;
24
-import java.nio.ByteBuffer;
25
 import java.nio.charset.Charset;
24
 import java.nio.charset.Charset;
26
-import java.nio.charset.CharsetEncoder;
27
 import java.security.MessageDigest;
25
 import java.security.MessageDigest;
28
 import java.util.ArrayList;
26
 import java.util.ArrayList;
29
 import java.util.HashMap;
27
 import java.util.HashMap;
341
             boolean error = false;
339
             boolean error = false;
342
 
340
 
343
             if (encoding.equalsIgnoreCase("utf8")) {
341
             if (encoding.equalsIgnoreCase("utf8")) {
344
-                CharsetEncoder encoder = Charset.forName("UTF-8").newEncoder();
345
                 while ((cursor = fs.read(buffer)) != -1) {
342
                 while ((cursor = fs.read(buffer)) != -1) {
346
-                    encoder.encode(ByteBuffer.wrap(buffer).asCharBuffer());
347
                     String chunk = new String(buffer, 0, cursor);
343
                     String chunk = new String(buffer, 0, cursor);
348
                     emitStreamEvent(streamId, "data", chunk);
344
                     emitStreamEvent(streamId, "data", chunk);
349
                     if(tick > 0)
345
                     if(tick > 0)

+ 2
- 22
android/src/main/java/com/RNFetchBlob/RNFetchBlobReq.java View File

36
 import java.net.SocketException;
36
 import java.net.SocketException;
37
 import java.net.SocketTimeoutException;
37
 import java.net.SocketTimeoutException;
38
 import java.net.URL;
38
 import java.net.URL;
39
-import java.nio.ByteBuffer;
40
-import java.nio.charset.CharacterCodingException;
41
-import java.nio.charset.Charset;
42
-import java.nio.charset.CharsetEncoder;
43
 import java.security.KeyStore;
39
 import java.security.KeyStore;
44
 import java.util.ArrayList;
40
 import java.util.ArrayList;
45
 import java.util.Arrays;
41
 import java.util.Arrays;
502
                         // encoding will somehow break the UTF8 string format, to encode UTF8
498
                         // encoding will somehow break the UTF8 string format, to encode UTF8
503
                         // string correctly, we should do URL encoding before BASE64.
499
                         // string correctly, we should do URL encoding before BASE64.
504
                         byte[] b = resp.body().bytes();
500
                         byte[] b = resp.body().bytes();
505
-                        CharsetEncoder encoder = Charset.forName("UTF-8").newEncoder();
506
                         if(responseFormat == ResponseFormat.BASE64) {
501
                         if(responseFormat == ResponseFormat.BASE64) {
507
                             callback.invoke(null, RNFetchBlobConst.RNFB_RESPONSE_BASE64, android.util.Base64.encodeToString(b, Base64.NO_WRAP));
502
                             callback.invoke(null, RNFetchBlobConst.RNFB_RESPONSE_BASE64, android.util.Base64.encodeToString(b, Base64.NO_WRAP));
508
                             return;
503
                             return;
509
                         }
504
                         }
510
-                        try {
511
-                            encoder.encode(ByteBuffer.wrap(b).asCharBuffer());
512
-                            // if the data contains invalid characters the following lines will be
513
-                            // skipped.
514
-                            String utf8 = new String(b);
515
-                            callback.invoke(null, RNFetchBlobConst.RNFB_RESPONSE_UTF8, utf8);
516
-                        }
517
-                        // This usually mean the data is contains invalid unicode characters, it's
518
-                        // binary data
519
-                        catch(CharacterCodingException ignored) {
520
-                            if(responseFormat == ResponseFormat.UTF8) {
521
-                                callback.invoke(null, RNFetchBlobConst.RNFB_RESPONSE_UTF8, "");
522
-                            }
523
-                            else {
524
-                                callback.invoke(null, RNFetchBlobConst.RNFB_RESPONSE_BASE64, android.util.Base64.encodeToString(b, Base64.NO_WRAP));
525
-                            }
526
-                        }
505
+                        String utf8 = new String(b);
506
+                        callback.invoke(null, RNFetchBlobConst.RNFB_RESPONSE_UTF8, utf8);
527
                     }
507
                     }
528
                 } catch (IOException e) {
508
                 } catch (IOException e) {
529
                     callback.invoke("RNFetchBlob failed to encode response data to BASE64 string.", null);
509
                     callback.invoke("RNFetchBlob failed to encode response data to BASE64 string.", null);