TeamAmaze / TeamAmaze/AmazeFileManager

FTPS server crashing intermittently with IllegalArgumentException

Open
#4,399 1 comment 1 reaction 0 assignees View on GitHub

Nobody has claimed this yet.

Area-FTP Issue-Bug
Dominant language
Kotlin
Stars
6.4k
Forks
1.7k
Avg merge
3d 9h
Merged PRs (30d)
1

Description

Issue explanation (write below this line)

Intermittently reproducible FTP server crashing.

Exception

  • App Name: Amaze File Manager
  • Package: com.amaze.filemanager
  • Version: 3.10
  • User Action: UI Error
  • Request: Application crash
  • OS: Linux Nokia/ScarletWitch_00EEA/SCW_sprout:13/TKQ1.220807.001/00WW_3_400:user/release-keys 13 - 33
  • Device: SCW_sprout
  • Model: Nokia X10
  • Product: ScarletWitch_00EEA
Crash log

java.nio.charset.CoderMalfunctionError: java.lang.IllegalArgumentException: uSource failed: U_ILLEGAL_ARGUMENT_ERROR
	at java.nio.charset.CharsetEncoder.encode(CharsetEncoder.java:624)
	at org.apache.mina.core.buffer.AbstractIoBuffer.putString(AbstractIoBuffer.java:1811)
	at org.apache.ftpserver.listener.nio.FtpResponseEncoder.encode(FtpResponseEncoder.java:49)
	at org.apache.mina.filter.codec.ProtocolCodecFilter.filterWrite(ProtocolCodecFilter.java:299)
	at org.apache.mina.core.filterchain.DefaultIoFilterChain.callPreviousFilterWrite(DefaultIoFilterChain.java:629)
	at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1500(DefaultIoFilterChain.java:48)
	at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.filterWrite(DefaultIoFilterChain.java:957)
	at org.apache.mina.core.filterchain.IoFilterEvent.fire(IoFilterEvent.java:84)
	at org.apache.mina.filter.logging.MdcInjectionFilter.filter(MdcInjectionFilter.java:135)
	at org.apache.mina.filter.util.CommonEventFilter.filterWrite(CommonEventFilter.java:80)
	at org.apache.mina.core.filterchain.DefaultIoFilterChain.callPreviousFilterWrite(DefaultIoFilterChain.java:629)
	at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1500(DefaultIoFilterChain.java:48)
	at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.filterWrite(DefaultIoFilterChain.java:957)
	at org.apache.mina.core.filterchain.IoFilterAdapter.filterWrite(IoFilterAdapter.java:123)
	at org.apache.mina.core.filterchain.DefaultIoFilterChain.callPreviousFilterWrite(DefaultIoFilterChain.java:629)
	at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1500(DefaultIoFilterChain.java:48)
	at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.filterWrite(DefaultIoFilterChain.java:957)
	at org.apache.mina.core.filterchain.DefaultIoFilterChain$TailFilter.filterWrite(DefaultIoFilterChain.java:881)
	at org.apache.mina.core.filterchain.DefaultIoFilterChain.callPreviousFilterWrite(DefaultIoFilterChain.java:629)
	at org.apache.mina.core.filterchain.DefaultIoFilterChain.fireFilterWrite(DefaultIoFilterChain.java:622)
	at org.apache.mina.core.session.AbstractIoSession.write(AbstractIoSession.java:574)
	at org.apache.mina.core.session.AbstractIoSession.write(AbstractIoSession.java:519)
	at org.apache.ftpserver.impl.FtpIoSession.write(FtpIoSession.java:530)
	at org.apache.ftpserver.command.impl.PBSZ.execute(PBSZ.java:49)
	at org.apache.ftpserver.impl.DefaultFtpHandler.messageReceived(DefaultFtpHandler.java:211)
	at org.apache.ftpserver.listener.nio.FtpHandlerAdapter.messageReceived(FtpHandlerAdapter.java:62)
	at org.apache.mina.core.filterchain.DefaultIoFilterChain$TailFilter.messageReceived(DefaultIoFilterChain.java:858)
	at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:542)
	at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1300(DefaultIoFilterChain.java:48)
	at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:947)
	at org.apache.ftpserver.listener.nio.FtpLoggingFilter.messageReceived(FtpLoggingFilter.java:85)
	at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:542)
	at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1300(DefaultIoFilterChain.java:48)
	at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:947)
	at org.apache.mina.core.filterchain.IoFilterEvent.fire(IoFilterEvent.java:74)
	at org.apache.mina.filter.logging.MdcInjectionFilter.filter(MdcInjectionFilter.java:135)
	at org.apache.mina.filter.util.CommonEventFilter.messageReceived(CommonEventFilter.java:70)
	at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:542)
	at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1300(DefaultIoFilterChain.java:48)
	at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:947)
	at org.apache.mina.filter.codec.ProtocolCodecFilter$ProtocolDecoderOutputImpl.flush(ProtocolCodecFilter.java:398)
	at org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:234)
	at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:542)
	at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1300(DefaultIoFilterChain.java:48)
	at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:947)
	at org.apache.mina.core.filterchain.IoFilterEvent.fire(IoFilterEvent.java:74)
	at org.apache.mina.core.session.IoEvent.run(IoEvent.java:63)
	at org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.runTask(OrderedThreadPoolExecutor.java:770)
	at org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.runTasks(OrderedThreadPoolExecutor.java:762)
	at org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.run(OrderedThreadPoolExecutor.java:704)
	at java.lang.Thread.run(Thread.java:1012)
Caused by: java.lang.IllegalArgumentException: uSource failed: U_ILLEGAL_ARGUMENT_ERROR
	at com.android.icu.charset.NativeConverter.encode(Native Method)
	at com.android.icu.charset.CharsetEncoderICU.encodeLoop(CharsetEncoderICU.java:174)
	at java.nio.charset.CharsetEncoder.encode(CharsetEncoder.java:622)
	... 50 more


To Reproduce
Steps to reproduce the behavior:

  1. Open the FTP tab
  2. Enable Secure Connection
  3. Open FileZilla on Linux or Windows
  4. Quick connect to ftps://[ip] port [port number]
  5. Drag and drop a selection of files to or from the Android device
  6. Sometimes it'll crash

Expected behavior
Files to transfer without crashing or corruption.

Smartphone (please complete the following information):

  • Device: Nokia X10
  • OS: Android 13
  • Rooted: No
  • Version: 3.10

Additional context
Crashing is intermittent and typically happening when transferring multiple files together. OS doesn't appear to matter, as it happens on a Linux or Windows client.

Last entries of FileZilla:

15:12:19	Status:	Connecting to [ip]:[port number]...
15:12:19	Status:	Connection established, initializing TLS...
15:12:20	Status:	TLS connection established, waiting for welcome message...
15:12:20	Status:	Logged in
15:12:20	Status:	Retrieving directory listing...
15:12:21	Status:	Directory listing of "/" successful
15:12:24	Status:	Retrieving directory listing of "/DCIM"...
15:12:24	Status:	Directory listing of "/DCIM" successful
15:12:25	Status:	Retrieving directory listing of "/"...
15:12:25	Status:	Directory listing of "/" successful
15:12:27	Status:	Retrieving directory listing of "/Pictures"...
15:12:27	Status:	Directory listing of "/Pictures" successful
15:12:33	Status:	Retrieving directory listing of "/Pictures/Screenshots"...
15:12:33	Status:	Directory listing of "/Pictures/Screenshots" successful
15:12:41	Status:	Connecting to [ip]:[port number]...
15:12:41	Status:	Connecting to [ip]:[port number]...
15:12:41	Status:	Connection established, initializing TLS...
15:12:41	Status:	Connection established, initializing TLS...
15:12:41	Status:	TLS connection established, waiting for welcome message...
15:12:41	Status:	TLS connection established, waiting for welcome message...
15:12:41	Status:	Logged in
15:12:41	Status:	Starting download of /Pictures/Screenshots/Screenshot_20250512-151146.png
15:12:41	Status:	File transfer successful, transferred 36.62 KiB in 1 second
15:12:41	Error:	GnuTLS error -110 in gnutls_record_recv: The TLS connection was non-properly terminated.
15:12:41	Status:	Server did not properly shut down TLS connection
15:12:41	Error:	Could not read from socket: ECONNABORTED - Connection aborted
15:12:41	Error:	Disconnected from server
15:12:41	Error:	GnuTLS error -110 in gnutls_record_recv: The TLS connection was non-properly terminated.
15:12:41	Status:	Server did not properly shut down TLS connection
15:12:41	Error:	Could not read from socket: ECONNABORTED - Connection aborted
15:12:41	Error:	Disconnected from server
15:12:41	Response:	220 Service ready for new user.
15:12:41	Command:	USER anonymous
15:12:41	Response:	331 Guest login okay, send your complete e-mail address as password.
15:12:41	Command:	PASS *********************
15:12:41	Response:	230 User logged in, proceed.
15:12:41	Command:	OPTS UTF8 ON
15:12:41	Response:	200 Command OPTS okay.
15:12:41	Command:	PBSZ 0
15:12:41	Error:	GnuTLS error -110 in gnutls_record_recv: The TLS connection was non-properly terminated.
15:12:41	Status:	Server did not properly shut down TLS connection
15:12:41	Error:	Could not read from socket: ECONNABORTED - Connection aborted
15:12:41	Error:	Could not connect to server

Possible duplicate of #4398, but with FTPS and FileZilla as client.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the reported stack frames in org.apache.ftpserver.listener.nio.FtpResponseEncoder.java and org.apache.ftpserver.command.impl.PBSZ.java, then review the FTPS reproduction using FileZilla and multiple-file transfers. Use the crash log and connection behavior to guide investigation; done means repeated FTPS transfers no longer crash or corrupt files.

Written by the indexing model from the issue text.

Assessment

Tech stack
android, java
Domain
mobile-dev, networking
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.