TeamAmaze / TeamAmaze/AmazeFileManager

FTP server crashes with `CoderMalfunctionError: IllegalArgumentException`.

Open
#4,398 3 comments 2 reactions 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

What The Problem Is
Exception
  • App Name: Amaze File Manager
  • Package: com.amaze.filemanager
  • Version: 3.10
  • User Action: UI Error
  • Request: Application crash
  • OS: Linux Android 14 - 34
  • Device: FP5
  • Model: FP5
  • Product: FP5
Crash log
java.nio.charset.CoderMalfunctionError: java.lang.IllegalArgumentException: newPosition > limit: (55 > 37)
	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.CWD.execute(CWD.java:79)
	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: newPosition > limit: (55 > 37)
	at java.nio.Buffer.createPositionException(Buffer.java:353)
	at java.nio.Buffer.position(Buffer.java:328)
	at java.nio.CharBuffer.position(CharBuffer.java:1651)
	at com.android.icu.charset.CharsetEncoderICU.setPosition(CharsetEncoderICU.java:251)
	at com.android.icu.charset.CharsetEncoderICU.encodeLoop(CharsetEncoderICU.java:189)
	at java.nio.charset.CharsetEncoder.encode(CharsetEncoder.java:622)
	... 50 more

How To Reproduce
  1. Accessed “FTP Server” (from the navigation pane).

  2. Disabled “Secure Connection” (because FTPS isn't RFC-standard). ^1

  3. Connected via dolphin-25.04.0-3.fc42.x86_64, augmented with kio-ftps-0.2-32.fc42.x86_64:

    Name            : kio-ftps
    Epoch           : 0
    Version         : 0.2
    Release         : 32.fc42
    Architecture    : x86_64
    Installed size  : 194.0 KiB
    Source          : kio-ftps-0.2-32.fc42.src.rpm
    From repository : <unknown>
    URL             : http://kasablanca.berlios.de/kio-ftps/
    Description     : An ftps KIO slave for KDE, based on rfc4217.
    Vendor          : Fedora Project
    

    I connected to it from both my client, and a VM running on that client.

Expected behavior

It shouldn't crash.

Screenshots

A Screenshot

My Environment
  1. The Hardware
    [ro.product.brand]: [Fairphone]
    [ro.build.product]: [FP5]
    
  2. The OS
    [ro.build.version.release]: [14]
    [ro.build.display.id]: [FP5.UT2M.B.113.20250319]
    
  3. Whether Rooted

    No.

  4. The Version Of The Application
    sourcePackage=com.amaze.filemanager
    versionName=3.10
    

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 FTP Server entry point and trace the reported CWD path through FtpIoSession.write and FtpResponseEncoder.encode. Reproduce the crash using the listed Android and Dolphin/kio-ftps setup, then verify that the FTP server no longer crashes during that operation.

Written by the indexing model from the issue text.

Assessment

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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.