1'use strict'; 2const common = require('../common'); 3if (!common.hasCrypto) { common.skip('missing crypto'); } 4const assert = require('assert'); 5const { generateKeyPair } = require('crypto'); 6 7if (common.isWindows) { 8 // Remove this conditional once the libuv change is in Node.js. 9 common.skip('crashing due to https://github.com/libuv/libuv/pull/2983'); 10} 11 12// Regression test for a race condition: process.exit() might lead to OpenSSL 13// cleaning up state from the exit() call via calling its destructor, but 14// running OpenSSL operations on another thread might lead to them attempting 15// to initialize OpenSSL, leading to a crash. 16// This test crashed consistently on x64 Linux on Node v14.9.0. 17 18generateKeyPair('rsa', { 19 modulusLength: 2048, 20 privateKeyEncoding: { 21 type: 'pkcs1', 22 format: 'pem' 23 } 24}, (err/* , publicKey, privateKey */) => { 25 assert.ifError(err); 26}); 27 28setTimeout(() => process.exit(), common.platformTimeout(10)); 29