22
22
'use strict' ;
23
23
24
24
const { NativeModule } = require ( 'internal/bootstrap/loaders' ) ;
25
- const util = require ( 'util' ) ;
26
25
const { pathToFileURL } = require ( 'internal/url' ) ;
26
+ const util = require ( 'util' ) ;
27
27
const vm = require ( 'vm' ) ;
28
28
const assert = require ( 'assert' ) . ok ;
29
29
const fs = require ( 'fs' ) ;
@@ -45,6 +45,9 @@ const { getOptionValue } = require('internal/options');
45
45
const preserveSymlinks = getOptionValue ( '--preserve-symlinks' ) ;
46
46
const preserveSymlinksMain = getOptionValue ( '--preserve-symlinks-main' ) ;
47
47
const experimentalModules = getOptionValue ( '--experimental-modules' ) ;
48
+ const manifest = getOptionValue ( '[has_experimental_policy]' ) ?
49
+ require ( 'internal/process/policy' ) . manifest :
50
+ null ;
48
51
49
52
const {
50
53
ERR_INVALID_ARG_VALUE ,
@@ -164,6 +167,11 @@ function readPackage(requestPath) {
164
167
return false ;
165
168
}
166
169
170
+ if ( manifest ) {
171
+ const jsonURL = pathToFileURL ( jsonPath ) ;
172
+ manifest . assertIntegrity ( jsonURL , json ) ;
173
+ }
174
+
167
175
try {
168
176
return packageMainCache [ requestPath ] = JSON . parse ( json ) . main ;
169
177
} catch ( e ) {
@@ -672,6 +680,10 @@ function normalizeReferrerURL(referrer) {
672
680
// the file.
673
681
// Returns exception, if any.
674
682
Module . prototype . _compile = function ( content , filename ) {
683
+ if ( manifest ) {
684
+ const moduleURL = pathToFileURL ( filename ) ;
685
+ manifest . assertIntegrity ( moduleURL , content ) ;
686
+ }
675
687
676
688
content = stripShebang ( content ) ;
677
689
@@ -711,11 +723,14 @@ Module.prototype._compile = function(content, filename) {
711
723
var depth = requireDepth ;
712
724
if ( depth === 0 ) stat . cache = new Map ( ) ;
713
725
var result ;
726
+ var exports = this . exports ;
727
+ var thisValue = exports ;
728
+ var module = this ;
714
729
if ( inspectorWrapper ) {
715
- result = inspectorWrapper ( compiledWrapper , this . exports , this . exports ,
716
- require , this , filename , dirname ) ;
730
+ result = inspectorWrapper ( compiledWrapper , thisValue , exports ,
731
+ require , module , filename , dirname ) ;
717
732
} else {
718
- result = compiledWrapper . call ( this . exports , this . exports , require , this ,
733
+ result = compiledWrapper . call ( thisValue , exports , require , module ,
719
734
filename , dirname ) ;
720
735
}
721
736
if ( depth === 0 ) stat . cache = null ;
@@ -732,7 +747,13 @@ Module._extensions['.js'] = function(module, filename) {
732
747
733
748
// Native extension for .json
734
749
Module . _extensions [ '.json' ] = function ( module , filename ) {
735
- var content = fs . readFileSync ( filename , 'utf8' ) ;
750
+ const content = fs . readFileSync ( filename , 'utf8' ) ;
751
+
752
+ if ( manifest ) {
753
+ const moduleURL = pathToFileURL ( filename ) ;
754
+ manifest . assertIntegrity ( moduleURL , content ) ;
755
+ }
756
+
736
757
try {
737
758
module . exports = JSON . parse ( stripBOM ( content ) ) ;
738
759
} catch ( err ) {
@@ -744,6 +765,12 @@ Module._extensions['.json'] = function(module, filename) {
744
765
745
766
// Native extension for .node
746
767
Module . _extensions [ '.node' ] = function ( module , filename ) {
768
+ if ( manifest ) {
769
+ const content = fs . readFileSync ( filename ) ;
770
+ const moduleURL = pathToFileURL ( filename ) ;
771
+ manifest . assertIntegrity ( moduleURL , content ) ;
772
+ }
773
+ // be aware this doesn't use `content`
747
774
return process . dlopen ( module , path . toNamespacedPath ( filename ) ) ;
748
775
} ;
749
776
0 commit comments