Fix bug with packet sizes - #559
Merged
Merged
Conversation
This is an import of OpenKermit/ckermit@d560c58 Original description: The initial bug can be duplicated with this command, which will hang: touch /tmp/foobar12345 kermit -H -Y -C "set host /network-type:pseudoterminal kermit -x, remote del /tmp/foobar12345, close, exit" Note that the /tmp/foobar12345 filename is the precise length needed to trigger this. When long packets are negotiated, kermit switches to long packet formatting (extended length) if the total packet size (excluding SOP and the LEN byte itself) exceeds the maximum length that can be represented as a single printable ASCII character in the short packet's LEN field. Since short packet lengths are encoded via tochar(len) = len + 32, and the maximum printable ASCII character is '~' (126), the maximum value that can be encoded in the short LEN field is 126 - 32 = 94 bytes. Any packet where (len + bctl + 2) exceeds 94 must be formatted as a long packet. The previous threshold of > 96 was incorrect and caused packets of size 95 and 96 to be formatted as short packets. This resulted packes of size 95 or 96 generating a len byte of 127 (0x7f) or 128 (0x80), which the receiving end rejected.
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.
This is an import of
OpenKermit/ckermit@d560c58
Original description:
The initial bug can be duplicated with this command, which will hang:
Note that the /tmp/foobar12345 filename is the precise length needed to trigger this.
When long packets are negotiated, kermit switches to long packet formatting (extended length) if the total packet size (excluding SOP and the LEN byte itself) exceeds the maximum length that can be represented as a single printable ASCII character in the short packet's LEN field.
Since short packet lengths are encoded via tochar(len) = len + 32, and the maximum printable ASCII character is '~' (126), the maximum value that can be encoded in the short LEN field is 126 - 32 = 94 bytes.
Any packet where (len + bctl + 2) exceeds 94 must be formatted as a long packet. The previous threshold of > 96 was incorrect and caused packets of size 95 and 96 to be formatted as short packets.
This resulted packes of size 95 or 96 generating a len byte of 127 (0x7f) or 128 (0x80), which the receiving end rejected.