1
0
mirror of https://github.com/weechat/weechat.git synced 2026-06-26 12:56:37 +02:00
Commit Graph

7506 Commits

Author SHA1 Message Date
Nils c6c420c698 relay: add completion resource 2025-01-05 14:54:07 +01:00
Sébastien Helleu cfe34388fb relay/api: bump version in OpenAPI document 2025-01-05 13:05:58 +01:00
Sébastien Helleu 3eaa1a3a6e relay/api: fix name of body field "buffer_name" in doc of POST /api/input 2025-01-05 10:36:04 +01:00
Sébastien Helleu de88cd3b58 core: fix typo in /help bar 2025-01-05 10:16:51 +01:00
Trygve Aaberge cab9496a70 python: define constants using PyModule_Add...Constant
This follows the recommendation from Pythons documentation for
PyModule_GetDict where it says:

    It is recommended extensions use other PyModule_* and PyObject_*
    functions rather than directly manipulate a module’s __dict__.
2025-01-05 10:03:07 +01:00
Trygve Aaberge c0c837b1be python: set m_size for created modules to 0
This value determines the size of the per-module memory area. Setting
this value to -1 as it was before this change means that the module has
global state and therefore does not support subinterpreters.

However, subinterpreters are used to run the Python scripts, so the
weechat module has to support subinterpreters. Therefore we should set
this value to 0 as no per-module memory is required.

This seems to fix the crash reported in #2046 without the need for the
workaround added in commit 85c7494dc (it does for me when testing with
Python 3.12.0 at least).

This change came up as a suggestion in cpython's issue tracker where it
was pointed out that using modules with m_size set to -1 is not
supported in subinterpreters. See these two comments:

https://github.com/python/cpython/issues/116510#issuecomment-2377915771
https://github.com/python/cpython/issues/116510#issuecomment-2389485369

It's not completely clear to me what is required for a module to support
subinterpreters and re-initialization (which is required for setting
m_size to 0), but https://peps.pythondiscord.com/pep-0489/ says:

    A simple rule of thumb is: Do not define any static data, except
    built-in types with no mutable or user-settable class attributes.

The only static data we define is of type int and str, so I think it
should be fine.
2025-01-05 09:27:38 +01:00
Sébastien Helleu d665e2d489 core: check "weechat" binary with command /upgrade
Always check that "weechat" binary exists and is executable with command
`/upgrade`, even when the path to binary is not given.
2025-01-04 18:08:19 +01:00
Sébastien Helleu 883c12dec2 relay: fix description of relay clients after /upgrade 2024-12-22 19:31:06 +01:00
Sébastien Helleu ad5fde5966 relay: fix crash after /upgrade when relay clients are connected 2024-12-22 19:31:04 +01:00
Sébastien Helleu 119664d090 api: allow to add empty buffer with function infolist_new_var_buffer
This fixes the following error with `/upgrade` command when relay clients are
connected:

  relay: failed to save upgrade data
2024-12-22 19:05:52 +01:00
Sébastien Helleu 9e34a0e917 core: add option POST_BUILD in add_custom_command
This fixes the following CMake warning:

CMake Warning (dev) at src/gui/curses/normal/CMakeLists.txt:73 (add_custom_command):
  Exactly one of PRE_BUILD, PRE_LINK, or POST_BUILD must be given.  Assuming
  POST_BUILD to preserve backward compatibility.

  Policy CMP0175 is not set: add_custom_command() rejects invalid arguments.
  Run "cmake --help-policy CMP0175" for policy details.  Use the cmake_policy
  command to set the policy and suppress this warning.
This warning is for project developers.  Use -Wno-dev to suppress it.
2024-12-21 18:02:43 +01:00
Sébastien Helleu befcd09d63 logger: fix path displayed when the logs directory can not be created 2024-12-21 17:15:38 +01:00
Sébastien Helleu 8aba934c50 xfer: replace calls to malloc by weechat_asprintf 2024-12-21 15:31:39 +01:00
Sébastien Helleu 3b88065266 trigger: replace calls to malloc by weechat_asprintf 2024-12-21 15:31:39 +01:00
Sébastien Helleu ce2c4b74a2 spell: replace calls to malloc by weechat_asprintf 2024-12-21 15:31:39 +01:00
Sébastien Helleu d3d0948e2e script: replace calls to malloc by weechat_asprintf 2024-12-21 15:31:39 +01:00
Sébastien Helleu 68dce2b47a ruby: replace call to malloc by weechat_asprintf 2024-12-21 15:31:39 +01:00
Sébastien Helleu b45d2105a5 relay: replace calls to malloc by weechat_asprintf 2024-12-21 15:31:39 +01:00
Sébastien Helleu 74c63c0541 python: replace calls to malloc by weechat_asprintf 2024-12-21 15:31:39 +01:00
Sébastien Helleu 770d87c3d6 plugin/script: replace calls to malloc by weechat_asprintf 2024-12-21 15:31:39 +01:00
Sébastien Helleu 099e11d7b8 perl: replace calls to malloc by weechat_asprintf 2024-12-21 15:12:33 +01:00
Sébastien Helleu 8af3a4cef8 lua: replace call to malloc by weechat_asprintf 2024-12-21 15:12:33 +01:00
Sébastien Helleu 7226b005e9 logger: replace calls to malloc by weechat_asprintf 2024-12-21 15:12:33 +01:00
Sébastien Helleu 45509e1cd1 irc: replace calls to malloc by weechat_asprintf 2024-12-21 15:12:33 +01:00
Sébastien Helleu cdb4823fad guile: replace call to malloc by weechat_asprintf 2024-12-21 15:12:33 +01:00
Sébastien Helleu 82f0b3b121 fset: replace calls to malloc by weechat_asprintf 2024-12-21 15:12:33 +01:00
Sébastien Helleu e6409355b6 fifo: replace call to malloc by weechat_asprintf 2024-12-21 15:12:33 +01:00
Sébastien Helleu e2675f5afe exec: replace calls to malloc by weechat_asprintf 2024-12-21 15:12:33 +01:00
Sébastien Helleu e6388c1d1a charset: replace call to malloc by weechat_asprintf 2024-12-21 15:12:33 +01:00
Sébastien Helleu 9779f56125 alias: replace calls to malloc by weechat_asprintf 2024-12-21 15:12:33 +01:00
Sébastien Helleu 818a4c95a9 core: replace calls to malloc by string_asprintf 2024-12-21 15:12:33 +01:00
zeromind 05c60a2292 perl: set locale only on supported Perl versions
restrict setting the locale only if the Perl version supports it (>=5.27.9)

fixes #2219
2024-12-20 07:34:20 +01:00
Sébastien Helleu 798c7a5262 core: fix parsing of command in /pipe command 2024-12-17 23:22:29 +01:00
Sébastien Helleu 732f24b6ba core: add command /pipe 2024-12-16 13:39:14 +01:00
Sergey Fedorov 33232f3f05 core-crypto.c: fix htobe64 for Darwin (closes #2216) 2024-12-13 13:04:37 +01:00
Trygve Aaberge a0b7220d23 script: don't try to display the old line if it's NULL
This fixes a crash which would happen if you scrolled the script buffer
and then did a search which got fewer search results than the index of
the selected line before the search. E.g. press page down to go to the
second page and then search for `test`.
2024-11-25 23:00:44 +01:00
Sébastien Helleu 48a92276e5 core: fix includes of wchar.h 2024-11-25 22:32:18 +01:00
Sébastien Helleu e483113345 perl: add midding #define of __USE_XOPEN to call wcwidth defined in wchar.h 2024-11-25 22:32:18 +01:00
Trygve Aaberge 107650d7d7 perl: only set Perl locale if the locale is broken
It turns out that Debian has reverted the commit in Perl that broke the
locale in their 5.38 branch, so it did not have the issue. However, the
workaround we added to fix the locale apparently makes the version
Debian/Ubuntu has crash on perl_destruct. I'm not sure why it makes it
crash, but since it doesn't crash on newer Perl versions, I'm assuming
that it's another bug with the locale handling in that Perl version.

To avoid the crash, make sure to only set the locale if we detect that
it has been broken by Perl. We do this by checking if the value returned
by wcwidth (160) (the first non-ascii printable character) has changed.
If this value is not the same after the call to perl_construct, the
locale has been broken.

I moved the call to Perl_setlocale to right after perl_construct, as the
call to perl_construct is what breaks the locale.
2024-11-25 21:22:21 +01:00
Trygve Aaberge 9250d769fd Fix crash when unloading Perl scripts with Perl 5.38
Apparently the issue with the locale being reset with Perl 5.38 can
cause a crash when unloading the scripts on some systems (at least
Ubuntu 24.04). There was a workaround added in commit f4b9cad72, but it
doesn't work to avoid the crash. However if we set LC_ALL instead of
LC_CTYPE the crash doesn't occur.

Fixes #2187
2024-11-24 16:21:32 +01:00
Trygve Aaberge ca07c03bf3 relay/api: combine request headers with the same name
If a request repeats the same header name multiple times, merge the
header values into a comma separated string. Previously, only the last
header specified would be used.

For header fields that are defined as a comma-separated list, a client
may choose to send it as multiple headers instead of one header with
comma-separated values. The specification says that these are
equivalent, so we can therefore join the headers into a comma-separated
string.

This is specified at https://datatracker.ietf.org/doc/html/rfc7230#section-3.2.2
which says:

    A sender MUST NOT generate multiple header fields with the same field
    name in a message unless either the entire field value for that
    header field is defined as a comma-separated list [i.e., #(values)]
    or the header field is a well-known exception (as noted below).

    A recipient MAY combine multiple header fields with the same field
    name into one "field-name: field-value" pair, without changing the
    semantics of the message, by appending each subsequent field value to
    the combined field value in order, separated by a comma.  The order
    in which header fields with the same field name are received is
    therefore significant to the interpretation of the combined field
    value; a proxy MUST NOT change the order of these field values when
    forwarding a message.
2024-11-24 16:15:35 +01:00
Trygve Aaberge bd7c503e7b relay/api: support passing auth in sub protocol header
The API for connecting to WebSockets in browsers unfortunately doesn't
support setting any Authorization header. This means that before this
commit it was impossible to connect to the API relay from a web browser.
The only thing that can be set apart from the URL is the
Sec-WebSocket-Protocol header. Therefore this allows you to send the
auth token in this header.

This is a weird way to send auth, but it seems to be the best one that
makes it possible for browsers to connect. Kubernetes also does it this
way: https://github.com/kubernetes/kubernetes/pull/47740

Here is a post describing the different ways to make it possible for a
browser to authenticate against a websocket connection, and it also
recommends doing it this way:
https://stackoverflow.com/questions/4361173/http-headers-in-websockets-client-api/77060459#77060459

Note that when this header is used to pass auth, the client also needs
to specify the `api.weechat` sub protocol. This is because the client
and server have to agree on a sub protocol when this header is
specified, and in order to not send the fake protocol used for auth back
to the client, we require specifying the protocol `api.weechat`, which
the server then returns to the client. This is only necessary when the
Sec-WebSocket-Protocol header is used. If the Authorization header is
used for auth as before, nothing changes.
2024-11-24 16:00:25 +01:00
Sébastien Helleu 328aa8f202 core, plugins: abort upgrade immediately if any upgrade file fails to be written
Detail of changes:

- the save of upgrade files in plugins is now done as soon as the "upgrade"
  signal is received, and not when the plugin is unloaded (it was too late to
  detect any problem and prevent the upgrade to happen)
- if the write of an upgrade file fails, the signal callback in plugin now
  returns WEECHAT_RC_ERROR and WeeChat checks this code to stop the upgrade as
  soon as this return code is received
- a new flag is added in plugin structure: unload_with_upgrade, it is set to 1
  before unloading all plugins when upgrade will happen (all *.upgrade files
  are then already successfully written).
2024-11-24 10:29:32 +01:00
Sébastien Helleu 244595d94f api: add support of flags in functions hook_signal_send and hook_hsignal_send
For now the only supported flag is:

- "stop_on_error": stop execution of callbacks immediately after an
  error (ie return code of callback is WEECHAT_RC_ERROR) and return this code
  (by default execute all callbacks and return the last return code, or return
  WEECHAT_RC_EAT immediately if a callback returns this)

Example:

  hook_signal_send("[flags:stop_on_error]my_signal", WEECHAT_HOOK_SIGNAL_STRING, "test");
2024-11-24 10:29:32 +01:00
Sébastien Helleu 61d7a4c678 core: add message with /debug hooks command when /upgrade is not possible due to running hooks 2024-11-24 09:59:34 +01:00
Sébastien Helleu 7184d34371 irc: add infos "irc_ptr_server", "irc_ptr_channel" and "irc_ptr_nick" 2024-11-20 21:53:29 +01:00
Sébastien Helleu 9a8010eead core: fix translation of keys in options
This fixes French description of key options in docs.
2024-11-20 18:23:49 +01:00
Sébastien Helleu 93646c0b24 core: add optional hook types in command /debug hooks 2024-11-13 07:35:02 +01:00
Sébastien Helleu 5ddd786332 core: add completion "hook_types" 2024-11-12 22:15:16 +01:00
Sébastien Helleu 6e19e9d8b2 core: remove use of arraylist in function gui_buffer_merge 2024-11-04 18:39:54 +01:00