Skip to content

Correctly set the value of decode.bytes to bytes used.#179

Open
ckcr4lyf wants to merge 4 commits into
webtorrent:masterfrom
ckcr4lyf:master
Open

Correctly set the value of decode.bytes to bytes used.#179
ckcr4lyf wants to merge 4 commits into
webtorrent:masterfrom
ckcr4lyf:master

Conversation

@ckcr4lyf
Copy link
Copy Markdown
Contributor

@ckcr4lyf ckcr4lyf commented Apr 1, 2024

What is the purpose of this pull request? (put an "X" next to item)

[ ] Documentation update
[X] Bug fix
[ ] New feature
[ ] Other, please explain:

What changes did you make? (Give an overview)
After decoding is complete, update the value of decode.bytes to decode.position to reflect the number of bytes used

Which issue (if any) does this pull request address?
#178

Is there anything you'd like reviewers to focus on?
The original spec is here: https://github.com/mafintosh/abstract-encoding/ , the README for this project says it is "compatible", I would think this includes this property.

This might be slightly related / affect #61, since this strictly assumes we try and parse a single bencoded piece of data (e.g. two consecutive integers like i123ei123e are technically separate).

This PR becomes important when trying to bencode e.g. the response for a ut_metadata request (https://www.rasterbar.com/products/libtorrent/extension_protocol.html) , since the bencoded data is immediately followed by the binary metadata piece, so returning the number of bytes consumed enables offsetting into the binary data accurately.

A workaround I am using right now is to call encodingLength on the decoded data to determine how many bytes it would've been, but obviously this is wasteful.

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR fixes bencode.decode.bytes to report the number of bytes actually consumed by decoding the first bencoded value (instead of the full input length), aligning behavior with the abstract-encoding contract and enabling correct offsetting into trailing binary data.

Changes:

  • Update lib/decode.js to set decode.bytes from decode.position after decoding completes.
  • Add a new test file to assert decode.bytes with trailing data / multiple concatenated bencoded values.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.

File Description
lib/decode.js Sets decode.bytes to the consumed-byte cursor (decode.position) after decode.next() runs.
test/decode.length.test.js Adds tests asserting decode.bytes when extra data follows the decoded value.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

list: [1, 2, 3, 4, 'string', 5, {}]
}
const result = bencode.encode(someData)
bencode.decode(Buffer.from(result).toString() + 'RANDOM_JUNK_DATA')
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

Successfully merging this pull request may close these issues.

2 participants