Skip to content
This repository has been archived by the owner on Jun 11, 2024. It is now read-only.

Uncaught TypeError in checkProtocolVersionCompatibility P2P validation method #3923

Closed
diego-G opened this issue Jul 4, 2019 · 1 comment

Comments

@diego-G
Copy link

diego-G commented Jul 4, 2019

Actual behavior

  1) Integration tests for P2P library
       Partially connected network which becomes fully connected: All nodes launch at the same time. The seedPeers list of each node contains the next node in the sequence. Discovery interval runs multiple times.
         P2P.send
           P2P.send when peers are at different heights
             should send messages to peers within the network with updated heights; should reach multiple peers with even distribution:
     Uncaught TypeError: Cannot read property 'split' of undefined
      at Object.exports.checkProtocolVersionCompatibility (src/validation.ts:1:25373)
      at P2P.exports.checkPeerCompatibility [as _peerHandshakeCheck] (src/validation.ts:1:25910)
      at SCServer._scServer.on.socket (src/p2p.ts:1:65590)
      at /Users/diego-g/git/lisk-sdk/elements/lisk-p2p/node_modules/socketcluster-server/scserver.js:578:14
      at /Users/diego-g/git/lisk-sdk/elements/lisk-p2p/node_modules/socketcluster-server/scserver.js:378:7
      at Object.module.exports [as verify] (node_modules/jsonwebtoken/verify.js:43:12)
      at AuthEngine.verifyToken (node_modules/sc-auth/index.js:15:11)
      at SCServer._processAuthToken (node_modules/socketcluster-server/scserver.js:334:13)
      at /Users/diego-g/git/lisk-sdk/elements/lisk-p2p/node_modules/socketcluster-server/scserver.js:536:12
      at /Users/diego-g/git/lisk-sdk/elements/lisk-p2p/node_modules/socketcluster-server/scserver.js:889:9
      at /Users/diego-g/git/lisk-sdk/elements/lisk-p2p/node_modules/async/dist/async.js:1110:9
      at /Users/diego-g/git/lisk-sdk/elements/lisk-p2p/node_modules/async/dist/async.js:460:16
      at replenish (node_modules/async/dist/async.js:977:25)
      at /Users/diego-g/git/lisk-sdk/elements/lisk-p2p/node_modules/async/dist/async.js:986:9
      at _asyncMap (node_modules/async/dist/async.js:1103:5)
      at /Users/diego-g/git/lisk-sdk/elements/lisk-p2p/node_modules/async/dist/async.js:1189:16
      at /Users/diego-g/git/lisk-sdk/elements/lisk-p2p/node_modules/async/dist/async.js:1016:16
      at Object.<anonymous> (node_modules/async/dist/async.js:227:20)
      at Object.<anonymous> (node_modules/async/dist/async.js:89:12)
      at apply (node_modules/async/dist/async.js:20:25)
      at Object.<anonymous> (node_modules/async/dist/async.js:56:12)
      at Object.<anonymous> (node_modules/async/dist/async.js:232:23)
      at apply (node_modules/async/dist/async.js:21:25)
      at Object.applyEachSeries (node_modules/async/dist/async.js:56:12)
      at SCServer._passThroughHandshakeSCMiddleware (node_modules/socketcluster-server/scserver.js:867:9)
      at SCServerSocket.<anonymous> (node_modules/socketcluster-server/scserver.js:525:10)
      at SCServerSocket.on (node_modules/component-emitter/index.js:65:8)
      at SCServerSocket.Emitter.emit (node_modules/component-emitter/index.js:133:20)
      at /Users/diego-g/git/lisk-sdk/elements/lisk-p2p/node_modules/socketcluster-server/scserversocket.js:165:38
      at SCServer._passThroughMiddleware (node_modules/socketcluster-server/scserver.js:801:7)
      at SCServer.verifyInboundEvent (node_modules/socketcluster-server/scserver.js:695:8)
      at SCServerSocket._handleEventObject (node_modules/socketcluster-server/scserversocket.js:149:19)
      at WebSocket.<anonymous> (node_modules/socketcluster-server/scserversocket.js:118:14)
      at Receiver.receiverOnMessage (node_modules/socketcluster-server/node_modules/ws/lib/websocket.js:741:20)
      at Receiver.dataMessage (node_modules/socketcluster-server/node_modules/ws/lib/receiver.js:417:14)
      at Receiver.getData (node_modules/socketcluster-server/node_modules/ws/lib/receiver.js:347:17)
      at Receiver.startLoop (node_modules/socketcluster-server/node_modules/ws/lib/receiver.js:133:22)
      at Receiver._write (node_modules/socketcluster-server/node_modules/ws/lib/receiver.js:69:10)
      at doWrite (_stream_writable.js:410:12)
      at writeOrBuffer (_stream_writable.js:394:5)
      at Receiver.Writable.write (_stream_writable.js:294:11)
      at Socket.socketOnData (node_modules/socketcluster-server/node_modules/ws/lib/websocket.js:816:35)
      at addChunk (_stream_readable.js:284:12)
      at readableAddChunk (_stream_readable.js:265:11)
      at Socket.Readable.push (_stream_readable.js:220:10)
      at TCP.onStreamRead [as onread] (internal/stream_base_commons.js:94:17)

Steps to reproduce

npm run test:integration

Which version(s) does this affect? (Environment, OS, etc...)

2.0.0

@jondubois
Copy link
Contributor

In our case, this issue should not happen in production because our nodeInfo.protocolVersion is always set but it should be fixed anyway to prevent regression.

I found another related issue in that part of the code though:

const peerHardForks = parseInt(peerInfo.protocolVersion.split('.')[0], 10);

At the moment we do not guarantee that peerInfo.protocolVersion is a string.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

2 participants