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

tls: convertProtocols() error handling #23606

Conversation

pugbyte
Copy link

@pugbyte pugbyte commented Oct 12, 2018

The convertProtocols() function now throws a range error when the byte
length of a protocol is too long to fit in a Buffer.

Also added a test case in test/parallel/test-tls-basic-validations.js
to cover this.

Checklist
  • make -j4 test (UNIX), or vcbuild test (Windows) passes
  • tests and/or benchmarks are included
  • commit message follows commit guidelines

The convertProtocols() function now throws a range error when the byte
length of a protocol is too long to fit in a Buffer.

Also added a test case in test/parallel/test-tls-basic-validations.js
to cover this.
@nodejs-github-bot nodejs-github-bot added the tls Issues and PRs related to the tls subsystem. label Oct 12, 2018
lib/tls.js Outdated Show resolved Hide resolved
Changed the byte length error message for protocol to correctly state
that the length must be <= 255 not < 255

Amended the test case in test/parallel/test-tls-basic-validations.js
Copy link
Member

@addaleax addaleax left a comment

Choose a reason for hiding this comment

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

Thanks!

@addaleax addaleax added the author ready PRs that have at least one approval, no pending requests for changes, and a CI started. label Oct 12, 2018
@addaleax
Copy link
Member

CI: https://ci.nodejs.org/job/node-test-pull-request/17761/

We may or may not consider this semver-major; on the one hand, this adds a new error, on the other hand, output before this patch would have been completely broken and would have failed at another point.

@jasnell
Copy link
Member

jasnell commented Oct 12, 2018

hmm... I think we need to mark as semver-major but let's see if there's @nodejs/tsc consensus on downgrading it.

@jasnell jasnell added the semver-major PRs that contain breaking changes and should be released in the next major version. label Oct 12, 2018
Copy link
Member

@mcollina mcollina left a comment

Choose a reason for hiding this comment

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

LGTM

@Trott Trott added the code-and-learn Issues related to the Code-and-Learn events and PRs submitted during the events. label Oct 12, 2018
@Trott
Copy link
Member

Trott commented Oct 12, 2018

@BridgeAR BridgeAR removed the author ready PRs that have at least one approval, no pending requests for changes, and a CI started. label Oct 12, 2018
@BridgeAR
Copy link
Member

I don't think that this has to be semver major since it was broken before otherwise.

Also changed corresponding usage in lib/tls.js

Amended the test case in test/parallel/test-tls-basic-validations.js
lib/tls.js Outdated Show resolved Hide resolved
@Trott
Copy link
Member

Trott commented Oct 13, 2018

@addaleax addaleax added the author ready PRs that have at least one approval, no pending requests for changes, and a CI started. label Oct 16, 2018
@addaleax
Copy link
Member

@Trott
Copy link
Member

Trott commented Oct 16, 2018

I think this should land as patch rather than major. I think the reason is as stated by @BridgeAR above, but I'm willing to supply more detail to the argument if there's disagreement about this.

lib/tls.js Outdated
@@ -60,6 +63,10 @@ function convertProtocols(protocols) {
const lens = new Array(protocols.length);
const buff = Buffer.allocUnsafe(protocols.reduce((p, c, i) => {
var len = Buffer.byteLength(c);
if (len > 255) {
throw new ERR_OUT_OF_RANGE('', '<= 255', len, 'The byte length of the ' +
`protocol at index ${i} exceeds the maximum length.`);
Copy link
Member

Choose a reason for hiding this comment

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

When looking at this signature it looks like a mistake that the first argument is an empty string.

I suggest to use the following instead:

ERR_OUT_OF_RANGE(str, range, input, replaceDefaultBoolean)

Using booleans as arguments is not great either but that way the first argument is at least used properly and the reader will hopefully be less surprised (as I would be). We might also use a different more expressive value than a boolean but that could be more error prone.

Copy link
Author

Choose a reason for hiding this comment

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

I've refactored as per your suggestion. Check it out.

@BridgeAR BridgeAR removed the semver-major PRs that contain breaking changes and should be released in the next major version. label Oct 17, 2018
@BridgeAR
Copy link
Member

I removed the semver-major label due to the comments above. // cc @nodejs/tsc

@addaleax
Copy link
Member

Fresh CI to include the latest changes: https://ci.nodejs.org/job/node-test-pull-request/18020/

@Trott
Copy link
Member

Trott commented Oct 24, 2018

Landed in cdba3c1.

Thanks for the contribution! 🎉

(If you're interested in other possible contributions to Node.js but don't have a good idea of where to start looking, some ideas are posted at https://www.nodetodo.org/next-steps/.)

targos pushed a commit that referenced this pull request Oct 24, 2018
The convertProtocols() function now throws a range error when the byte
length of a protocol is too long to fit in a Buffer.

Also added a test case in test/parallel/test-tls-basic-validations.js
to cover this.

PR-URL: #23606
Reviewed-By: Anna Henningsen <[email protected]>
Reviewed-By: James M Snell <[email protected]>
Reviewed-By: Matteo Collina <[email protected]>
Reviewed-By: Sakthipriyan Vairamani <[email protected]>
@pugbyte
Copy link
Author

pugbyte commented Oct 25, 2018

Thank you for the opportunity. This has been really eye-opening and I'll be much less shy about contributing to open-source projects in the future.

@MylesBorins
Copy link
Contributor

it seems like there was some debate regarding if this was Semver-Major or not. As such i'm unsure if it should be backported to LTS

thoughts?

codebytere pushed a commit that referenced this pull request Dec 13, 2018
The convertProtocols() function now throws a range error when the byte
length of a protocol is too long to fit in a Buffer.

Also added a test case in test/parallel/test-tls-basic-validations.js
to cover this.

PR-URL: #23606
Reviewed-By: Anna Henningsen <[email protected]>
Reviewed-By: James M Snell <[email protected]>
Reviewed-By: Matteo Collina <[email protected]>
Reviewed-By: Sakthipriyan Vairamani <[email protected]>
MylesBorins pushed a commit that referenced this pull request Dec 26, 2018
The convertProtocols() function now throws a range error when the byte
length of a protocol is too long to fit in a Buffer.

Also added a test case in test/parallel/test-tls-basic-validations.js
to cover this.

PR-URL: #23606
Reviewed-By: Anna Henningsen <[email protected]>
Reviewed-By: James M Snell <[email protected]>
Reviewed-By: Matteo Collina <[email protected]>
Reviewed-By: Sakthipriyan Vairamani <[email protected]>
@codebytere codebytere mentioned this pull request Jan 4, 2019
codebytere added a commit that referenced this pull request Jan 29, 2019
* doc:
  * add oyyd to collaborators (Ouyang Yadong) [#24300](#24300)
* tls:
  * throw if protocol too long (Andre Jodat-Danbrani) [#23606](#23606)
codebytere added a commit that referenced this pull request Jan 29, 2019
* doc:
  * add oyyd to collaborators (Ouyang Yadong) [#24300](#24300)
* tls:
  * throw if protocol too long (Andre Jodat-Danbrani) [#23606](#23606)

PR-URL: #25346
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
author ready PRs that have at least one approval, no pending requests for changes, and a CI started. code-and-learn Issues related to the Code-and-Learn events and PRs submitted during the events. tls Issues and PRs related to the tls subsystem.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

10 participants