Open
Conversation
反序列化InputStream时需要读取完他的字节,如果不读则在org.apache.dubbo.rpc.protocol.dubbo.DecodeableRpcResult#decode:handleAttachment(in); 抛出expected map/object at java.lang.String异常
AlbumenJ
requested changes
Oct 31, 2024
Comment on lines
116
to
119
| /** | ||
| * 测试81920字节,返回 ByteArrayInputStream | ||
| * 比缓冲区多10倍字节 | ||
| */ |
4 tasks
AlbumenJ
requested changes
Feb 28, 2025
Comment on lines
+100
to
+105
| // If the length of InputStream is greater than the buffer, create a temporary file and return it | ||
| String name = String.format("%d-%s.dubbo.tmp", System.currentTimeMillis(), UUID.randomUUID().toString().replace("-", "")); | ||
| file = new File(tmpDir, name); | ||
| // Close the stream in finally | ||
| //noinspection resource | ||
| out = new FileOutputStream(file); |
Member
There was a problem hiding this comment.
Using temp file in serilalization directly is not a good idea
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
@AlbumenJ This code cannot completely solve the problem of deserializing InputStream:Fix input stream unable to being deserialized #14837
The code before modification is:
In
in.readInputStream(), he only readInputStreamoftag, and his data was not read. This will cause an error in the '_offset' whenorg.apache.dubbo.rpc.protocol.dubbo.DecodeableRpcResult#decode(org.apache.dubbo.remoting.Channel, java.io.InputStream)reads the map in thehandleAttachment(in);method, throwing an exception;So when deserializing InputStream, it is necessary to read its bytes and move _osffet to the correct position.
related issues:方法返回InputStream时expected map/object at java.lang.String异常