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

chenshuming commented on VFS-396:
---------------------------------

I can't see this problem in my test. The RamFileSystem can detect the file's 
size become too large and throw Exception.

I notice this issue's description says :

```

there is a check
if (fs.size() + newSize - this.size() > maxSize)

....

For every resize check, fs.size() would be 0 

```

In current VFS project, the check is  "if (fs.size() + newSize - this.size() > 
maxSize)",

And I can see "fs.size()" is the file system current size instead of 0 . 

So I think this check work and maybe this issue should close.

> RAM FileSystem allows the file system size to exceed the max size limit.
> ------------------------------------------------------------------------
>
>                 Key: VFS-396
>                 URL: https://issues.apache.org/jira/browse/VFS-396
>             Project: Commons VFS
>          Issue Type: Bug
>    Affects Versions: 2.0
>         Environment: All
>            Reporter: Rupesh Kumar
>            Priority: Major
>   Original Estimate: 0.5h
>  Remaining Estimate: 0.5h
>
> When a new file is created in the RAM file system, and content is written to 
> its outputstream, there is a check in place for ensuring that file system 
> size does not exceed the max limit set. But that check is wrong.
> In RamFileOutputStream.write(), you calculate the size, newsize and call 
> file.resize(newSize)
> And in the RamFileObject.resize(), there is a check 
>  if (fs.size() + newSize - this.size() > maxSize)
>             {
>                 throw new IOException("FileSystem capacity (" + maxSize
>                         + ") exceeded.");
>             }
> This check is wrong. 
> Consider this case of a new file system where the file system size is set to 
> 5 MB and I am trying to create a file of 10 MB in the RAM file system. the 
> file is being written in the chunk of 8 kb. For every resize check, fs.size() 
> would be 0 and (newsize - this.size()) would be 8 kb and therefore the check 
> never passes.
>  It could have been correct if the "old size" was locked down to the size 
> that was registered with the file system but the old size (this.size()) keeps 
> changing at every write. Thus the difference in newSize and this.size() would 
> always be the chunk size (typically 8 kb) and therefore no exception would be 
> thrown ever.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to