|
25 | 25 | const common = require('../common'); |
26 | 26 | const assert = require('assert'); |
27 | 27 | const { internalBinding } = require('internal/test/binding'); |
28 | | -const { JSStream } = internalBinding('js_stream'); |
| 28 | +const JSStream = process.binding('js_stream').JSStream; |
29 | 29 | const util = require('util'); |
30 | 30 | const vm = require('vm'); |
31 | 31 | const { previewEntries } = internalBinding('util'); |
@@ -1737,3 +1737,30 @@ assert.strictEqual( |
1737 | 1737 | '[ 3, 2, 1, [Symbol(a)]: false, [Symbol(b)]: true, a: 1, b: 2, c: 3 ]' |
1738 | 1738 | ); |
1739 | 1739 | } |
| 1740 | + |
| 1741 | +// Manipulate the prototype to one that we can not handle. |
| 1742 | +{ |
| 1743 | + let obj = { a: true }; |
| 1744 | + let value = (function() { return function() {}; })(); |
| 1745 | + Object.setPrototypeOf(value, null); |
| 1746 | + Object.setPrototypeOf(obj, value); |
| 1747 | + assert.strictEqual(util.inspect(obj), '{ a: true }'); |
| 1748 | + |
| 1749 | + obj = { a: true }; |
| 1750 | + value = []; |
| 1751 | + Object.setPrototypeOf(value, null); |
| 1752 | + Object.setPrototypeOf(obj, value); |
| 1753 | + assert.strictEqual(util.inspect(obj), '{ a: true }'); |
| 1754 | +} |
| 1755 | + |
| 1756 | +// Check that the fallback always works. |
| 1757 | +{ |
| 1758 | + const obj = new Set([1, 2]); |
| 1759 | + const iterator = obj[Symbol.iterator]; |
| 1760 | + Object.setPrototypeOf(obj, null); |
| 1761 | + Object.defineProperty(obj, Symbol.iterator, { |
| 1762 | + value: iterator, |
| 1763 | + configurable: true |
| 1764 | + }); |
| 1765 | + assert.strictEqual(util.inspect(obj), '[Set: null prototype] { 1, 2 }'); |
| 1766 | +} |
0 commit comments