create_unique_id() was changed to use UUIDs instead of a counter in the
last commit. Since now it depends on connection_create_uuid() which is
in the xmpp subfolder the function should also be moved there.
Renamed it to connection_create_stanza_id() and moved it to
src/xmpp/connection.c.
Discussion happened in https://github.com/boothj5/profanity/pull/1010
In most get-like funcitons libstrophe returns pointer to a string
that resides in an internal structure (e.g. xmpp_stanza_t). Hence,
Profanity must not change such strings. Define respective variables
as 'const char*' to reduce a chance of error and conform future
libstrophe's interface.
This patch mostly replaces 'char *' with 'const char*', but also
fixes two memory leaks after stanza_get_reason(). Add comment within
stanza_get_reason() to fix conflict with different allocator types.
A user providing an invalid JID when creating a new bookmark (like 'foo')
would reproducibly crash/segfault profanity, as it insists on checking
string length behind the @ of the JID. However, it could be NULL
if the user accidentally omitted it.
The patch avoids the crash by NULL-checking and prevents
getting there in the first place by checking the argument to "add".
Backtrace of unpatched profanity with above command:
Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_INVALID_ADDRESS at address: 0x0000000000000000
0x00007fff85699732 in strlen ()
(gdb) bt
#0 0x00007fff85699732 in strlen ()
#1 0x00000001000965d2 in xmpp_strdup ()
#2 0x0000000100095d6d in xmpp_stanza_set_attribute ()
#3 0x0000000100011c5c in _send_bookmarks ()
#4 0x00000001000115a8 in _bookmark_add ()
#5 0x000000010003320d in cmd_bookmark ()
#6 0x000000010002a0f2 in cmd_execute ()
#7 0x0000000100003a1d in process_input ()
#8 0x00000001000037c7 in prof_run ()
#9 0x0000000100045032 in main ()
(gdb)