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

Add runtime guardrail for SSI #4319

Merged
merged 3 commits into from
Jun 26, 2024
Merged

Add runtime guardrail for SSI #4319

merged 3 commits into from
Jun 26, 2024

Conversation

bengl
Copy link
Collaborator

@bengl bengl commented May 16, 2024

When in SSI, bail out if our version of Node.js is incompatible.

@bengl bengl requested a review from a team as a code owner May 16, 2024 19:52
Copy link

github-actions bot commented May 16, 2024

Overall package size

Self size: 6.73 MB
Deduped: 61.99 MB
No deduping: 62.27 MB

Dependency sizes

name version self size total size
@datadog/native-appsec 8.0.1 15.59 MB 15.6 MB
@datadog/native-iast-taint-tracking 2.1.0 14.91 MB 14.92 MB
@datadog/pprof 5.3.0 9.85 MB 10.22 MB
protobufjs 7.2.5 2.77 MB 6.56 MB
@datadog/native-iast-rewriter 2.3.1 2.15 MB 2.24 MB
@opentelemetry/core 1.14.0 872.87 kB 1.47 MB
@datadog/native-metrics 2.0.0 898.77 kB 1.3 MB
@opentelemetry/api 1.8.0 1.21 MB 1.21 MB
import-in-the-middle 1.8.1 71.67 kB 741.34 kB
msgpack-lite 0.1.26 201.16 kB 281.59 kB
opentracing 0.14.7 194.81 kB 194.81 kB
semver 7.5.4 93.4 kB 123.8 kB
pprof-format 2.1.0 111.69 kB 111.69 kB
@datadog/sketches-js 2.1.0 109.9 kB 109.9 kB
lodash.sortby 4.7.0 75.76 kB 75.76 kB
lru-cache 7.14.0 74.95 kB 74.95 kB
ignore 5.2.4 51.22 kB 51.22 kB
int64-buffer 0.1.10 49.18 kB 49.18 kB
shell-quote 1.8.1 44.96 kB 44.96 kB
istanbul-lib-coverage 3.2.0 29.34 kB 29.34 kB
tlhunter-sorted-set 0.1.0 24.94 kB 24.94 kB
limiter 1.1.5 23.17 kB 23.17 kB
dc-polyfill 0.1.4 23.1 kB 23.1 kB
retry 0.13.1 18.85 kB 18.85 kB
jest-docblock 29.7.0 8.99 kB 12.76 kB
crypto-randomuuid 1.0.0 11.18 kB 11.18 kB
path-to-regexp 0.1.7 6.78 kB 6.78 kB
koalas 1.0.2 6.47 kB 6.47 kB
module-details-from-path 1.0.3 4.47 kB 4.47 kB

🤖 This report was automatically generated by heaviest-objects-in-the-universe

@pr-commenter
Copy link

pr-commenter bot commented May 16, 2024

Benchmarks

Benchmark execution time: 2024-06-25 19:25:41

Comparing candidate commit acb6c1e in PR branch bengl/runtime-guardrails with baseline commit bc36d27 in branch master.

Found 0 performance improvements and 0 performance regressions! Performance is the same for 260 metrics, 6 unstable metrics.

Qard
Qard previously approved these changes May 17, 2024
it('should initialize the tracer, if DD_INJECTION_ENABLED', () => {
return runTest(cwd, { NODE_OPTIONS, DD_INJECTION_ENABLED }, 'true\n')
context('when node version is more than engines field', () => {
const FAKE_VERSION = '50000.0.0'
Copy link
Member

Choose a reason for hiding this comment

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

make sure to update this in april of the year 27002, when node 50000 releases

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Maybe I should use Number.MAX_SAFE_INTEGER instead?

Copy link
Contributor

Choose a reason for hiding this comment

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

IT'S OVER 9000!!!!

simon-id
simon-id previously approved these changes May 17, 2024
@bengl bengl marked this pull request as draft May 17, 2024 20:46
@bengl bengl dismissed stale reviews from simon-id and Qard via aefbd02 June 3, 2024 18:48
@bengl bengl force-pushed the bengl/runtime-guardrails branch from aefbd02 to 947e5d1 Compare June 3, 2024 19:26
@bengl bengl force-pushed the bengl/runtime-guardrails branch 3 times, most recently from dea462d to 95948d8 Compare June 17, 2024 04:27
Copy link

codecov bot commented Jun 17, 2024

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 69.19%. Comparing base (b1f1f85) to head (077923f).
Report is 15 commits behind head on master.

Current head 077923f differs from pull request most recent head acb6c1e

Please upload reports for the commit acb6c1e to get more accurate results.

Additional details and impacted files
@@             Coverage Diff             @@
##           master    #4319       +/-   ##
===========================================
- Coverage   92.64%   69.19%   -23.46%     
===========================================
  Files         116        1      -115     
  Lines        4173      198     -3975     
  Branches       33       33               
===========================================
- Hits         3866      137     -3729     
+ Misses        307       61      -246     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@bengl bengl force-pushed the bengl/runtime-guardrails branch 3 times, most recently from 7b20ebf to 077923f Compare June 17, 2024 18:27
@bengl bengl marked this pull request as ready for review June 18, 2024 17:42
@bengl bengl requested a review from a team as a code owner June 18, 2024 17:42

const desc = Reflect.getOwnPropertyDescriptor(process.versions, 'node')

desc.value = process.env.FAKE_VERSION
Copy link
Member

Choose a reason for hiding this comment

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

Let's use a real old version instead. The version number is not what would typically cause issues, but rather things that we do that could be unsupported in older versions, and that includes the bailout logic.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

@rochdev Would one version prior to the current bottom of the engines field range suffice?

Copy link
Member

Choose a reason for hiding this comment

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

To be honest I'd probably go with as low as we possibly can for the odd Node 4/6/8 that may try installing this, especially since it should be easy to support these versions for just the bailout script.

Copy link
Member

Choose a reason for hiding this comment

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

New code looks good to me, but I'd say the minimum Node version should be lowered to at the very least 8, but if we can push 4 then that's even better. Both of those won't work on Apple Silicon though, so maybe the choice could be platform specific? In any case, this is not a blocker, but definitely something we should do, otherwise we have no idea if this works on older versions which may still fail.

integration-tests/init.spec.js Outdated Show resolved Hide resolved
@bengl bengl force-pushed the bengl/runtime-guardrails branch 2 times, most recently from 944755a to 98620da Compare June 18, 2024 21:11
szegedi
szegedi previously approved these changes Jun 19, 2024
Copy link
Contributor

@szegedi szegedi left a comment

Choose a reason for hiding this comment

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

LGTM, one small nit.

Comment on lines +57 to +59
if (points.length === 0) {
return
}
Copy link
Contributor

Choose a reason for hiding this comment

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

You could move this before forEach

rochdev
rochdev previously approved these changes Jun 19, 2024
init.js Outdated

let initBailout = false
let clobberBailout = false
const forced = ['1', 'true', 'True'].includes(process.env.DD_INJECT_FORCE)
Copy link
Contributor

Choose a reason for hiding this comment

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

I often see this ['1', 'true', 'True'].includes(…) idiom. We do have an isTrue function in util.js though – could you use that instead for consistency? It also accepts the word "true" in any combination of letter cases and while "tRuE" is arguably weird, "TRUE" is reasonable.

Suggested change
const forced = ['1', 'true', 'True'].includes(process.env.DD_INJECT_FORCE)
const forced = isTrue(process.env.DD_INJECT_FORCE)

Even better, since you're creating a Config object on line 10 anyway you could let it read the env variable and expose its evaluation result as a property of the config object. That way the config object is the only source of configuration for all of the rest of the codebase. There's already some processing in there for e.g. DD_INJECTION_ENABLED that I added for profiler's needs, but you'd be welcome to generalize it, and then you could use a Config property for that as well.

Qard
Qard previously approved these changes Jun 21, 2024
@bengl bengl dismissed stale reviews from Qard, rochdev, and szegedi via 146dbd8 June 21, 2024 21:26
@bengl bengl force-pushed the bengl/runtime-guardrails branch 3 times, most recently from adc1630 to 0b093b4 Compare June 25, 2024 16:52
@bengl bengl merged commit 413df1e into master Jun 26, 2024
144 checks passed
@bengl bengl deleted the bengl/runtime-guardrails branch June 26, 2024 14:22
juan-fernandez pushed a commit that referenced this pull request Jul 10, 2024
* Add guardrails for SSI

* PR feedback

* test on a swath of versions, in CI only
juan-fernandez pushed a commit that referenced this pull request Jul 10, 2024
* Add guardrails for SSI

* PR feedback

* test on a swath of versions, in CI only
juan-fernandez pushed a commit that referenced this pull request Jul 11, 2024
* Add guardrails for SSI

* PR feedback

* test on a swath of versions, in CI only
juan-fernandez pushed a commit that referenced this pull request Jul 11, 2024
* Add guardrails for SSI

* PR feedback

* test on a swath of versions, in CI only
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants