- Aug 10, 2022
-
-
Rob Swindell authored
-
Rob Swindell authored
-
- Aug 04, 2022
-
-
Rob Swindell authored
When there are no chat action sets or an action set has been deleted, bad things would happen (e.g. segfault) when listing chat channels.
-
Rob Swindell authored
To be more consistent in syntax and include more details (e.g. the command being invoked).
-
- Aug 03, 2022
-
-
Rob Swindell authored
Address issue reported by Nightfox via DOVE-Net: Today I was using the Archive class to extract exactly one file from a zip file, and I'm a little confused on the exception throwing behavior regarding the max_files parameter. When calling extract(), I gave it a filename pattern and expected exactly 1 file to be extracted, so I also gave a max_files argument as 1. It extracted the one file, but it threw an exception with the error "Error: maximum number of files (1) extracted (after extracting 1 item successfully)". Should that be an error condition to throw an exception? I expected 1 file to be extracted, and that file was extracted successfully. If I specify max_files as 2, then it doesn't throw an exception.
-
- Jul 14, 2022
-
-
Rob Swindell authored
1. It's a non-printable char 2. It's the Telnet IAC byte value 3. CNF files use this as an "uninitialized value" indicator
-
Rob Swindell authored
-
- Jul 10, 2022
-
-
Rob Swindell authored
Fixes issue #421
-
- Jul 08, 2022
-
-
Rob Swindell authored
As reported by cadeon on Vertrauen, Synchronet v3.19 hasn't worked on Windows XP due to error: 'The procedure entry point inet_ntop could not be located in the dynamic link library WS2_32.dll'
-
- Jul 07, 2022
-
-
Rob Swindell authored
-
Rob Swindell authored
-
Rob Swindell authored
I think this is what nelgin/Keyop was asking for via IRC.
-
Rob Swindell authored
-
Rob Swindell authored
If we detect a client disconnection and terminate DOSXTRN.EXE, don't try to open DOSXTRN.RET and log an error when the file doesn't exist (as would be expected).
-
Rob Swindell authored
Broken in commit 082a9fce 3 years ago, the 'H' (highest ranked) message listing was showing the rank of the message (e.g. 1-20) instead of the message number itself.
-
- Jul 05, 2022
-
-
Rob Swindell authored
Note: this centering logic does not know the expanded-size of the @-code, so use a fixed-length @-code (e.g. with padding) or use the 'C' @-code format modifier instead. Fix issue #418
-
Rob Swindell authored
Also, the logic to check if the user could even view deleted messages (on line 912) was wrong, replace with new method: can_view_deleted_msgs(). As requested by deon (ALTERANT).
-
- Jul 04, 2022
-
-
Rob Swindell authored
A single source of truth is now used for SBBS's mouse mode (MOUSE_MODE_ON). A JS script doesn't need to know what SBBS's preferred/default mouse-enabled mode flags are, just set to this property to "true". Setting to "false" is the same as setting to MOUSE_MODE_OFF (0).
-
- Jul 03, 2022
-
-
Rob Swindell authored
Use the is_valid_subnum() function before using the smb.subnum as an index into (s)cfg.sub[]. Related to the previous committed fix of writemsg(): leaving the global smb.subnum as -1 (INVALID_SUB) after replying to a post via email or netmail, resulting in a crash here.
-
Rob Swindell authored
Fix issue introduced 9 years ago that could cause a crash after replying to a post via email or netmail and then displaying the header of a poll message or a normal message with votes: Program terminated with signal SIGSEGV, Segmentation fault. #0 0x00007f9f9569a317 in sbbs_t::show_msg (this=0x7f9f70c56880, smb=0x7f9f70c5e4e0, msg=0x7f9ebadf08b0, p_mode=4, post=0x7f9f18071a24) at getmsg.cpp:255 255 ,cfg.sub[smb->subnum]->misc&SUB_ NAME ? useron.name : useron.alias, NET_NONE, NULL); [Current thread is 1 (Thread 0x7f9ebadf3700 (LWP 23279))] (gdb) print smb->subnum $1 = 4294967295 (gdb) bt #0 0x00007f9f9569a317 in sbbs_t::show_msg (this=0x7f9f70c56880, smb=0x7f9f70c5e4e0, msg=0x7f9ebadf08b0, p_mode=4, post=0x7f9f18071a24) at getmsg.cpp:255 #1 0x00007f9f957b2aee in sbbs_t::scanposts (this=0x7f9f70c56880, subnum=9, mode=2, find=0x7f9ebadf1270 "") at readmsgs.cpp:670 #2 0x00007f9f957bb75a in sbbs_t::scanallsubs (this=0x7f9f70c56880, mode=2) at scansubs.cpp:219 #3 0x00007f9f9568c948 in sbbs_t::exec_msg (this=0x7f9f70c56880, csi=0x7f9f70c64768) at execmsg.cpp:315 #4 0x00007f9f95683129 in sbbs_t::exec_function (this=0x7f9f70c56880, csi=0x7f9f70c64768) at execfunc.cpp:422 #5 0x00007f9f95679450 in sbbs_t::exec (this=0x7f9f70c56880, csi=0x7f9f70c64768) at exec.cpp:1199 #6 0x00007f9f9577d742 in node_thread (arg=0x7f9f70c56880) at main.cpp:4364 writemsg() was changing the global smb.subnum and when writing an email or netmail, that subnum value is -1 (since it's not a sub-board) and then later show_msg() is using the smb.subnum as a index into scfg.sub[] when determining if the current user already voted on the message being displayed and then: bang, crash, fall down, go boom. Simply saving and restoring the smb.subnum when executing an external editor is all that was needed here. And this is the first use of the C++ "auto" keyword in Synchronet!
-
Rob Swindell authored
As described in issue #412, when using extended mouse coordinate (SGR) mode, the mouse button release sequence would be received by the BBS after the hotspot-activated menu option was executed and then that button release sequence possibly passed through to the a child script or program that didn't know how to handle or ignore it. To resolve this, the BBS now ignores ("eats") the mouse button *press* sequence and only acts upon the mouse button *release* sequence. This is more aligned with how button-clicks work in mouse-control/GUI applications anyway.
-
- Jul 02, 2022
-
-
Rob Swindell authored
As requested. This closes issue #416
-
- Jun 28, 2022
-
-
Rob Swindell authored
-
- Jun 26, 2022
-
-
Rob Swindell authored
Address potential FAQ (issue #415)
-
Rob Swindell authored
In the mouse debug log output. Potentially helpful in debugging mouse related issues when using the SGR mouse reporting mode.
-
- Jun 25, 2022
-
-
Rob Swindell authored
-
Rob Swindell authored
-
Rob Swindell authored
Bug introduced in commit 440ccc80: iniSet* functions would write key/values to the end of the list when the root section (NULL) was specified, rather than the beginning of the list. The root section always starts at the beginning of the list/file, so I'm not sure why section_start() was doing anything other than returning 0 for the root section. It's possible this now breaks iniSortSections() in some way, so that should be retested with a file with a root section and named sections.
-
- Jun 17, 2022
-
-
Rob Swindell authored
Solves problem of status output lines being interleved with console output (e.g. from print()) after executing a script.
-
Rob Swindell authored
-
Rob Swindell authored
When using the "Access to Sub-directories" option for a library, the auto-created directories did not have their virtual sub-directory name set. Pretty sure this was introduced along with the http access to filebases after v3.19b. Also, only de-dupe the sub-directory names based on the directory name and not the code/code-suffix for now. Next up: auto-gen unique internal code when needed.
-
Rob Swindell authored
-
- Jun 15, 2022
-
-
Rob Swindell authored
-
Rob Swindell authored
-
Rob Swindell authored
By default, each file transfer directory's internal code suffix is used as the source of the sub-directory of the virtual path used to represent a file area in the FTP and Web servers. Now, a sysop can change that source to either each directory's short name or long name, if they prefer. For MRO, because he asked (on DOVE-Net).
-
Rob Swindell authored
-
- Jun 11, 2022
-
-
Rob Swindell authored
This exposes the Synchronet internal sbbs_t::progress() method used to display a progress indication bar, e.g. "[ Scanning 10.0% ]" with the bar backfill effect (when supported by the terminal).
-
Rob Swindell authored
This can be used to force a close of the user.dat file, if open. Rather than waiting for an out of scope User to get garbage-collected, this method could be used to force a close of the user.dat file, if it's open.
-
Rob Swindell authored
-
Rob Swindell authored
This is normally the first count value and even if we *just* output a progress() for a previous operation, we still want the first progress() call for the operation to display.
-