Skip to content
Snippets Groups Projects
  1. Oct 09, 2022
  2. Oct 08, 2022
    • Deucе's avatar
      Fix warning anywhere netwrap.h is included before sockwrap.h · 4c8e2639
      Deucе authored
      sbbs3/../xpdev/netwrap.h:45:27: warning: 'parseIPv6Address' has C-linkage specified, but returns incomplete type 'struct in6_addr' which could be incompatible with C [-Wreturn-type-c-linkage]
      DLLEXPORT struct in6_addr parseIPv6Address(const char*);
                                ^
      4c8e2639
    • Deucе's avatar
      Update to new Coverity Scan, fix new High impact issues · d7096512
      Deucе authored
      New Medium impact and a low impact issue still needs to be triaged.
      d7096512
    • Rob Swindell's avatar
      When user hangs-up on external programs on *nix, try to terminate w/SIGTERM · e1f93e5c
      Rob Swindell authored
      Previously, when a user disconnected or ran out of time while running a
      stdio-based external program on *nix, if the program was still running, we'd
      send it a SIGHUP, wait up to 10 seconds for the process to terminate and if
      it did not, terminate it (ungracefully) with SIGKILL. Since some programs
      catch SIGTERM (and not SIGHUP) to indicate a termination request, we now will
      first attempt a SIGHUP, wait up to 5 seconds for the process to terminate and
      if it does not, then send a SIGTERM and wait up to another 5 seconds for it
      to terminate and if it doesn't, then finally send it a SIGKILL (which cannot
      be caught and always results in an ungraceful termination of the child
      process).
      
      This doesn't resolve any specific problem with any specific stdio-based
      external program, but I was playing around with ESR's port of Adventure
      (https://gitlab.com/esr/open-adventure) and a new auto-save/restore of game
      state and noticed that we weren't using SIGTERM for this situation, though we
      should have. Most modern programs, if they catch SIGHUP at all, use it to
      indicate a refresh of configuration or data files, not a termination request
      (or indication that a user has "hung up"). So SIGTERM is more reasonable to be
      expected to be caught and initiate the graceful termination of the child
      program that we're hoping for.
      e1f93e5c
  3. Oct 04, 2022
  4. Sep 16, 2022
  5. Sep 11, 2022
    • Rob Swindell's avatar
      viewfile() now uses case-corrected file path · be622038
      Rob Swindell authored
      Sometimes files uploaded may have the wrong case in the filebase (a different
      unresolved issue), but for instances where that has happened, make those files
      viewable in sbbs. This really only impacts target OSes with case-sensitive
      file systems (e.g. *nix).
      be622038
  6. Sep 03, 2022
  7. Aug 22, 2022
  8. Aug 13, 2022
  9. Aug 11, 2022
  10. Aug 10, 2022
  11. Aug 04, 2022
  12. Aug 03, 2022
    • Rob Swindell's avatar
      Check max_files value in extract_files_from_archive() better · 5a441656
      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.   
      5a441656
  13. Jul 14, 2022
  14. Jul 10, 2022
  15. Jul 08, 2022
  16. Jul 07, 2022
  17. Jul 05, 2022
  18. Jul 04, 2022
  19. Jul 03, 2022
    • Rob Swindell's avatar
      Paranoia around use of smb.subnum as an index into scfg.sub[] · b8035cae
      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.
      b8035cae
    • Rob Swindell's avatar
      Fix smb.subnum corruption in writemsg() · 3da1fa6c
      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!
      3da1fa6c
    • Rob Swindell's avatar
      Use mouse button release rather than press to activate a hotspot · 48b40607
      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.
      48b40607
  20. Jul 02, 2022
  21. Jun 28, 2022
  22. Jun 26, 2022
  23. Jun 25, 2022
Loading