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