[
https://issues.apache.org/jira/browse/FTPSERVER-424?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15964460#comment-15964460
]
Harry Gu commented on FTPSERVER-424:
------------------------------------
I don't seem to have a direct way for contributing the fixed code, so I'm
describing the fix here. Could one of the committers take care of this please?
Class: org.apache.ftpserver.impl.PassivePorts
Change:
Line 218:
from:
freeList.remove(i);
to:
freeList.remove(ret);
Explanation:
When a passive port is already in use by another process (either used for other
purposes or still in the process of being closed), the code at line 223 will
remove the item from freeCopy list, and make freeCopy out of sync with
freeList. As a result, during the next round within the while loop, line 218
may remove the wrong port from freeList as the positions have been shifted. In
other words, a free port is removed from the pool and the used port still
remains. This can happen more and more on the server and eventually run out of
free ports in freeList.
The fix uses "ret" instead of "i", so the right port that's represented as an
Integer object is removed from freeList.
Please let me know if it's still unclear. It would be a great if the release
can be cut quickly. Thanks!
> Leak of allowed passive ports
> -----------------------------
>
> Key: FTPSERVER-424
> URL: https://issues.apache.org/jira/browse/FTPSERVER-424
> Project: FtpServer
> Issue Type: Bug
> Affects Versions: 1.0.6
> Reporter: Taras Puchko
> Attachments: ApacheJMeter_addons.jar,
> FTPS_All-in-One_1MB_200VU_upload.jmx, MINA_Config.zip, MINA_FTP_Error.txt,
> Snapshots.zip
>
>
> In several hours after start the server cannot accept passive connections if
> allowed passive ports are configured.
> This is caused by FTPSERVER-420,
> org.apache.ftpserver.impl.PassivePorts.reserveNextPort() lines 218-219,
> where the value removed from the freeList might be different from the value
> added to the usedList, if checkPortUnbound returns false before.
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)