From 5e88675b2fde128750ef346d85e15b7eb657016a Mon Sep 17 00:00:00 2001
From: Weijia Wang <381152119@qq.com>
Date: Fri, 17 Aug 2018 16:33:45 +0800
Subject: [PATCH] buffer: move process.binding('buffer') to internalBinding

---
 lib/buffer.js                                                | 2 +-
 lib/internal/bootstrap/node.js                               | 3 ++-
 lib/internal/buffer.js                                       | 2 +-
 lib/internal/encoding.js                                     | 2 +-
 lib/internal/errors.js                                       | 2 +-
 lib/internal/util/comparisons.js                             | 2 +-
 lib/v8.js                                                    | 2 +-
 src/node_buffer.cc                                           | 2 +-
 .../test-stringbytes-external-at-max.js                      | 4 +++-
 .../test-stringbytes-external-exceed-max-by-1-ascii.js       | 4 +++-
 .../test-stringbytes-external-exceed-max-by-1-base64.js      | 4 +++-
 .../test-stringbytes-external-exceed-max-by-1-binary.js      | 5 +++--
 .../test-stringbytes-external-exceed-max-by-1-hex.js         | 4 +++-
 .../test-stringbytes-external-exceed-max-by-1-utf8.js        | 4 +++-
 .../test-stringbytes-external-exceed-max-by-2.js             | 4 +++-
 .../test-stringbytes-external-exceed-max.js                  | 4 +++-
 test/parallel/test-buffer-fill.js                            | 5 +++--
 test/parallel/test-internal-errors.js                        | 4 +++-
 .../test-process-binding-internalbinding-whitelist.js        | 1 +
 test/parallel/test-process-binding.js                        | 4 +++-
 test/sequential/test-fs-readfile-tostring-fail.js            | 4 +++-
 21 files changed, 46 insertions(+), 22 deletions(-)

diff --git a/lib/buffer.js b/lib/buffer.js
index c7ffa42a5487cb..af69f43735f26f 100644
--- a/lib/buffer.js
+++ b/lib/buffer.js
@@ -36,7 +36,7 @@ const {
   swap64: _swap64,
   kMaxLength,
   kStringMaxLength
-} = process.binding('buffer');
+} = internalBinding('buffer');
 const { isAnyArrayBuffer } = internalBinding('types');
 const {
   customInspectSymbol,
diff --git a/lib/internal/bootstrap/node.js b/lib/internal/bootstrap/node.js
index 2f638555ee28ce..f53ed55dcadb4a 100644
--- a/lib/internal/bootstrap/node.js
+++ b/lib/internal/bootstrap/node.js
@@ -413,7 +413,8 @@
         'url',
         'spawn_sync',
         'js_stream',
-        'zlib']);
+        'zlib',
+        'buffer']);
     process.binding = function binding(name) {
       return internalBindingWhitelist.has(name) ?
         internalBinding(name) :
diff --git a/lib/internal/buffer.js b/lib/internal/buffer.js
index 3ea34af59e2072..61bdced4d63a58 100644
--- a/lib/internal/buffer.js
+++ b/lib/internal/buffer.js
@@ -1,6 +1,6 @@
 'use strict';
 
-const binding = process.binding('buffer');
+const binding = internalBinding('buffer');
 const {
   ERR_BUFFER_OUT_OF_BOUNDS,
   ERR_INVALID_ARG_TYPE,
diff --git a/lib/internal/encoding.js b/lib/internal/encoding.js
index b2448144b0854a..77eca99202d033 100644
--- a/lib/internal/encoding.js
+++ b/lib/internal/encoding.js
@@ -29,7 +29,7 @@ const {
 
 const {
   encodeUtf8String
-} = process.binding('buffer');
+} = internalBinding('buffer');
 
 var Buffer;
 function lazyBuffer() {
diff --git a/lib/internal/errors.js b/lib/internal/errors.js
index 58eba742e08685..e8f1ed1a42ebce 100644
--- a/lib/internal/errors.js
+++ b/lib/internal/errors.js
@@ -20,7 +20,7 @@ const {
   UV_EAI_NODATA,
   UV_EAI_NONAME
 } = internalBinding('uv');
-const { kMaxLength } = process.binding('buffer');
+const { kMaxLength } = internalBinding('buffer');
 const { defineProperty } = Object;
 
 // Lazily loaded
diff --git a/lib/internal/util/comparisons.js b/lib/internal/util/comparisons.js
index 3641f0cdc23cc4..9adffea09a14c5 100644
--- a/lib/internal/util/comparisons.js
+++ b/lib/internal/util/comparisons.js
@@ -1,6 +1,6 @@
 'use strict';
 
-const { compare } = process.binding('buffer');
+const { compare } = internalBinding('buffer');
 const { isArrayBufferView } = require('internal/util/types');
 const {
   isAnyArrayBuffer,
diff --git a/lib/v8.js b/lib/v8.js
index 1cba0464b1be67..b29304de5c08dc 100644
--- a/lib/v8.js
+++ b/lib/v8.js
@@ -20,7 +20,7 @@ const {
   Serializer: _Serializer,
   Deserializer: _Deserializer
 } = internalBinding('serdes');
-const { copy } = process.binding('buffer');
+const { copy } = internalBinding('buffer');
 const { objectToString } = require('internal/util');
 const { FastBuffer } = require('internal/buffer');
 
diff --git a/src/node_buffer.cc b/src/node_buffer.cc
index e3a1515d6a3550..19841336e99a26 100644
--- a/src/node_buffer.cc
+++ b/src/node_buffer.cc
@@ -1104,4 +1104,4 @@ void Initialize(Local<Object> target,
 }  // namespace Buffer
 }  // namespace node
 
-NODE_BUILTIN_MODULE_CONTEXT_AWARE(buffer, node::Buffer::Initialize)
+NODE_MODULE_CONTEXT_AWARE_INTERNAL(buffer, node::Buffer::Initialize)
diff --git a/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-at-max.js b/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-at-max.js
index 4c074773a21fc2..820f71ec9e7a01 100644
--- a/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-at-max.js
+++ b/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-at-max.js
@@ -1,6 +1,8 @@
 'use strict';
+// Flags: --expose-internals
 
 const common = require('../../common');
+const { internalBinding } = require('internal/test/binding');
 const skipMessage = 'intensive toString tests due to memory confinements';
 if (!common.enoughTestMem)
   common.skip(skipMessage);
@@ -10,7 +12,7 @@ const assert = require('assert');
 
 // v8 fails silently if string length > v8::String::kMaxLength
 // v8::String::kMaxLength defined in v8.h
-const kStringMaxLength = process.binding('buffer').kStringMaxLength;
+const kStringMaxLength = internalBinding('buffer').kStringMaxLength;
 
 let buf;
 try {
diff --git a/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-exceed-max-by-1-ascii.js b/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-exceed-max-by-1-ascii.js
index c7cf1319e7c57c..7f5a8347956e43 100644
--- a/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-exceed-max-by-1-ascii.js
+++ b/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-exceed-max-by-1-ascii.js
@@ -1,6 +1,8 @@
 'use strict';
+// Flags: --expose-internals
 
 const common = require('../../common');
+const { internalBinding } = require('internal/test/binding');
 const skipMessage = 'intensive toString tests due to memory confinements';
 if (!common.enoughTestMem)
   common.skip(skipMessage);
@@ -9,7 +11,7 @@ const binding = require(`./build/${common.buildType}/binding`);
 
 // v8 fails silently if string length > v8::String::kMaxLength
 // v8::String::kMaxLength defined in v8.h
-const kStringMaxLength = process.binding('buffer').kStringMaxLength;
+const kStringMaxLength = internalBinding('buffer').kStringMaxLength;
 
 let buf;
 try {
diff --git a/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-exceed-max-by-1-base64.js b/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-exceed-max-by-1-base64.js
index 920124e897de32..d7fe26814f7b24 100644
--- a/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-exceed-max-by-1-base64.js
+++ b/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-exceed-max-by-1-base64.js
@@ -1,6 +1,8 @@
 'use strict';
+// Flags: --expose-internals
 
 const common = require('../../common');
+const { internalBinding } = require('internal/test/binding');
 const skipMessage = 'intensive toString tests due to memory confinements';
 if (!common.enoughTestMem)
   common.skip(skipMessage);
@@ -9,7 +11,7 @@ const binding = require(`./build/${common.buildType}/binding`);
 
 // v8 fails silently if string length > v8::String::kMaxLength
 // v8::String::kMaxLength defined in v8.h
-const kStringMaxLength = process.binding('buffer').kStringMaxLength;
+const kStringMaxLength = internalBinding('buffer').kStringMaxLength;
 
 let buf;
 try {
diff --git a/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-exceed-max-by-1-binary.js b/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-exceed-max-by-1-binary.js
index e4edd32797c2af..7e75ba1246662c 100644
--- a/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-exceed-max-by-1-binary.js
+++ b/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-exceed-max-by-1-binary.js
@@ -1,7 +1,8 @@
-// Flags: --expose-gc
+// Flags: --expose-gc --expose-internals
 'use strict';
 
 const common = require('../../common');
+const { internalBinding } = require('internal/test/binding');
 const skipMessage = 'intensive toString tests due to memory confinements';
 if (!common.enoughTestMem)
   common.skip(skipMessage);
@@ -11,7 +12,7 @@ const assert = require('assert');
 
 // v8 fails silently if string length > v8::String::kMaxLength
 // v8::String::kMaxLength defined in v8.h
-const kStringMaxLength = process.binding('buffer').kStringMaxLength;
+const kStringMaxLength = internalBinding('buffer').kStringMaxLength;
 
 let buf;
 try {
diff --git a/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-exceed-max-by-1-hex.js b/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-exceed-max-by-1-hex.js
index 18fb46e0df95b8..57242399bb02b9 100644
--- a/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-exceed-max-by-1-hex.js
+++ b/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-exceed-max-by-1-hex.js
@@ -1,6 +1,8 @@
 'use strict';
+// Flags: --expose-internals
 
 const common = require('../../common');
+const { internalBinding } = require('internal/test/binding');
 const skipMessage = 'intensive toString tests due to memory confinements';
 if (!common.enoughTestMem)
   common.skip(skipMessage);
@@ -9,7 +11,7 @@ const binding = require(`./build/${common.buildType}/binding`);
 
 // v8 fails silently if string length > v8::String::kMaxLength
 // v8::String::kMaxLength defined in v8.h
-const kStringMaxLength = process.binding('buffer').kStringMaxLength;
+const kStringMaxLength = internalBinding('buffer').kStringMaxLength;
 
 let buf;
 try {
diff --git a/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-exceed-max-by-1-utf8.js b/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-exceed-max-by-1-utf8.js
index 5f7221b591e8ac..4a0908290c1926 100644
--- a/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-exceed-max-by-1-utf8.js
+++ b/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-exceed-max-by-1-utf8.js
@@ -1,6 +1,8 @@
 'use strict';
+// Flags: --expose-internals
 
 const common = require('../../common');
+const { internalBinding } = require('internal/test/binding');
 const skipMessage = 'intensive toString tests due to memory confinements';
 if (!common.enoughTestMem)
   common.skip(skipMessage);
@@ -10,7 +12,7 @@ const assert = require('assert');
 
 // v8 fails silently if string length > v8::String::kMaxLength
 // v8::String::kMaxLength defined in v8.h
-const kStringMaxLength = process.binding('buffer').kStringMaxLength;
+const kStringMaxLength = internalBinding('buffer').kStringMaxLength;
 
 let buf;
 try {
diff --git a/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-exceed-max-by-2.js b/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-exceed-max-by-2.js
index 751c864bace06a..3c613a69fd3fcd 100644
--- a/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-exceed-max-by-2.js
+++ b/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-exceed-max-by-2.js
@@ -1,6 +1,8 @@
 'use strict';
+// Flags: --expose-internals
 
 const common = require('../../common');
+const { internalBinding } = require('internal/test/binding');
 const skipMessage = 'intensive toString tests due to memory confinements';
 if (!common.enoughTestMem)
   common.skip(skipMessage);
@@ -10,7 +12,7 @@ const assert = require('assert');
 
 // v8 fails silently if string length > v8::String::kMaxLength
 // v8::String::kMaxLength defined in v8.h
-const kStringMaxLength = process.binding('buffer').kStringMaxLength;
+const kStringMaxLength = internalBinding('buffer').kStringMaxLength;
 
 let buf;
 try {
diff --git a/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-exceed-max.js b/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-exceed-max.js
index e46b5f24cce028..be571c5059ef8f 100644
--- a/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-exceed-max.js
+++ b/test/addons/stringbytes-external-exceed-max/test-stringbytes-external-exceed-max.js
@@ -1,6 +1,8 @@
 'use strict';
+// Flags: --expose-internals
 
 const common = require('../../common');
+const { internalBinding } = require('internal/test/binding');
 const skipMessage = 'intensive toString tests due to memory confinements';
 if (!common.enoughTestMem)
   common.skip(skipMessage);
@@ -9,7 +11,7 @@ const binding = require(`./build/${common.buildType}/binding`);
 
 // v8 fails silently if string length > v8::String::kMaxLength
 // v8::String::kMaxLength defined in v8.h
-const kStringMaxLength = process.binding('buffer').kStringMaxLength;
+const kStringMaxLength = internalBinding('buffer').kStringMaxLength;
 
 let buf;
 try {
diff --git a/test/parallel/test-buffer-fill.js b/test/parallel/test-buffer-fill.js
index 3daaa91d8f1bad..6a0a8adb7ae2b9 100644
--- a/test/parallel/test-buffer-fill.js
+++ b/test/parallel/test-buffer-fill.js
@@ -3,6 +3,7 @@
 const common = require('../common');
 const assert = require('assert');
 const { codes: { ERR_OUT_OF_RANGE } } = require('internal/errors');
+const { internalBinding } = require('internal/test/binding');
 const SIZE = 28;
 
 const buf1 = Buffer.allocUnsafe(SIZE);
@@ -327,7 +328,7 @@ Buffer.alloc(8, '');
 // Testing process.binding. Make sure "start" is properly checked for -1 wrap
 // around.
 assert.strictEqual(
-  process.binding('buffer').fill(Buffer.alloc(1), 1, -1, 0, 1), -2);
+  internalBinding('buffer').fill(Buffer.alloc(1), 1, -1, 0, 1), -2);
 
 // Make sure "end" is properly checked, even if it's magically mangled using
 // Symbol.toPrimitive.
@@ -365,7 +366,7 @@ assert.strictEqual(
 // Testing process.binding. Make sure "end" is properly checked for -1 wrap
 // around.
 assert.strictEqual(
-  process.binding('buffer').fill(Buffer.alloc(1), 1, 1, -2, 1), -2);
+  internalBinding('buffer').fill(Buffer.alloc(1), 1, 1, -2, 1), -2);
 
 // Test that bypassing 'length' won't cause an abort.
 common.expectsError(() => {
diff --git a/test/parallel/test-internal-errors.js b/test/parallel/test-internal-errors.js
index 3a311819f9d9cd..7d5dcce0d40c6a 100644
--- a/test/parallel/test-internal-errors.js
+++ b/test/parallel/test-internal-errors.js
@@ -5,6 +5,8 @@ const {
   hijackStdout,
   restoreStdout,
 } = require('../common/hijackstdio');
+
+const { internalBinding } = require('internal/test/binding');
 const assert = require('assert');
 const errors = require('internal/errors');
 
@@ -183,7 +185,7 @@ assert.strictEqual(
   'Invalid asyncId value: undefined');
 
 {
-  const { kMaxLength } = process.binding('buffer');
+  const { kMaxLength } = internalBinding('buffer');
   const error = new errors.codes.ERR_BUFFER_TOO_LARGE();
   assert.strictEqual(
     error.message,
diff --git a/test/parallel/test-process-binding-internalbinding-whitelist.js b/test/parallel/test-process-binding-internalbinding-whitelist.js
index 56715799f88506..9cd12b54ea0f8a 100644
--- a/test/parallel/test-process-binding-internalbinding-whitelist.js
+++ b/test/parallel/test-process-binding-internalbinding-whitelist.js
@@ -15,3 +15,4 @@ assert(process.binding('contextify'));
 assert(process.binding('url'));
 assert(process.binding('spawn_sync'));
 assert(process.binding('js_stream'));
+assert(process.binding('buffer'));
diff --git a/test/parallel/test-process-binding.js b/test/parallel/test-process-binding.js
index 3715826bb27615..05bb0e6aa07d41 100644
--- a/test/parallel/test-process-binding.js
+++ b/test/parallel/test-process-binding.js
@@ -1,6 +1,8 @@
 'use strict';
+// Flags: --expose-internals
 require('../common');
 const assert = require('assert');
+const { internalBinding } = require('internal/test/binding');
 
 assert.throws(
   function() {
@@ -9,4 +11,4 @@ assert.throws(
   /No such module: test/
 );
 
-process.binding('buffer');
+internalBinding('buffer');
diff --git a/test/sequential/test-fs-readfile-tostring-fail.js b/test/sequential/test-fs-readfile-tostring-fail.js
index c5ed8559103d77..8dcab75e0fb119 100644
--- a/test/sequential/test-fs-readfile-tostring-fail.js
+++ b/test/sequential/test-fs-readfile-tostring-fail.js
@@ -1,6 +1,8 @@
 'use strict';
+// Flags: --expose-internals
 
 const common = require('../common');
+const { internalBinding } = require('internal/test/binding');
 
 if (!common.enoughTestMem)
   common.skip('intensive toString tests due to memory confinements');
@@ -9,7 +11,7 @@ const assert = require('assert');
 const fs = require('fs');
 const path = require('path');
 const cp = require('child_process');
-const kStringMaxLength = process.binding('buffer').kStringMaxLength;
+const kStringMaxLength = internalBinding('buffer').kStringMaxLength;
 if (common.isAIX && (Number(cp.execSync('ulimit -f')) * 512) < kStringMaxLength)
   common.skip('intensive toString tests due to file size confinements');