freenode / jbnc

IRC Bouncer with no registration/setup required written in nodejs with support for separate client buffers and always-on.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

An error occurred at 1:36 a.m., which I couldn't correct

Madriix opened this issue · comments

Hi, there was a crash at 1:36 AM, and PM2 restarted everything right after. Here's the error:

TypeError: Cannot create property 'mobile' on boolean 'false'
    at ClientReconnect.init (/home/debian/node/jbnc/lib/ClientReconnect.js:22:54)
    at new ClientReconnect (/home/debian/node/jbnc/lib/ClientReconnect.js:8:10)
    at Server.clientReconnect (/home/debian/node/jbnc/lib/Server.js:734:16)
    at TLSSocket.<anonymous> (/home/debian/node/jbnc/lib/Server.js:331:58)
    at TLSSocket.emit (node:events:518:28)
    at addChunk (node:internal/streams/readable:559:12)
    at readableAddChunkPushByteMode (node:internal/streams/readable:510:3)
    at Readable.push (node:internal/streams/readable:390:5)
    at TLSWrap.onStreamRead (node:internal/stream_base_commons:190:23)

dragon||AJFiej2fn2345/irc.dal.net:6667||somepassword/mobile
or
dragon||AJFiej2fn2345/irc.dal.net:6667/mobile

In the entire code, I can't find any occurrence of the word 'mobile'; it seems to be related to the PASS command.

If I can't find it, I'll have to uncomment 'uncaughtException,' which is a shame because it's the first time it has crashed and there's only one mobile error. Rare bug.

That's very confusing. Is the client connecting somehow with 'mobile' in their connection?

I would try to reproduce the bug by replacing "dragon||AJFiej2fn2345/irc.dal.net:6667||somepassword/mobile" with "mobile" and making other test it. Otherwise, I don't know how to reproduce the bug. Maybe I need to bring the computer and then connect with the mobile; I will also try that.

I manage to reproduce the bug. Just do this:

  1. Open 2 different JBNC servers, one with a connected nickname (example: Testor on the dedicated server)
  2. Then turn on your JBNC on the PC and also put "Testor" it will say that your nickname is already taken, do not disconnect, it will put this:
[03:37:45] * Connecting to 127.0.0.1 (8888)
[03:37:45] -irc.d.com- *** Looking up your hostname...
[03:37:45] -irc.d.com- *** Found your hostname (cached)
[03:37:45] Le nickname (Carly) est déjà utilisé.
[03:37:45] Le nickname (.) est erroné.
[03:37:45] You are now logged in as Carly.
[03:37:45] SASL authentication successful
[03:37:45] -*jbnc- *** No CAPabilities available. ***
[03:37:45] -*jbnc- *** No CAPabilities available. ***

Wait a few seconds for it to make this error:

[03:38:16] Closing Link: [127.0.0.1] (Registration Timeout)
[03:38:16] * Disconnected
[03:38:17] * Connect cancelled

Immediately log in, and there is this error:

[03:39:09] * Connecting to 127.0.0.1 (8888)
[03:39:09] * [10053] Software caused connection abort
[03:39:09] * Disconnected

and :

C:\Users\Mcdo\Documents\GitHub\jbncdev\lib\ClientReconnect.js:22
        this.connection.buffers[socket.clientbuffer] = { data: '', connected: true, privmsgnotice: [] };
                                                     ^

TypeError: Cannot create property 'mobile' on boolean 'false'

The error seems to be fixed. I've deployed it to production for tomorrow. I'll check if everything's okay : a550d20

The error recurred last night, 3 times in 5 minutes, presumably by the same user. The error even triggered again this morning at 6:05 AM, where it seems to have occurred 5 times in 20 minutes, likely by the same user, but there's no certainty if it's the same user as yesterday.

The error resembles what I fixed here #79 for the events 433 ERR_NICKNAMEINUSE and 451 ERR_NOTREGISTERED. It just requires placing a "connection end()" in the right place.

I'm not familiar with many events where "end()" would need to be placed, except for:

  • At the time of quit (/quit)
  • ERROR (kill etc.)
  • 433 ERR_NICKNAMEINUSE
  • 451 ERR_NOTREGISTERED
  • The "gone" with the settimeout()

It seems like "end()" should be placed in a location where the connection has been registered in the array, but in reality, the client disconnected before or couldn't establish the connection, yet it remains registered in the "array" without being able to connect to it.

The error could also occur due to something like:

  • Forbidden nickname
  • Error in /PASS (incorrect or missing)

It could also be a missing raw in jbnc.

Here's the current error:

1714449963 # Serious problem (uncaughtException) - this should not happen but the JBNC is still running. TypeError: Cannot create property 'mobile' on boolean 'false'
    at ClientReconnect.init (/home/debian/node/jbnc/lib/ClientReconnect.js:24:54)
    at new ClientReconnect (/home/debian/node/jbnc/lib/ClientReconnect.js:8:10)
    at Server.clientReconnect (/home/debian/node/jbnc/lib/Server.js:739:16)
    at TLSSocket.<anonymous> (/home/debian/node/jbnc/lib/Server.js:335:58)
    at TLSSocket.emit (node:events:518:28)
    at addChunk (node:internal/streams/readable:559:12)
    at readableAddChunkPushByteMode (node:internal/streams/readable:510:3)
    at Readable.push (node:internal/streams/readable:390:5)
    at TLSWrap.onStreamRead (node:internal/stream_base_commons:190:23)

The bug occurs when reproducing the following steps:

  1. Change the nickname (for example: Nick|AFK).
  2. Then, the user gets g-lined. The error occurs as soon as they attempt to reconnect. Furthermore, when trying to reconnect, it doesn't work immediately; they have to refresh the web page with the applet.

The bug does not occur if the person has reverted to their initial nickname, which is Nick before getting gline.