1
0
mirror of https://github.com/profanity-im/profanity.git synced 2024-07-21 18:24:14 -04:00
Commit Graph

7389 Commits

Author SHA1 Message Date
Michael Vetter
9ef05f4185
Merge pull request #1933 from H3rnand3zzz/fix/wrong-encoding-error-flood-python-plugins
Improve string convertion error handling
2023-11-22 12:42:17 +01:00
John Hernandez
db96d13453
Improve string convertion error handling
Before the change, profanity has shown
`TypeError: prof_pre_chat_message_display() missing 3 required positional arguments: 'barejid',
           'resource', and 'message'`
error for received messages with incorrect encoding
instead of proper error handling for string convertion.

That is a temporary fix, correct fix probably would be
passing potentially problematic char* as `bytes` (using `y` instead of `s` format),
but this would require API changes and hence correction of plugins to
handle new input parameters properly (likely with "decode" function).

A bit hard to reproduce. You need to add a plugin with the following code
(or any other plugin with `prof_pre_chat_message_display` present, such as emoticons.py):
```python
def prof_pre_chat_message_display(barejid, resource, message):
    return message
```

and then receive/send message with incorrectly encoded character, it can be any
invalid UTF8 symbol. You'll see error in console, errors don't represent actual
errors in plugins, but rather Profanity's shortcoming, though it make appear so
that the problem is in plugin.

Actual proper handling would likely be using `y` instead of `s` format
(see [reference](https://docs.python.org/3/c-api/arg.html#c.Py_BuildValue))

> s ([str](https://docs.python.org/3/library/stdtypes.html#str) or None) [const char *]
>    Convert a null-terminated C string to a Python [str](https://docs.python.org/3/library/stdtypes.html#str)
object using 'utf-8' encoding. If the C string pointer is NULL, None is used.

to

> y ([bytes](https://docs.python.org/3/library/stdtypes.html#bytes)) [const char *]
>     This converts a C string to a Python [bytes](https://docs.python.org/3/library/stdtypes.html#bytes)
> object. If the C string pointer is NULL, None is returned.

since there is a [problem](https://docs.python.org/3/c-api/arg.html) with `s`:
> s ([str](https://docs.python.org/3/library/stdtypes.html#str)) [const char *]
>    Convert a Unicode object to a C pointer to a character string.
> A pointer to an existing string is stored in the character pointer variable whose address you pass.
> ... Unicode objects are converted to C strings using 'utf-8' encoding.
> **If this conversion fails**, a [UnicodeError](https://docs.python.org/3/library/exceptions.html#UnicodeError) is raised.

In python such problem can be handled using `errors='ignore'` in [bytes.decode](https://docs.python.org/3/library/stdtypes.html#bytes.decode) or in a more sophisticated manner, depending on needs and realization.
2023-11-22 09:29:31 +01:00
Michael Vetter
dc8776e285
Merge pull request #1912 from H3rnand3zzz/feature/dynamic-statusbar
Add new mode for statusbar tab behaviour
2023-11-20 15:20:21 +01:00
John Hernandez
917558dc87
Separate new tabmode in a setting
Return static tabmode as default,
separate previous change in `dynamic` mode.

Despite usefulness of the solution,
it was not approved to be a new default.

Vote (link below) amongst users to change default
has shown inconclusive result and it was not representative,
as it had low number of participants.
https://github.com/profanity-im/profanity/pull/1912#issuecomment-1816232546
2023-11-20 15:03:59 +01:00
John Hernandez
619309ad9b
Fix pagination in statusbar
This commit changes the current behaviour which displays always the first
tabs until `maxtabs` to display N tabs around the currently selected tab.

So if we are having a maxtab of 1 and the actively selected window is 2,
then 2 is displayed only.

So far we have only displayed `>` to indicate that there are more windows.
Since this PR shifts the range of tabs that are displayed we also add `<`
indicator now to indicate windows to the left of the currently displayed.

Fix https://github.com/profanity-im/profanity/issues/1283
Fix https://github.com/profanity-im/profanity/issues/1764
2023-11-20 15:02:58 +01:00
Michael Vetter
8ba248c87e
Merge pull request #1918 from H3rnand3zzz/fix/plugins-pre-display
Fix `prof_pre_chat_message_display` does not replace sent messages + minor refactoring
2023-11-20 11:27:45 +01:00
Michael Vetter
e143513f20
Merge pull request #1932 from H3rnand3zzz/cleanup/refactor-conf-string-list
Fix mem leak in `conf_string_list_add`
2023-11-20 11:27:20 +01:00
John Hernandez
bd2821fafa
Fix mem leak in conf_string_list_add
Introduced in 1cf7973245
Issue reported and fix proposed by @sjaeckel
2023-11-17 21:13:32 +01:00
Michael Vetter
62e1de0f51
Merge pull request #1931 from H3rnand3zzz/feature/redraw-command
Introduce `/redraw` command
2023-11-14 14:02:47 +01:00
John Hernandez
a1ff88caae Introduce /redraw command
`/redraw` command allows resolve problem for usual users,
as well as developers.

Incredibly useful when debugging with something that
can trash out the output, like GDB.

Not to mention many asynchronous commands that can break the UI
at any point.
2023-11-14 13:32:37 +01:00
Michael Vetter
7718990c08
Merge pull request #1924 from H3rnand3zzz/fix/unintended-exits
Fix unintended exits on some commands
2023-11-14 12:49:42 +01:00
Michael Vetter
9bc68eaab3
Merge pull request #1930 from H3rnand3zzz/cleanup/inputwin
Minor `inputwin.c` refactoring/cleanup
2023-11-14 12:46:03 +01:00
John Hernandez
3dcca35f34 Minor inputwin.c refactoring/cleanup
Function `inp_nonblocking` is changed
to fetch the `inpbloc` pref only once.

`inp_win_resize` cleaned up a bit.
2023-11-13 12:09:38 +01:00
Michael Vetter
08d2a51ae4
Merge pull request #1927 from H3rnand3zzz/feature/print-newline-char
Handle alt+enter as newline char
2023-11-13 09:46:05 +01:00
Michael Vetter
740c209a0d
Merge pull request #1926 from H3rnand3zzz/fix/mam-dupe-stanza-id-flood
Do not check for unique `stanza-id` for MAM messages
2023-11-13 09:41:06 +01:00
John Hernandez
dac6d0c4f8 Handle alt+enter as newline char
Let user print newline character using alt+enter keybind,
it allows great flexibility in communication,
now user will be able to write much better longer messages.
2023-11-13 09:40:04 +01:00
John Hernandez
d3566b1203 Do not check for unique stanza-id for MAM messages
Since we might have MAM messages already received earlier
it doesn't make sense to require unique stanza-ids there.
Fix https://github.com/profanity-im/profanity/issues/1925.
2023-11-13 09:34:53 +01:00
Michael Vetter
e8101aad6b
Merge pull request #1920 from H3rnand3zzz/cleanup/refactor-conf-string-list
Minor `config/conflists.c` refactoring
2023-11-13 09:34:13 +01:00
Michael Vetter
80ab0505e2
Merge pull request #1923 from H3rnand3zzz/cleanup/test-file
Format `test_cmd_otr.c`
2023-11-13 09:33:25 +01:00
John Hernandez
b19f668392 Fix: add plugins_pre_chat_message_display call for outgoing messages
Ensure consistent invocation of `plugins_pre_chat_message_display`
for outgoing messages. Before the change, the function was not
called for sent messages upon sending, but only on fetching
sent messages from DB.

Fix https://github.com/profanity-im/profanity/issues/1917
2023-11-11 22:21:50 +01:00
John Hernandez
16ed7cc187 Refactor plugins_pre_chat_message_display for Memory Management
Refactor function to enhance memory handling, addressing
temporary workaround introduced in 2e0adbd. Adjustments
ensure cleaner code and maintainability.

Part of the improvements suggested by @sjaeckel.
2023-11-11 22:21:04 +01:00
John Hernandez
1c02239ef6 Fix unintended exits on some commands
On some commands execution (like `/privacy logging X`
where X is any symbol/group of symbols)
FALSE is being returned.
Which main cycle understands as a signal to exit profanity.
The mistake is common since returns are often used by
developers to communicate success status.

First reported by @doctor in the Profanity MUC,
as exit on `/logging group color` command.
2023-11-11 13:58:47 +01:00
John Hernandez
53db7562b5 Format test_cmd_otr.c 2023-11-11 10:04:38 +01:00
John Hernandez
1cf7973245 Minor config/conflists.c refactoring
Refactor functions `conf_string_list_add`, `conf_string_list_remove`:
simplify the logic, improve readability and avoid unnecessary allocations.
2023-11-11 08:41:00 +01:00
Michael Vetter
bba8278bb7 Fix passing of wrong parameter to cmd executable template function
`/executable vcard_photo test`

Printed
`Invalid usage, see '/help card_photo' for details.`

So it used the subcommand instead of the command and lost one of the
letters as well.

This mistake got introduced in 60c197487.
Where we added helper functions for the various `/executable` functions.

Discovered by @H3rnand3zzz with correct solution.

Fix https://github.com/profanity-im/profanity/issues/1921
2023-11-10 23:01:27 +01:00
Michael Vetter
74178806a8
Merge pull request #1919 from H3rnand3zzz/patch-1
Fix double free crash
2023-11-10 22:12:31 +01:00
Michael Vetter
1d3378a583
Merge pull request #1922 from H3rnand3zzz/fix/plugins-install-follow-redirect
Allow redirects for  `/plugins install` and add emptiness check for downloaded files
2023-11-10 22:10:31 +01:00
John Hernandez
092b5530b2 Add emptiness check for /url save and /plugins install
Empty file is not a normal condition for file downloading,
thus user has to be notifed.

Related to https://github.com/profanity-im/profanity/issues/1901
2023-11-10 20:05:01 +01:00
John Hernandez
30fe5f0fb9 Allow redirects for '/plugins install <URL>
Fix https://github.com/profanity-im/profanity/issues/1901
Suggested by @jubalh
2023-11-10 20:04:04 +01:00
John Hernandez
76aee1625c
Fix double free crash
Double free was introduced earlier in a cleanup commit
865a056315

It was reported earlier by me and then by @jubalh https://github.com/profanity-im/profanity/issues/1901
2023-11-10 12:39:26 +01:00
Michael Vetter
9741f192a0
Merge pull request #1916 from H3rnand3zzz/fix/null-message
Improve handling of NULL pointers fetched from DB
2023-11-07 15:56:40 +01:00
John Hernandez
bc38ddf8fa Improve handling of NULL pointers in DB
Fix crash that occurs when message fetched from the database is NULL.

Introduced in this commit
89dc7a46f1

Previous fix attempt
6d17b4eeb5
2023-11-07 14:09:58 +01:00
Michael Vetter
6d17b4eeb5
Merge pull request #1915 from profanity-im/fix-db-string-ops
Handle potential NULL pointers in database
2023-11-07 12:03:23 +01:00
Steffen Jaeckel
a99dda9a97 Handle potential NULL pointers in database
Follow-up of 89dc7a46f1 resp. #1902

Signed-off-by: Steffen Jaeckel <jaeckel-floss@eyet-services.de>
2023-11-07 11:27:17 +01:00
Michael Vetter
45fe1be58f
Merge pull request #1902 from H3rnand3zzz/feature/improved-history
Change DB structure
2023-11-06 22:41:36 +01:00
Michael Vetter
9370be54d9
Merge pull request #1914 from profanity-im/init-auto-types
Ensure instances of auto types are initialized
2023-11-06 22:36:10 +01:00
Steffen Jaeckel
4c26462827 Ensure instances of auto types are initialized
Follow-up of #1913

Signed-off-by: Steffen Jaeckel <jaeckel-floss@eyet-services.de>
2023-11-06 22:22:35 +01:00
John Hernandez
a671cff964 Improve XEP-0308 compliance
Disallow correcting historical MUC messages, as the XEP-308 requires.

Previous changes introduce problem with
"Illicit LMC attempt from conference@server/user for message from user"

During investigation it was revealed that XEP does not recommend support
of historical MUC messages correction.

```
When used in a Multi-User Chat (XEP-0045) context,
corrections must not be allowed (by the receiver)
for messages received before the sender joined the room -
particularly a full JID leaving the room
then rejoining and correcting a message SHOULD be disallowed,
as the entity behind the full JID in the MUC may have changed.
```
https://xmpp.org/extensions/xep-0308.html#rules

XEP details mentioned by @jubalh
Bug discovered and solution improved by  @jaeckel
2023-11-06 22:04:53 +01:00
Michael Vetter
716c068325
Merge pull request #1913 from profanity-im/fix-omemo-fingerprint-crash
Fix `/omemo fingerprint` crashing in a MUC
2023-11-06 19:39:25 +01:00
Steffen Jaeckel
0449a42e5c Fix /omemo fingerprint crashing in a MUC
Reported by a user in the profanity MUC.

Fixup of e1d137f4e6 resp. #1863

Signed-off-by: Steffen Jaeckel <jaeckel-floss@eyet-services.de>
2023-11-06 19:29:25 +01:00
John Hernandez
89dc7a46f1 Improve Database: Replace Empty Strings with NULL Values
Enhance data consistency by updating the database to treat empty
strings as NULL values. This change simplifies queries and improves
overall database integrity.
2023-11-06 18:20:39 +01:00
Michael Vetter
83fdd9b8d6
Merge pull request #1910 from H3rnand3zzz/fix/show-char-dry-and-db
Show encryption for historical messages
2023-11-06 16:40:52 +01:00
John Hernandez
d89b5a04fa Change DB stucture, improve LMC behaviour
**Please, backup your DB before performing any testing.**

Introduce new DB structure and DB migration mechanism.
Index `timestamp`, `to_jid`, `from_jid` columns to improve performance.
Add trigger for `replaced_by_db_id` calculation by DB on message insert.

Now LMC messages are interconnected with original messages,
this way we have fast access to last (hence correct) applicable edits,
as well as reference to the original message from any edit (in case of chained edits).

Change the way LMC messages are being displayed. Now we check if we
can replace a message from current buffer. If we don't have a message in
the buffer, it might've been lost, but we can still display it as a
new message.

Further information available here:
https://github.com/profanity-im/profanity/pull/1893
https://github.com/profanity-im/profanity/issues/1899
https://github.com/profanity-im/profanity/pull/1902
2023-11-03 20:32:01 +01:00
John Hernandez
7af0e9b1e1 Show encryption for historical messages
Refactor getting char, introduce get_show_char() to follow DRY principle.

In theory, performance might be negatively affected after this change.

Ideally get_show_char should be optimized in the future.
2023-11-03 11:27:30 +01:00
Michael Vetter
0b957d6207
Merge pull request #1909 from H3rnand3zzz/fix/correction-char
Add unicode support for correction char
2023-11-03 09:38:58 +01:00
John Hernandez
8e40ca1470 Add unicode support for correction char
Commit to allow unicode support in omemo/pgp/otr chars misses
adding support to set correction character.
1f8b1eb740

Further fixing commit also misses adding support to set the unicode character,
it only adds ability to display unicode correction character in the settings.
5cf6ee15cf6ee1bc6d0b99b01891bc455a657bf022a72b0
2023-11-03 09:21:00 +01:00
Michael Vetter
11e78e0c3d
Merge pull request #1908 from ike08/improvement/cmocka-test-runner
Refactor tests to use the new cmocka test runner
2023-11-02 09:42:21 +01:00
ike08
d35a7a7f7e Refactor tests to use the new cmocka test runner
## Summary

Fixes https://github.com/profanity-im/profanity/issues/1907  

Update functional and unit test code to comply with the current cmocka test runner.  

## Changes

- `UnitTest` struct to `CMUnitTest` struct
- `unit_test()` macro to `cmocka_unit_test(f)` macro
- `unit_test_setup_teardown()` macro to `cmocka_unit_test_setup_teardown` macro
- `run_tests()` macro to `cmocka_run_group_tests()` function
- Setup and teardown functions return `int` instead of `void`

## Testing

### Unit Tests

`make check`

### Functional Tests

I did not compile or run functional tests because they are *shelved* for now.

### Valgrind

I'm not entirely sure how to fun Valgrind in this case. I did not do fancy memory management, so it should be fine.
2023-11-01 18:30:08 -06:00
Michael Vetter
21fc8f641e
Merge pull request #1906 from profanity-im/fix-1731
Fix loading of encryption type
2023-10-30 17:02:58 +01:00
Steffen Jaeckel
1d41a328f1 Fix loading of encryption type
The column of the encryption type in the result is 4, not 3.

Fixup of 6375b2719f

Signed-off-by: Steffen Jaeckel <jaeckel-floss@eyet-services.de>
2023-10-30 16:06:37 +01:00