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 ) {
@@ -675,6 +683,10 @@ function normalizeReferrerURL(referrer) {
675
683
// the file.
676
684
// Returns exception, if any.
677
685
Module . prototype . _compile = function ( content , filename ) {
686
+ if ( manifest ) {
687
+ const moduleURL = pathToFileURL ( filename ) ;
688
+ manifest . assertIntegrity ( moduleURL , content ) ;
689
+ }
678
690
679
691
content = stripShebang ( content ) ;
680
692
@@ -714,11 +726,14 @@ Module.prototype._compile = function(content, filename) {
714
726
var depth = requireDepth ;
715
727
if ( depth === 0 ) stat . cache = new Map ( ) ;
716
728
var result ;
729
+ var exports = this . exports ;
730
+ var thisValue = exports ;
731
+ var module = this ;
717
732
if ( inspectorWrapper ) {
718
- result = inspectorWrapper ( compiledWrapper , this . exports , this . exports ,
719
- require , this , filename , dirname ) ;
733
+ result = inspectorWrapper ( compiledWrapper , thisValue , exports ,
734
+ require , module , filename , dirname ) ;
720
735
} else {
721
- result = compiledWrapper . call ( this . exports , this . exports , require , this ,
736
+ result = compiledWrapper . call ( thisValue , exports , require , module ,
722
737
filename , dirname ) ;
723
738
}
724
739
if ( depth === 0 ) stat . cache = null ;
@@ -735,7 +750,13 @@ Module._extensions['.js'] = function(module, filename) {
735
750
736
751
// Native extension for .json
737
752
Module . _extensions [ '.json' ] = function ( module , filename ) {
738
- var content = fs . readFileSync ( filename , 'utf8' ) ;
753
+ const content = fs . readFileSync ( filename , 'utf8' ) ;
754
+
755
+ if ( manifest ) {
756
+ const moduleURL = pathToFileURL ( filename ) ;
757
+ manifest . assertIntegrity ( moduleURL , content ) ;
758
+ }
759
+
739
760
try {
740
761
module . exports = JSON . parse ( stripBOM ( content ) ) ;
741
762
} catch ( err ) {
@@ -747,6 +768,12 @@ Module._extensions['.json'] = function(module, filename) {
747
768
748
769
// Native extension for .node
749
770
Module . _extensions [ '.node' ] = function ( module , filename ) {
771
+ if ( manifest ) {
772
+ const content = fs . readFileSync ( filename ) ;
773
+ const moduleURL = pathToFileURL ( filename ) ;
774
+ manifest . assertIntegrity ( moduleURL , content ) ;
775
+ }
776
+ // be aware this doesn't use `content`
750
777
return process . dlopen ( module , path . toNamespacedPath ( filename ) ) ;
751
778
} ;
752
779
0 commit comments