Skip to content

src: handle thrown errors in CopyProperties() - #8649

Merged
cjihrig merged 1 commit into
nodejs:masterfrom
cjihrig:8537
Sep 20, 2016
Merged

src: handle thrown errors in CopyProperties()#8649
cjihrig merged 1 commit into
nodejs:masterfrom
cjihrig:8537

Conversation

@cjihrig

Copy link
Copy Markdown
Contributor
Checklist
  • make -j4 test (UNIX), or vcbuild test nosign (Windows) passes
  • tests and/or benchmarks are included
  • commit message follows commit guidelines
Affected core subsystem(s)

src

Description of change

This commit prevents thrown JavaScript exceptions from crashing the process in node_contextify's CopyProperties() function.

Closes#8537

@nodejs-github-botnodejs-github-bot added the c++ Issues and PRs that require attention from people who are familiar with C++. label Sep 18, 2016
@imyller

Copy link
Copy Markdown
Member

Comment threadsrc/node_contextify.cc Outdated

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

You don't need a TryCatch because...

Comment threadsrc/node_contextify.cc Outdated

@bnoordhuisbnoordhuisSep 19, 2016

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

...the proper way is to check:

auto maybe_has = sandbox_obj->HasOwnProperty(context, key);
if (!maybe_has.IsJust()) break; // Exception pending.auto has = maybe_has.FromJust();
// ...

Comment threadsrc/node_contextify.cc Outdated

@bnoordhuisbnoordhuisSep 19, 2016

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

You don't need to ReThrow() if you drop the TryCatch, the exception will simply bubble up.

(I believe the caller of CopyProperties() is doing that wrong, too.)

@cjihrig

Copy link
Copy Markdown
ContributorAuthor

Thanks @bnoordhuis. Updated with your suggestions.

Comment threadsrc/node_contextify.cc Outdated

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

tiny nit: I would be okay with just keeping the bool type explicit, using auto here doesn’t save any space and erases information that a reader of the code may find helpful.

@cjihrig

Copy link
Copy Markdown
ContributorAuthor

@addaleax done.

@addaleaxaddaleax left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM, thanks!

@bnoordhuis

Copy link
Copy Markdown
Member

Tangential: CopyProperties() doesn't look very rigorous to me. GetOwnPropertyNames() returns only enumerable string properties; no symbols, no non-enumerable properties.

Perhaps only enumerable makes some sense because you don't want to copy over globals like Array and Date.

@fhinkelfhinkel added the vm Issues and PRs related to the vm subsystem. label Sep 20, 2016
@fhinkel

Copy link
Copy Markdown
Member

FYI: We made API changes upstream in V8, so CopyProperties() will go away soon.

@fhinkel

Copy link
Copy Markdown
Member

Can you add a regression test?

@cjihrig

Copy link
Copy Markdown
ContributorAuthor

@fhinkel what do you mean? I thought I did (see the other changed file) :-)

@fhinkel

Copy link
Copy Markdown
Member

So sorry, I must have completely missed that! LGTM.

@jasnelljasnell left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM

@imyllerimyller left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM

@targostargos left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM

@jasnell

Copy link
Copy Markdown
Member

This commit prevents thrown JavaScript exceptions from crashing
the process in node_contextify's CopyProperties() function.
Fixes: nodejs#8537
PR-URL: nodejs#8649
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Franziska Hinkelmann <franziska.hinkelmann@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Ilkka Myller <ilkka.myller@nodefield.com>
Reviewed-By: Michaël Zasso <targos@protonmail.com>
@MylesBorins

Copy link
Copy Markdown
Contributor

@cjihrig I've set this as do not land as proxies are not on v4.x

Let me know if I'm mistaken here

@bnoordhuis

Copy link
Copy Markdown
Member

I think it would be good to back-port, it's not just proxies that can cause exceptions.

Fishrock123 pushed a commit that referenced this pull request Oct 11, 2016
This commit prevents thrown JavaScript exceptions from crashing
the process in node_contextify's CopyProperties() function.
Fixes: #8537
PR-URL: #8649
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Franziska Hinkelmann <franziska.hinkelmann@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Ilkka Myller <ilkka.myller@nodefield.com>
Reviewed-By: Michaël Zasso <targos@protonmail.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

c++Issues and PRs that require attention from people who are familiar with C++.vmIssues and PRs related to the vm subsystem.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants

@cjihrig@imyller@bnoordhuis@fhinkel@jasnell@MylesBorins@addaleax@targos@nodejs-github-bot