Skip to content

Natively compiled modules (sqlite3 and bcrypt) crash electron 2 #13061

@artemave

Description

@artemave

We're using electron-mocha to run full stack web app tests. After an attempt to upgrade electron to the latest (2.0.2) version, tests started to fail with the this error:

     Error: Method bytesRead called on incompatible receiver #<Pipe>
TypeError: Method bytesRead called on incompatible receiver #<Pipe>
    at Function.getOwnPropertyDescriptor (<anonymous>)
    at names.map (/home/runner/booking-services/node_modules/electron/dist/resources/electron.asar/browser/rpc-server.js:35:29)
    at Array.map (<anonymous>)
    at getObjectMembers (/home/runner/booking-services/node_modules/electron/dist/resources/electron.asar/browser/rpc-server.js:34:16)
    at getObjectPrototype (/home/runner/booking-services/node_modules/electron/dist/resources/electron.asar/browser/rpc-server.js:52:14)
    at valueToMeta (/home/runner/booking-services/node_modules/electron/dist/resources/electron.asar/browser/rpc-server.js:95:18)
    at EventEmitter.<anonymous> (/home/runner/booking-services/node_modules/electron/dist/resources/electron.asar/browser/rpc-server.js:387:25)
    at emitThree (events.js:136:13)
    at EventEmitter.emit (events.js:217:7)
    at WebContents.<anonymous> (/home/runner/booking-services/node_modules/electron/dist/resources/electron.asar/browser/api/web-contents.js:295:13)
      at Object.exception (/home/runner/booking-services/node_modules/electron/dist/resources/electron.asar/renderer/api/remote.js:209:30)
      at metaToValue (/home/runner/booking-services/node_modules/electron/dist/resources/electron.asar/renderer/api/remote.js:213:28)
      at Object.descriptor.get [as _handle] (/home/runner/booking-services/node_modules/electron/dist/resources/electron.asar/renderer/api/remote.js:132:16)
      at /home/runner/booking-services/node_modules/sqlite3/node_modules/set-blocking/index.js:3:16
      at Array.forEach (<anonymous>)
      at module.exports (/home/runner/booking-services/node_modules/sqlite3/node_modules/set-blocking/index.js:2:36)
      at Object.<anonymous> (/home/runner/booking-services/node_modules/sqlite3/node_modules/npmlog/log.js:11:1)
      at Object.<anonymous> (/home/runner/booking-services/node_modules/sqlite3/node_modules/npmlog/log.js:311:3)
      at Module._compile (module.js:642:30)
      at Object.Module._extensions..js (module.js:653:10)
      at Module.load (module.js:561:32)
      at tryModuleLoad (module.js:504:12)
      at Function.Module._load (module.js:496:3)
      at Module.require (module.js:586:17)
      at require (internal/module.js:11:18)
      at Object.<anonymous> (/home/runner/booking-services/node_modules/sqlite3/node_modules/node-pre-gyp/lib/node-pre-gyp.js:16:11)
      at Object.<anonymous> (/home/runner/booking-services/node_modules/sqlite3/node_modules/node-pre-gyp/lib/node-pre-gyp.js:205:3)
      at Module._compile (module.js:642:30)
      at Object.Module._extensions..js (module.js:653:10)
      at Module.load (module.js:561:32)
      at tryModuleLoad (module.js:504:12)
      at Function.Module._load (module.js:496:3)
      at Module.require (module.js:586:17)
      at require (internal/module.js:11:18)
      at Object.<anonymous> (/home/runner/booking-services/node_modules/sqlite3/lib/sqlite3.js:1:107)
      at Object.<anonymous> (/home/runner/booking-services/node_modules/sqlite3/lib/sqlite3.js:190:3)
      at Module._compile (module.js:642:30)
      at Object.Module._extensions..js (module.js:653:10)
      at Module.load (module.js:561:32)
      at tryModuleLoad (module.js:504:12)
      at Function.Module._load (module.js:496:3)
      at Module.require (module.js:586:17)
      at require (internal/module.js:11:18)
      at module.exports (/home/runner/booking-services/node_modules/sworm/optionalRequire.js:3:12)
      at module.exports (/home/runner/booking-services/node_modules/sworm/sqliteDriver.js:7:16)
      at Object.connect (/home/runner/booking-services/node_modules/sworm/index.js:592:21)
      at Object.whenConnected (/home/runner/booking-services/node_modules/sworm/index.js:521:21)
      at Object.query (/home/runner/booking-services/node_modules/sworm/index.js:490:19)
      at Driver.setOptions (/home/runner/booking-services/node_modules/sworm-schema/lib/drivers/sqlite.js:6:12)
      at Driver.deleteFromTables (/home/runner/booking-services/node_modules/sworm-schema/lib/driver.js:93:31)
      at SwormSchema.clean (/home/runner/booking-services/node_modules/sworm-schema/lib/SwormSchema.js:32:24)
      at TropicsDb.create (/home/runner/booking-services/test/support/system/tropicsDb/index.js:29:30)
      at System.start (/home/runner/booking-services/test/support/system/index.js:241:27)
      at WebApiTropicsDbTropicsBookingAssembly.startSystem (/home/runner/booking-services/test/services/assemblies/webAssembly.js:36:23)

This particular stacktrace is coming from sqlite3, but I had the exact same error coming from bcrypt (before I swapped bcrypt for bcryptjs in an attempt to work around the problem). Both of those have native extensions (we're use electron-rebuild for compiling native extensions for electron).

The error points to a tiny module called set-blocking. Line 3, col 16:
image

  • Electron Version: 2.0.2
  • Operating System (Platform and Version): OSX 10.13.4 and Ubuntu 14.04
  • Last known working Electron version: 1.8.2

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions