Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Uploading file with non ascii character cause parsing error #596

Closed
kobe2000 opened this issue Sep 21, 2018 · 10 comments
Closed

Uploading file with non ascii character cause parsing error #596

kobe2000 opened this issue Sep 21, 2018 · 10 comments
Assignees

Comments

@kobe2000
Copy link

Hi, I use one file with Chinese file name to upload to ktor, the server report:

io.ktor.http.cio.ParserException: No HTTP header value provided for name 中文.png

@e5l
Copy link
Member

e5l commented Sep 21, 2018

Hi, @kobe2000. Thanks for the report.
Could you provide ktor version and the stack trace?

@kobe2000
Copy link
Author

I tested with ktor 0.94, 0.95, both errors:
Here's stack trace:

io.ktor.http.cio.ParserException: No HTTP header value provided for name 微信图片_20180921172154.png": 
微信图片_20180921172154.png"
	at io.ktor.http.cio.HttpParserKt.parseHeaders(HttpParser.kt:86)
	at io.ktor.http.cio.MultipartKt.parsePartHeaders(Multipart.kt:65)
	at io.ktor.http.cio.MultipartKt$parseMultipart$1.doResume(Multipart.kt:175)
	at kotlin.coroutines.experimental.jvm.internal.CoroutineImpl.resume(CoroutineImpl.kt:42)
	at kotlinx.coroutines.experimental.ResumeModeKt.resumeMode(ResumeMode.kt:67)
	at kotlinx.coroutines.experimental.DispatchedKt.dispatch(Dispatched.kt:181)
	at kotlinx.coroutines.experimental.AbstractContinuation.dispatchResume(AbstractContinuation.kt:194)
	at kotlinx.coroutines.experimental.AbstractContinuation.completeStateUpdate(AbstractContinuation.kt:346)
	at kotlinx.coroutines.experimental.CancellableContinuationImpl.completeResume(CancellableContinuation.kt:309)
	at kotlinx.coroutines.experimental.channels.SendElement.completeResumeSend(AbstractChannel.kt:1054)
	at kotlinx.coroutines.experimental.channels.AbstractChannel.pollInternal(AbstractChannel.kt:530)
	at kotlinx.coroutines.experimental.channels.AbstractChannel.receiveOrNull(AbstractChannel.kt:611)
	at kotlinx.coroutines.experimental.channels.ChannelCoroutine.receiveOrNull$suspendImpl(ChannelCoroutine.kt)
	at kotlinx.coroutines.experimental.channels.ChannelCoroutine.receiveOrNull(ChannelCoroutine.kt)
	at io.ktor.http.cio.CIOMultipartDataBase.readPart(CIOMultipartData.kt:28)
	at io.ktor.http.content.MultipartKt.forEachPart(Multipart.kt:62)
	at MainKt.extract(main.kt:1001)
	at MainKt$main$1$server$1$3$4.doResume(main.kt:217)
	at MainKt$main$1$server$1$3$4.invoke(main.kt)
	at MainKt$main$1$server$1$3$4.invoke(main.kt)
	at io.ktor.util.pipeline.PipelineContext.proceed(PipelineContext.kt:49)
	at io.ktor.util.pipeline.Pipeline.execute(Pipeline.kt:23)
	at io.ktor.routing.Routing.executeResult(Routing.kt:100)
	at io.ktor.routing.Routing.interceptor(Routing.kt:25)
	at io.ktor.routing.Routing$Feature$install$1.doResume(Routing.kt:66)
	at io.ktor.routing.Routing$Feature$install$1.invoke(Routing.kt)
	at io.ktor.routing.Routing$Feature$install$1.invoke(Routing.kt:51)
	at io.ktor.util.pipeline.PipelineContext.proceed(PipelineContext.kt:49)
	at io.ktor.features.ContentNegotiation$Feature$install$1.doResume(ContentNegotiation.kt:60)
	at io.ktor.features.ContentNegotiation$Feature$install$1.invoke(ContentNegotiation.kt)
	at io.ktor.features.ContentNegotiation$Feature$install$1.invoke(ContentNegotiation.kt:50)
	at io.ktor.util.pipeline.PipelineContext.proceed(PipelineContext.kt:49)
	at io.ktor.util.pipeline.Pipeline.execute(Pipeline.kt:23)
	at io.ktor.server.engine.DefaultEnginePipelineKt$defaultEnginePipeline$2.doResume(DefaultEnginePipeline.kt:64)
	at io.ktor.server.engine.DefaultEnginePipelineKt$defaultEnginePipeline$2.invoke(DefaultEnginePipeline.kt)
	at io.ktor.server.engine.DefaultEnginePipelineKt$defaultEnginePipeline$2.invoke(DefaultEnginePipeline.kt)
	at io.ktor.util.pipeline.PipelineContext.proceed(PipelineContext.kt:49)
	at io.ktor.util.pipeline.Pipeline.execute(Pipeline.kt:23)
	at io.ktor.server.netty.NettyApplicationCallHandler$handleRequest$1.doResume(NettyApplicationCallHandler.kt:31)
	at io.ktor.server.netty.NettyApplicationCallHandler$handleRequest$1.invoke(NettyApplicationCallHandler.kt)
	at io.ktor.server.netty.NettyApplicationCallHandler$handleRequest$1.invoke(NettyApplicationCallHandler.kt:10)
	at kotlinx.coroutines.experimental.intrinsics.UndispatchedKt.startCoroutineUndispatched(Undispatched.kt:54)
	at kotlinx.coroutines.experimental.CoroutineStart.invoke(CoroutineStart.kt:101)
	at kotlinx.coroutines.experimental.AbstractCoroutine.start(AbstractCoroutine.kt:153)
	at kotlinx.coroutines.experimental.BuildersKt__Builders_commonKt.launch(Builders.common.kt:60)
	at kotlinx.coroutines.experimental.BuildersKt.launch(Unknown Source)
	at kotlinx.coroutines.experimental.BuildersKt__Builders_commonKt.launch$default(Builders.common.kt:52)
	at kotlinx.coroutines.experimental.BuildersKt.launch$default(Unknown Source)
	at io.ktor.server.netty.NettyApplicationCallHandler.handleRequest(NettyApplicationCallHandler.kt:22)
	at io.ktor.server.netty.NettyApplicationCallHandler.channelRead(NettyApplicationCallHandler.kt:16)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
	at io.netty.channel.AbstractChannelHandlerContext.access$600(AbstractChannelHandlerContext.java:38)
	at io.netty.channel.AbstractChannelHandlerContext$7.run(AbstractChannelHandlerContext.java:353)
	at io.netty.util.concurrent.AbstractEventExecutor.safeExecute$$$capture(AbstractEventExecutor.java:163)
	at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java)
	at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:404)
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:463)
	at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884)
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
	at java.lang.Thread.run(Thread.java:748)

@cy6erGn0m
Copy link
Contributor

What is your client? Is it browser?

@cy6erGn0m cy6erGn0m self-assigned this Sep 21, 2018
@kobe2000
Copy link
Author

yes, it is firefox

@tysheng
Copy link

tysheng commented Sep 24, 2018

same issue with me, I used postman to upload a image whose name contains Chinese character. But when I renamed same image to an english name, it worked.

@e5l
Copy link
Member

e5l commented Sep 24, 2018

Could you provide the name sample? It looks like an issue with charset decoder.

@tysheng
Copy link

tysheng commented Sep 24, 2018

@e5l sure, old: rsz_壁纸.jpg new: wallpaper.jpg
erros is

io.ktor.http.cio.ParserException: No HTTP header value provided for name 壁纸.jpg": 
壁纸.jpg"

seems swallow my prefix string

@kolyvan
Copy link

kolyvan commented Sep 30, 2018

Encountered similar issues with Cyrillic filenames.
There are two errors: kotlinx.io.charsets.MalformedInputException and io.ktor.http.cio.ParserException

Ktor version: 0.9.5
Browser: Chrome

Filename Толстой - Анна Каренина.fbz
Error kotlinx.io.charsets.MalformedInputException: Input length = 1

Stacktrace

	at kotlinx.io.charsets.CharsetJVMKt.throwExceptionWrapped(CharsetJVM.kt:289)
	at kotlinx.io.charsets.CharsetJVMKt.decodeImplSlow(CharsetJVM.kt:255)
	at kotlinx.io.charsets.CharsetJVMKt.decodeExactBytes(CharsetJVM.kt:217)
	at kotlinx.io.core.StringsKt.readTextExactBytes(Strings.kt:334)
	at kotlinx.io.core.StringsKt.readTextExactBytes$default(Strings.kt:333)
	at kotlinx.io.core.ByteReadPacketBase.readText(Packet.kt:459)
	at kotlinx.io.core.ByteReadPacketBase.readText$default(Packet.kt:457)
	at io.ktor.http.cio.CIOMultipartDataBase.partToData(CIOMultipartData.kt:99)
	at io.ktor.http.cio.CIOMultipartDataBase$partToData$1.doResume(CIOMultipartData.kt)
	at kotlin.coroutines.experimental.jvm.internal.CoroutineImpl.resume(CoroutineImpl.kt:42)
	at kotlin.coroutines.experimental.jvm.internal.CoroutineImpl.resume(CoroutineImpl.kt:41)
	at kotlinx.coroutines.experimental.DispatchedTask$DefaultImpls.run(Dispatched.kt:149)
	at kotlinx.coroutines.experimental.io.internal.MutableDelegateContinuation.run(MutableDelegateContinuation.kt:14)
	at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163)
	at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:404)
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:463)
	at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884)
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
	at java.base/java.lang.Thread.run(Thread.java:844)

FIlename: Adams_Автостопом_по_Галактике.fbz
Error io.ktor.http.cio.ParserException: No HTTP header value provided for name Автостопом_по_Галактике.fbz"

Stacktrace

at io.ktor.http.cio.HttpParserKt.parseHeaders(HttpParser.kt:86)
	at io.ktor.http.cio.MultipartKt.parsePartHeaders(Multipart.kt:65)
	at io.ktor.http.cio.MultipartKt$parseMultipart$1.doResume(Multipart.kt:175)
	at kotlin.coroutines.experimental.jvm.internal.CoroutineImpl.resume(CoroutineImpl.kt:42)
	at kotlinx.coroutines.experimental.ResumeModeKt.resumeMode(ResumeMode.kt:67)
	at kotlinx.coroutines.experimental.DispatchedKt.dispatch(Dispatched.kt:181)
	at kotlinx.coroutines.experimental.AbstractContinuation.dispatchResume(AbstractContinuation.kt:194)
	at kotlinx.coroutines.experimental.AbstractContinuation.completeStateUpdate(AbstractContinuation.kt:346)
	at kotlinx.coroutines.experimental.CancellableContinuationImpl.completeResume(CancellableContinuation.kt:309)
	at kotlinx.coroutines.experimental.channels.SendElement.completeResumeSend(AbstractChannel.kt:1054)
	at kotlinx.coroutines.experimental.channels.AbstractChannel.pollInternal(AbstractChannel.kt:530)
	at kotlinx.coroutines.experimental.channels.AbstractChannel.receiveOrNull(AbstractChannel.kt:611)
	at kotlinx.coroutines.experimental.channels.ChannelCoroutine.receiveOrNull$suspendImpl(ChannelCoroutine.kt)
	at kotlinx.coroutines.experimental.channels.ChannelCoroutine.receiveOrNull(ChannelCoroutine.kt)
	at io.ktor.http.cio.CIOMultipartDataBase.readPart(CIOMultipartData.kt:28)
	at io.ktor.http.content.MultipartKt.forEachPart(Multipart.kt:62)

@apprme
Copy link

apprme commented Nov 22, 2018

We have the same issue with 1.0.0:

io.ktor.http.cio.ParserException: No HTTP header value provided for name Гаечный_Ключ.png":
Гаечный_Ключ.png"
        at io.ktor.http.cio.HttpParserKt.parseHeaders(HttpParser.kt:98) ~[ktor-http-cio-1.0.0.jar:1.0.0]
        at io.ktor.http.cio.MultipartKt.parsePartHeaders(Multipart.kt:114) ~[ktor-http-cio-1.0.0.jar:1.0.0]
        at io.ktor.http.cio.MultipartKt$parseMultipart$1.invokeSuspend(Multipart.kt:293) ~[ktor-http-cio-1.0.0.jar:1.0.0]
        at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:32) ~[kotlin-stdlib-1.3.10.jar:1.3.10-release-253 (1.3.10)]
        at kotlinx.coroutines.ResumeModeKt.resumeMode(ResumeMode.kt:67) ~[kotlinx-coroutines-core-1.0.1.jar:?]
        at kotlinx.coroutines.DispatchedKt.resume(Dispatched.kt:275) ~[kotlinx-coroutines-core-1.0.1.jar:?]
        at kotlinx.coroutines.UndispatchedEventLoop.resumeUndispatched(Dispatched.kt:56) ~[kotlinx-coroutines-core-1.0.1.jar:?]
        at kotlinx.coroutines.DispatchedKt.dispatch(Dispatched.kt:261) ~[kotlinx-coroutines-core-1.0.1.jar:?]
        at kotlinx.coroutines.AbstractContinuation.dispatchResume(AbstractContinuation.kt:182) ~[kotlinx-coroutines-core-1.0.1.jar:?]
        at kotlinx.coroutines.AbstractContinuation.completeStateUpdate(AbstractContinuation.kt:250) ~[kotlinx-coroutines-core-1.0.1.jar:?]
        at kotlinx.coroutines.CancellableContinuationImpl.completeResume(CancellableContinuation.kt:260) ~[kotlinx-coroutines-core-1.0.1.jar:?]
        at kotlinx.coroutines.channels.SendElement.completeResumeSend(AbstractChannel.kt:1058) ~[kotlinx-coroutines-core-1.0.1.jar:?]
        at kotlinx.coroutines.channels.AbstractChannel.pollInternal(AbstractChannel.kt:533) ~[kotlinx-coroutines-core-1.0.1.jar:?]
        at kotlinx.coroutines.channels.AbstractChannel.poll(AbstractChannel.kt:656) ~[kotlinx-coroutines-core-1.0.1.jar:?]
        at kotlinx.coroutines.channels.ChannelCoroutine.poll(ChannelCoroutine.kt) ~[kotlinx-coroutines-core-1.0.1.jar:?]
        at io.ktor.http.cio.CIOMultipartDataBase.readPart(CIOMultipartData.kt:38) ~[ktor-http-cio-1.0.0.jar:1.0.0]
        at io.ktor.http.content.MultipartKt.forEachPart(Multipart.kt:102) ~[ktor-http-jvm-1.0.0.jar:1.0.0]
        at delightex.server.stateless.routes.FileKt$file$1.invokeSuspend(File.kt:38) ~[stateless-server-1.0-SNAPSHOT.jar:?]
        at delightex.server.stateless.routes.FileKt$file$1.invoke(File.kt) ~[stateless-server-1.0-SNAPSHOT.jar:?]
        at io.ktor.util.pipeline.SuspendFunctionGun.loop(PipelineContext.kt:248) [ktor-utils-jvm-1.0.0.jar:1.0.0]
        at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(PipelineContext.kt:63) [ktor-utils-jvm-1.0.0.jar:1.0.0]
        at io.ktor.util.pipeline.SuspendFunctionGun.proceed(PipelineContext.kt:111) [ktor-utils-jvm-1.0.0.jar:1.0.0]
        at io.ktor.util.pipeline.SuspendFunctionGun.execute(PipelineContext.kt:131) [ktor-utils-jvm-1.0.0.jar:1.0.0]
        at io.ktor.util.pipeline.Pipeline.execute(Pipeline.kt:24) [ktor-utils-jvm-1.0.0.jar:1.0.0]
        at io.ktor.routing.Routing.executeResult(Routing.kt:148) [ktor-server-core-1.0.0.jar:1.0.0]
        at io.ktor.routing.Routing.interceptor(Routing.kt:29) [ktor-server-core-1.0.0.jar:1.0.0]
        at io.ktor.routing.Routing$Feature$install$1.invokeSuspend(Routing.kt:93) [ktor-server-core-1.0.0.jar:1.0.0]
        at io.ktor.routing.Routing$Feature$install$1.invoke(Routing.kt) [ktor-server-core-1.0.0.jar:1.0.0]
        at io.ktor.util.pipeline.SuspendFunctionGun.loop(PipelineContext.kt:248) [ktor-utils-jvm-1.0.0.jar:1.0.0]
        at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(PipelineContext.kt:63) [ktor-utils-jvm-1.0.0.jar:1.0.0]
        at io.ktor.util.pipeline.SuspendFunctionGun.proceed(PipelineContext.kt:111) [ktor-utils-jvm-1.0.0.jar:1.0.0]
        at io.ktor.util.pipeline.SuspendFunctionGun.execute(PipelineContext.kt:131) [ktor-utils-jvm-1.0.0.jar:1.0.0]
        at io.ktor.util.pipeline.Pipeline.execute(Pipeline.kt:24) [ktor-utils-jvm-1.0.0.jar:1.0.0]
        at io.ktor.server.engine.DefaultEnginePipelineKt$defaultEnginePipeline$2.invokeSuspend(DefaultEnginePipeline.kt:80) [ktor-server-host-common-1.0.0.jar:1.0.0]
        at io.ktor.server.engine.DefaultEnginePipelineKt$defaultEnginePipeline$2.invoke(DefaultEnginePipeline.kt) [ktor-server-host-common-1.0.0.jar:1.0.0]
        at io.ktor.util.pipeline.SuspendFunctionGun.loop(PipelineContext.kt:248) [ktor-utils-jvm-1.0.0.jar:1.0.0]
        at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(PipelineContext.kt:63) [ktor-utils-jvm-1.0.0.jar:1.0.0]
        at io.ktor.util.pipeline.SuspendFunctionGun.proceed(PipelineContext.kt:111) [ktor-utils-jvm-1.0.0.jar:1.0.0]
        at io.ktor.util.pipeline.SuspendFunctionGun.execute(PipelineContext.kt:131) [ktor-utils-jvm-1.0.0.jar:1.0.0]
        at io.ktor.util.pipeline.Pipeline.execute(Pipeline.kt:24) [ktor-utils-jvm-1.0.0.jar:1.0.0]
        at io.ktor.server.engine.DefaultEnginePipelineKt$defaultEnginePipeline$2.invokeSuspend(DefaultEnginePipeline.kt:80) [ktor-server-host-common-1.0.0.jar:1.0.0]
        at io.ktor.server.engine.DefaultEnginePipelineKt$defaultEnginePipeline$2.invoke(DefaultEnginePipeline.kt) [ktor-server-host-common-1.0.0.jar:1.0.0]
        at io.ktor.util.pipeline.SuspendFunctionGun.loop(PipelineContext.kt:248) [ktor-utils-jvm-1.0.0.jar:1.0.0]
        at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(PipelineContext.kt:63) [ktor-utils-jvm-1.0.0.jar:1.0.0]
        at io.ktor.util.pipeline.SuspendFunctionGun.proceed(PipelineContext.kt:111) [ktor-utils-jvm-1.0.0.jar:1.0.0]
        at io.ktor.util.pipeline.SuspendFunctionGun.execute(PipelineContext.kt:131) [ktor-utils-jvm-1.0.0.jar:1.0.0]
        at io.ktor.util.pipeline.Pipeline.execute(Pipeline.kt:24) [ktor-utils-jvm-1.0.0.jar:1.0.0]
        at io.ktor.server.servlet.KtorServlet$asyncService$1.invokeSuspend(KtorServlet.kt:133) [ktor-server-servlet-1.0.0.jar:1.0.0]
        at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:32) [kotlin-stdlib-1.3.10.jar:1.3.10-release-253 (1.3.10)]
        at kotlinx.coroutines.DispatchedTask.run(Dispatched.kt:236) [kotlinx-coroutines-core-1.0.1.jar:?]
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) [?:?]
        at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) [?:?]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
        at java.lang.Thread.run(Thread.java:834) [?:?]
Exception in thread "pool-5-thread-3" io.ktor.http.cio.ParserException: No HTTP header value provided for name Гаечный_Ключ.png":
Гаечный_Ключ.png"
        at io.ktor.http.cio.HttpParserKt.parseHeaders(HttpParser.kt:98)
        at io.ktor.http.cio.MultipartKt.parsePartHeaders(Multipart.kt:114)
        at io.ktor.http.cio.MultipartKt$parseMultipart$1.invokeSuspend(Multipart.kt:293)
        at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:32)
        at kotlinx.coroutines.ResumeModeKt.resumeMode(ResumeMode.kt:67)
        at kotlinx.coroutines.DispatchedKt.resume(Dispatched.kt:275)
        at kotlinx.coroutines.UndispatchedEventLoop.resumeUndispatched(Dispatched.kt:56)
        at kotlinx.coroutines.DispatchedKt.dispatch(Dispatched.kt:261)
        at kotlinx.coroutines.AbstractContinuation.dispatchResume(AbstractContinuation.kt:182)
        at kotlinx.coroutines.AbstractContinuation.completeStateUpdate(AbstractContinuation.kt:250)
        at kotlinx.coroutines.CancellableContinuationImpl.completeResume(CancellableContinuation.kt:260)
        at kotlinx.coroutines.channels.SendElement.completeResumeSend(AbstractChannel.kt:1058)
        at kotlinx.coroutines.channels.AbstractChannel.pollInternal(AbstractChannel.kt:533)
        at kotlinx.coroutines.channels.AbstractChannel.poll(AbstractChannel.kt:656)
        at kotlinx.coroutines.channels.ChannelCoroutine.poll(ChannelCoroutine.kt)
        at io.ktor.http.cio.CIOMultipartDataBase.readPart(CIOMultipartData.kt:38)
        at io.ktor.http.content.MultipartKt.forEachPart(Multipart.kt:102)
        at io.ktor.http.content.MultipartKt.forEachPart(Multipart.kt:102)
        at delightex.server.stateless.routes.FileKt$file$1.invokeSuspend(File.kt:38)
        at delightex.server.stateless.routes.FileKt$file$1.invoke(File.kt)
        at io.ktor.util.pipeline.SuspendFunctionGun.loop(PipelineContext.kt:248)
        at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(PipelineContext.kt:63)
        at io.ktor.util.pipeline.SuspendFunctionGun.proceed(PipelineContext.kt:111)
        at io.ktor.util.pipeline.SuspendFunctionGun.execute(PipelineContext.kt:131)
        at io.ktor.util.pipeline.Pipeline.execute(Pipeline.kt:24)
        at io.ktor.routing.Routing.executeResult(Routing.kt:148)
        at io.ktor.routing.Routing.interceptor(Routing.kt:29)
        at io.ktor.routing.Routing$Feature$install$1.invokeSuspend(Routing.kt:93)
        at io.ktor.routing.Routing$Feature$install$1.invoke(Routing.kt)
        at io.ktor.util.pipeline.SuspendFunctionGun.loop(PipelineContext.kt:248)
        at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(PipelineContext.kt:63)
        at io.ktor.util.pipeline.SuspendFunctionGun.proceed(PipelineContext.kt:111)
        at io.ktor.util.pipeline.SuspendFunctionGun.execute(PipelineContext.kt:131)
        at io.ktor.util.pipeline.Pipeline.execute(Pipeline.kt:24)
        at io.ktor.server.engine.DefaultEnginePipelineKt$defaultEnginePipeline$2.invokeSuspend(DefaultEnginePipeline.kt:80)
        at io.ktor.server.engine.DefaultEnginePipelineKt$defaultEnginePipeline$2.invoke(DefaultEnginePipeline.kt)
        at io.ktor.util.pipeline.SuspendFunctionGun.loop(PipelineContext.kt:248)
        at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(PipelineContext.kt:63)
        at io.ktor.util.pipeline.SuspendFunctionGun.proceed(PipelineContext.kt:111)
        at io.ktor.util.pipeline.SuspendFunctionGun.execute(PipelineContext.kt:131)
        at io.ktor.util.pipeline.Pipeline.execute(Pipeline.kt:24)
        at io.ktor.server.servlet.KtorServlet$asyncService$1.invokeSuspend(KtorServlet.kt:133)
        at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:32)
        at kotlinx.coroutines.DispatchedTask.run(Dispatched.kt:236)
        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
        at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at java.base/java.lang.Thread.run(Thread.java:834)        

^^^ this is thrown when uploading with curl like this:

curl -X POST http://localhost:8080/api/file/diag -Ffile=@Downloads/Гаечный_Ключ.png
kotlinx.io.charsets.MalformedInputException: Input length = 1
        at kotlinx.io.charsets.CharsetJVMKt.throwExceptionWrapped(CharsetJVM.kt:287) ~[kotlinx-io-jvm-0.1.0.jar:?]
        at kotlinx.io.charsets.CharsetJVMKt.decodeImplSlow(CharsetJVM.kt:253) ~[kotlinx-io-jvm-0.1.0.jar:?]
        at kotlinx.io.charsets.CharsetJVMKt.decodeExactBytes(CharsetJVM.kt:215) ~[kotlinx-io-jvm-0.1.0.jar:?]
        at kotlinx.io.core.StringsKt.readTextExactBytes(Strings.kt:349) ~[kotlinx-io-jvm-0.1.0.jar:?]
        at kotlinx.io.core.StringsKt.readTextExactBytes$default(Strings.kt:348) ~[kotlinx-io-jvm-0.1.0.jar:?]
        at kotlinx.io.core.ByteReadPacketBase.readText(Packet.kt:468) ~[kotlinx-io-jvm-0.1.0.jar:?]
        at kotlinx.io.core.ByteReadPacketBase.readText$default(Packet.kt:466) ~[kotlinx-io-jvm-0.1.0.jar:?]
        at io.ktor.http.cio.CIOMultipartDataBase.partToData(CIOMultipartData.kt:130) ~[ktor-http-cio-1.0.0.jar:1.0.0]
        at io.ktor.http.cio.CIOMultipartDataBase.eventToData(CIOMultipartData.kt:59) ~[ktor-http-cio-1.0.0.jar:1.0.0]
        at io.ktor.http.cio.CIOMultipartDataBase.readPart(CIOMultipartData.kt:39) ~[ktor-http-cio-1.0.0.jar:1.0.0]
        at io.ktor.http.content.MultipartKt.forEachPart(Multipart.kt:102) ~[ktor-http-jvm-1.0.0.jar:1.0.0]
        at delightex.server.stateless.routes.FileKt$file$1.invokeSuspend(File.kt:38) ~[stateless-server-1.0-SNAPSHOT.jar:?]
        at delightex.server.stateless.routes.FileKt$file$1.invoke(File.kt) ~[stateless-server-1.0-SNAPSHOT.jar:?]
        at io.ktor.util.pipeline.SuspendFunctionGun.loop(PipelineContext.kt:248) [ktor-utils-jvm-1.0.0.jar:1.0.0]
        at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(PipelineContext.kt:63) [ktor-utils-jvm-1.0.0.jar:1.0.0]
        at io.ktor.util.pipeline.SuspendFunctionGun.proceed(PipelineContext.kt:111) [ktor-utils-jvm-1.0.0.jar:1.0.0]
        at io.ktor.util.pipeline.SuspendFunctionGun.execute(PipelineContext.kt:131) [ktor-utils-jvm-1.0.0.jar:1.0.0]
        at io.ktor.util.pipeline.Pipeline.execute(Pipeline.kt:24) [ktor-utils-jvm-1.0.0.jar:1.0.0]
        at io.ktor.routing.Routing.executeResult(Routing.kt:148) [ktor-server-core-1.0.0.jar:1.0.0]
        at io.ktor.routing.Routing.interceptor(Routing.kt:29) [ktor-server-core-1.0.0.jar:1.0.0]
        at io.ktor.routing.Routing$Feature$install$1.invokeSuspend(Routing.kt:93) [ktor-server-core-1.0.0.jar:1.0.0]
        at io.ktor.routing.Routing$Feature$install$1.invoke(Routing.kt) [ktor-server-core-1.0.0.jar:1.0.0]
        at io.ktor.util.pipeline.SuspendFunctionGun.loop(PipelineContext.kt:248) [ktor-utils-jvm-1.0.0.jar:1.0.0]
        at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(PipelineContext.kt:63) [ktor-utils-jvm-1.0.0.jar:1.0.0]
        at io.ktor.util.pipeline.SuspendFunctionGun.proceed(PipelineContext.kt:111) [ktor-utils-jvm-1.0.0.jar:1.0.0]
        at io.ktor.util.pipeline.SuspendFunctionGun.execute(PipelineContext.kt:131) [ktor-utils-jvm-1.0.0.jar:1.0.0]
        at io.ktor.util.pipeline.Pipeline.execute(Pipeline.kt:24) [ktor-utils-jvm-1.0.0.jar:1.0.0]
        at io.ktor.server.engine.DefaultEnginePipelineKt$defaultEnginePipeline$2.invokeSuspend(DefaultEnginePipeline.kt:80) [ktor-server-host-common-1.0.0.jar:1.0.0]
        at io.ktor.server.engine.DefaultEnginePipelineKt$defaultEnginePipeline$2.invoke(DefaultEnginePipeline.kt) [ktor-server-host-common-1.0.0.jar:1.0.0]
        at io.ktor.util.pipeline.SuspendFunctionGun.loop(PipelineContext.kt:248) [ktor-utils-jvm-1.0.0.jar:1.0.0]
        at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(PipelineContext.kt:63) [ktor-utils-jvm-1.0.0.jar:1.0.0]
        at io.ktor.util.pipeline.SuspendFunctionGun.proceed(PipelineContext.kt:111) [ktor-utils-jvm-1.0.0.jar:1.0.0]
        at io.ktor.util.pipeline.SuspendFunctionGun.execute(PipelineContext.kt:131) [ktor-utils-jvm-1.0.0.jar:1.0.0]
        at io.ktor.util.pipeline.Pipeline.execute(Pipeline.kt:24) [ktor-utils-jvm-1.0.0.jar:1.0.0]
        at io.ktor.server.servlet.KtorServlet$asyncService$1.invokeSuspend(KtorServlet.kt:133) [ktor-server-servlet-1.0.0.jar:1.0.0]
        at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:32) [kotlin-stdlib-1.3.10.jar:1.3.10-release-253 (1.3.10)]
        at kotlinx.coroutines.DispatchedTask.run(Dispatched.kt:236) [kotlinx-coroutines-core-1.0.1.jar:?]
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) [?:?]
        at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) [?:?]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
        at java.lang.Thread.run(Thread.java:834) [?:?]

^^^ this is thrown when uploading the same file with the latest google chrome

cy6erGn0m pushed a commit to Kotlin/kotlinx-io that referenced this issue Nov 26, 2018
@cy6erGn0m
Copy link
Contributor

Fixed in 1.0.1

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants