[ 
https://issues.apache.org/jira/browse/CB-13245?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16377737#comment-16377737
 ] 

ASF GitHub Bot commented on CB-13245:
-------------------------------------

AnthonyWard commented on issue #217: CB-13245: (android) Fix bug caused by 
negative length reported for an asset
URL: 
https://github.com/apache/cordova-plugin-file/pull/217#issuecomment-368679789
 
 
   This tripped me up the past few days. I also set up an app to demo this bug:
   
   https://github.com/AnthonyWard/cordova-file-plugin-bug
   
   One line of code it seems can fix it more "upstream" than this, but I don't 
know if it's a good idea:
   
   `cordova-android` -> `CordovaResourceApi.java` -> `OpenForReadResult` there 
is one path (in the `catch`) that leaves the length as -1 causing the defect
   
   ```java
   case URI_TYPE_ASSET: {
                   String assetPath = uri.getPath().substring(15);
                   AssetFileDescriptor assetFd = null;
                   InputStream inputStream;
                   long length = -1;
                   try {
                       assetFd = assetManager.openFd(assetPath);
                       inputStream = assetFd.createInputStream();
                       length = assetFd.getLength();
                   } catch (FileNotFoundException e) {
                       // Will occur if the file is compressed.
                       inputStream = assetManager.open(assetPath);
                   }
                   String mimeType = getMimeTypeFromPath(assetPath);
                   return new OpenForReadResult(uri, inputStream, mimeType, 
length, assetFd);
               }
   ```
   
   Adding `length = inputStream.available();` in the catch fixes the issue for 
me, but I'm not a java developer so can't evaluate if that's a bad idea for 
another reason.

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


> Filereader.readAsText fails on Android with long text files when
> ----------------------------------------------------------------
>
>                 Key: CB-13245
>                 URL: https://issues.apache.org/jira/browse/CB-13245
>             Project: Apache Cordova
>          Issue Type: Bug
>          Components: cordova-plugin-file
>    Affects Versions: Master
>         Environment: Android 7.1.1
>            Reporter: Daniel Behnen
>            Priority: Major
>
> When reader.readAsText is called with an URI pointing to a local asset with a 
> size greater than READ_CHUNK_SIZE = 256 * 1024, loading produces corrupt 
> data. 
> The behaviour is caused by a negative length returned by 
> CordovaResourceApi.openForRead() when the URI is a URI_TYPE_ASSET. Given the 
> negative length, Filesystem.readFileAtURL() returns the whole file instead of 
> the desired part and FileReader.readSuccessCallback() does not check the 
> returned buffer size. Hence, the following chunks are attated to the buffer 
> regardless of whether the file was already completely read.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to