pidgin/pidgin

974dbfd7e52f
Parents d587dad11411
Children eae11ccb1bef
Remove and replace a number of the purple utility functions

Bump the minimum glib requirement to 2.52

Remove purple_fd_get_ip as it's not used and replace purple_uuid_random with g_uuid_string_random

Replace purple_utf8_salvage with g_utf8_make_valid.

Remove the purple_base16_* api as it was primarily used for md5 checksums that we don't do anymore.

Remove purple_restore_default_signal_handlers as it's not used anywhere.

Testing Done:
Compile only.

Reviewed at https://reviews.imfreedom.org/r/82/
--- a/ChangeLog.API Sat Aug 22 04:02:53 2020 -0500
+++ b/ChangeLog.API Sat Aug 22 04:03:26 2020 -0500
@@ -280,6 +280,7 @@
* purple_util_fetch_url_request now takes a length as the eighth
parameter
* purple_util_fetch_url_len now takes a length as the fifth parameter
+ * purple_uuid_random. Use g_uuid_string_random.
* PurpleWhiteboard is now a GObject. Please see the documentation for
details.
* purple_value_destroy is now purple_value_free
@@ -340,6 +341,7 @@
* purple_account_add_buddies_with_invite
* purple_account_add_buddy_with_invite
* purple_account_set_current_error
+ * purple_base16_*
* purple_base64_*. Use g_base64_* instead
* purple_blist_get_ui_data
* purple_blist_load
@@ -378,6 +380,7 @@
event loop yourself. See GLib Main Event Loop docs.
* PurpleEventLoopUiOps. Manually drive the GLib event loop
yourself. See GLib Main Event Loop docs.
+ * purple_fd_get_ip. Use GSocket instead.
* purple_get_host_name. Use g_get_host_name, instead.
* purple_get_tzoff_str(). Use g_date_time_format, instead.
* purple_ip_address_is_valid, purple_ipv4_address_is_valid, and
@@ -447,6 +450,7 @@
* pidgin_protocol_option_menu_new
* purple_proxy_connect_socks5
* purple_quotedp_decode. See the GMime library if needed.
+ * purple_restore_default_signal_handlers
* purple_request_certificate
* purple_request_field_list_add
* PurpleSoundUiOps
@@ -519,6 +523,7 @@
* purple_txt_cancel
* purple_txt_resolve_account
* PurpleType, use GType instead.
+ * purple_utf8_salvage. Use g_utf8_make_valid instead.
* purple_util_fetch_url_len. Use purple_util_fetch_url, instead.
* purple_util_fetch_url_request_len. Use
* purple_util_fetch_url_request, instead.
--- a/libpurple/account.c Sat Aug 22 04:02:53 2020 -0500
+++ b/libpurple/account.c Sat Aug 22 04:03:26 2020 -0500
@@ -720,8 +720,9 @@
child = purple_xmlnode_new_child(node, "description");
if(err->description) {
char *utf8ized = purple_utf8_try_convert(err->description);
- if(utf8ized == NULL)
- utf8ized = purple_utf8_salvage(err->description);
+ if(utf8ized == NULL) {
+ utf8ized = g_utf8_make_valid(err->description, -1);
+ }
purple_xmlnode_insert_data(child, utf8ized, -1);
g_free(utf8ized);
}
--- a/libpurple/log.c Sat Aug 22 04:02:53 2020 -0500
+++ b/libpurple/log.c Sat Aug 22 04:03:26 2020 -0500
@@ -1179,12 +1179,9 @@
to_free = txt;
/* g_markup_escape_text requires valid UTF-8 */
- if (!g_utf8_validate(txt, -1, NULL))
- {
- tmp = purple_utf8_salvage(txt);
- g_free(to_free);
- to_free = txt = tmp;
- }
+ tmp = g_utf8_make_valid(txt, -1);
+ g_free(to_free);
+ to_free = txt = tmp;
tmp = g_markup_escape_text(txt, -1);
g_free(to_free);
--- a/libpurple/protocols/facebook/api.c Sat Aug 22 04:02:53 2020 -0500
+++ b/libpurple/protocols/facebook/api.c Sat Aug 22 04:03:26 2020 -0500
@@ -1935,7 +1935,7 @@
}
if (priv->did == NULL) {
- priv->did = purple_uuid_random();
+ priv->did = g_uuid_string_random();
}
if (priv->mid == 0) {
--- a/libpurple/protocols/gg/roster.c Sat Aug 22 04:02:53 2020 -0500
+++ b/libpurple/protocols/gg/roster.c Sat Aug 22 04:03:26 2020 -0500
@@ -771,7 +771,7 @@
purple_debug_info("gg", "ggp_roster_send_update_group_add: adding %s\n",
purple_group_get_name(group));
- id = purple_uuid_random();
+ id = g_uuid_string_random();
group_node = purple_xmlnode_new_child(content->groups_node, "Group");
succ &= ggp_xml_set_string(group_node, "Id", id);
@@ -833,7 +833,7 @@
purple_debug_misc("gg", "ggp_roster_send_update_contact_update: "
"adding %u...\n", uin);
buddy_node = purple_xmlnode_new_child(content->contacts_node, "Contact");
- succ &= ggp_xml_set_string(buddy_node, "Guid", purple_uuid_random());
+ succ &= ggp_xml_set_string(buddy_node, "Guid", g_uuid_string_random());
succ &= ggp_xml_set_uint(buddy_node, "GGNumber", uin);
succ &= ggp_xml_set_string(buddy_node, "ShowName",
purple_buddy_get_alias(buddy));
--- a/libpurple/protocols/irc/cmds.c Sat Aug 22 04:02:53 2020 -0500
+++ b/libpurple/protocols/irc/cmds.c Sat Aug 22 04:03:26 2020 -0500
@@ -428,7 +428,7 @@
return 0;
max_privmsg_arg_len = IRC_MAX_MSG_SIZE - strlen(args[0]) - 64;
- salvaged = purple_utf8_salvage(args[1]);
+ salvaged = g_utf8_make_valid(args[1], -1);
cur = salvaged;
end = salvaged;
while (*end && *cur) {
--- a/libpurple/protocols/irc/irc.c Sat Aug 22 04:02:53 2020 -0500
+++ b/libpurple/protocols/irc/irc.c Sat Aug 22 04:03:26 2020 -0500
@@ -268,7 +268,7 @@
return 0;
if (purple_debug_is_verbose()) {
- gchar *clean = purple_utf8_salvage(tosend);
+ gchar *clean = g_utf8_make_valid(tosend, -1);
clean = g_strstrip(clean);
purple_debug_misc("irc", "<< %s\n", clean);
g_free(clean);
--- a/libpurple/protocols/irc/msgs.c Sat Aug 22 04:02:53 2020 -0500
+++ b/libpurple/protocols/irc/msgs.c Sat Aug 22 04:03:26 2020 -0500
@@ -160,7 +160,7 @@
* is. */
tmp = g_strndup(cur, end - cur);
- convname = purple_utf8_salvage(tmp);
+ convname = g_utf8_make_valid(tmp, -1);
g_free(tmp);
/* Check for an existing conversation */
@@ -182,7 +182,7 @@
}
/* We then print "numeric: remainder". */
- clean = purple_utf8_salvage(end);
+ clean = g_utf8_make_valid(end, -1);
tmp = g_strdup_printf("%.3s: %s", numeric, clean);
g_free(clean);
purple_conversation_write_system_message(convo, tmp,
@@ -193,7 +193,7 @@
undirected:
/* This, too, should be escaped somehow (smarter) */
- clean = purple_utf8_salvage(args[0]);
+ clean = g_utf8_make_valid(args[0], -1);
purple_debug(PURPLE_DEBUG_INFO, "irc", "Unrecognized message: %s\n", clean);
g_free(clean);
}
--- a/libpurple/protocols/irc/parse.c Sat Aug 22 04:02:53 2020 -0500
+++ b/libpurple/protocols/irc/parse.c Sat Aug 22 04:03:26 2020 -0500
@@ -289,7 +289,7 @@
if (encodings[0] == NULL) {
g_strfreev(encodings);
- return purple_utf8_salvage(string);
+ return g_utf8_make_valid(string, -1);
}
for (i = 0; encodings[i] != NULL; i++) {
@@ -311,7 +311,7 @@
}
g_strfreev(encodings);
- return purple_utf8_salvage(string);
+ return g_utf8_make_valid(string, -1);
}
/* This function is shamelessly stolen from glib--it is an old version of the
@@ -688,7 +688,7 @@
purple_signal_emit(_irc_protocol, "irc-receiving-text", gc, &input);
if (purple_debug_is_verbose()) {
- char *clean = purple_utf8_salvage(input);
+ char *clean = g_utf8_make_valid(input, -1);
clean = g_strstrip(clean);
purple_debug_misc("irc", ">> %s\n", clean);
g_free(clean);
@@ -754,7 +754,7 @@
* field has inadvertently been marked verbatim, this
* could cause weirdness. */
tmp = g_strndup(cur, end - cur);
- args[i] = purple_utf8_salvage(tmp);
+ args[i] = g_utf8_make_valid(tmp, -1);
g_free(tmp);
cur += end - cur;
break;
@@ -775,7 +775,7 @@
case '*':
/* Ditto 'v' above; we're going to salvage this in case
* it leaks past the IRC protocol */
- args[i] = purple_utf8_salvage(cur);
+ args[i] = g_utf8_make_valid(cur, -1);
cur = cur + strlen(cur);
break;
default:
@@ -809,7 +809,7 @@
char *clean;
/* This really should be escaped somehow that you can tell what
* the junk was -- but as it is, it can crash glib. */
- clean = purple_utf8_salvage(input);
+ clean = g_utf8_make_valid(input, -1);
purple_debug(PURPLE_DEBUG_WARNING, "irc", "Unrecognized string: %s\n", clean);
g_free(clean);
}
--- a/libpurple/protocols/jabber/google/google.c Sat Aug 22 04:02:53 2020 -0500
+++ b/libpurple/protocols/jabber/google/google.c Sat Aug 22 04:03:26 2020 -0500
@@ -149,7 +149,7 @@
JabberStream *js;
JabberChat *chat;
gchar *room;
- gchar *uuid = purple_uuid_random();
+ gchar *uuid = g_uuid_string_random();
g_return_if_fail(PURPLE_IS_BUDDY(node));
--- a/libpurple/protocols/silc/ops.c Sat Aug 22 04:02:53 2020 -0500
+++ b/libpurple/protocols/silc/ops.c Sat Aug 22 04:03:26 2020 -0500
@@ -333,7 +333,7 @@
const char *msg = (const char *)message;
char *salvaged = NULL;
if (!g_utf8_validate((const char *)message, -1, NULL)) {
- salvaged = purple_utf8_salvage((const char *)message);
+ salvaged = g_utf8_make_valid((const char *)message, -1);
msg = salvaged;
}
tmp = g_markup_escape_text(msg, -1);
@@ -414,7 +414,7 @@
const char *msg = (const char *)message;
char *salvaged = NULL;
if (!g_utf8_validate((const char *)message, -1, NULL)) {
- salvaged = purple_utf8_salvage((const char *)message);
+ salvaged = g_utf8_make_valid((const char *)message, -1);
msg = salvaged;
}
tmp = g_markup_escape_text(msg, -1);
--- a/libpurple/tests/test_util.c Sat Aug 22 04:02:53 2020 -0500
+++ b/libpurple/tests/test_util.c Sat Aug 22 04:03:26 2020 -0500
@@ -25,24 +25,6 @@
#include <purple.h>
/******************************************************************************
- * base 16 tests
- *****************************************************************************/
-static void
-test_util_base_16_encode(void) {
- gchar *in = purple_base16_encode((const guchar *)"hello, world!", 14);
- g_assert_cmpstr("68656c6c6f2c20776f726c642100", ==, in);
-}
-
-static void
-test_util_base_16_decode(void) {
- gsize sz = 0;
- guchar *out = purple_base16_decode("21646c726f77202c6f6c6c656800", &sz);
-
- g_assert_cmpint(sz, ==, 14);
- g_assert_cmpstr("!dlrow ,olleh", ==, (const gchar *)out);
-}
-
-/******************************************************************************
* filename escape tests
*****************************************************************************/
static void
@@ -514,11 +496,6 @@
main(gint argc, gchar **argv) {
g_test_init(&argc, &argv, NULL);
- g_test_add_func("/util/base/16/encode",
- test_util_base_16_encode);
- g_test_add_func("/util/base/16/decode",
- test_util_base_16_decode);
-
g_test_add_func("/util/filename/escape",
test_util_filename_escape);
g_test_add_func("/util/filename/unescape",
--- a/libpurple/util.c Sat Aug 22 04:02:53 2020 -0500
+++ b/libpurple/util.c Sat Aug 22 04:03:26 2020 -0500
@@ -65,97 +65,6 @@
}
/**************************************************************************
- * Base16 Functions
- **************************************************************************/
-gchar *
-purple_base16_encode(const guchar *data, gsize len)
-{
- gsize i;
- gchar *ascii = NULL;
-
- g_return_val_if_fail(data != NULL, NULL);
- g_return_val_if_fail(len > 0, NULL);
-
- ascii = g_malloc(len * 2 + 1);
-
- for (i = 0; i < len; i++)
- g_snprintf(&ascii[i * 2], 3, "%02x", data[i] & 0xFF);
-
- return ascii;
-}
-
-guchar *
-purple_base16_decode(const char *str, gsize *ret_len)
-{
- gsize len, i, accumulator = 0;
- guchar *data;
-
- g_return_val_if_fail(str != NULL, NULL);
-
- len = strlen(str);
-
- g_return_val_if_fail(*str, 0);
- g_return_val_if_fail(len % 2 == 0, 0);
-
- data = g_malloc(len / 2);
-
- for (i = 0; i < len; i++)
- {
- if ((i % 2) == 0)
- accumulator = 0;
- else
- accumulator <<= 4;
-
- if (isdigit(str[i]))
- accumulator |= str[i] - 48;
- else
- {
- switch(tolower(str[i]))
- {
- case 'a': accumulator |= 10; break;
- case 'b': accumulator |= 11; break;
- case 'c': accumulator |= 12; break;
- case 'd': accumulator |= 13; break;
- case 'e': accumulator |= 14; break;
- case 'f': accumulator |= 15; break;
- }
- }
-
- if (i % 2)
- data[(i - 1) / 2] = accumulator;
- }
-
- if (ret_len != NULL)
- *ret_len = len / 2;
-
- return data;
-}
-
-gchar *
-purple_base16_encode_chunked(const guchar *data, gsize len)
-{
- gsize i;
- gchar *ascii = NULL;
-
- g_return_val_if_fail(data != NULL, NULL);
- g_return_val_if_fail(len > 0, NULL);
-
- /* For each byte of input, we need 2 bytes for the hex representation
- * and 1 for the colon.
- * The final colon will be replaced by a terminating NULL
- */
- ascii = g_malloc(len * 3 + 1);
-
- for (i = 0; i < len; i++)
- g_snprintf(&ascii[i * 3], 4, "%02x:", data[i] & 0xFF);
-
- /* Replace the final colon with NULL */
- ascii[len * 3 - 1] = 0;
-
- return ascii;
-}
-
-/**************************************************************************
* Date/Time Functions
**************************************************************************/
@@ -2507,36 +2416,6 @@
struct sockaddr_storage sa_stor;
} PurpleSockaddr;
-char *
-purple_fd_get_ip(int fd)
-{
- PurpleSockaddr addr;
- socklen_t namelen = sizeof(addr);
- int family;
-
- g_return_val_if_fail(fd != 0, NULL);
-
- if (getsockname(fd, &(addr.sa), &namelen))
- return NULL;
-
- family = addr.sa.sa_family;
-
- if (family == AF_INET) {
- return g_strdup(inet_ntoa(addr.sa_in.sin_addr));
- }
-#if defined(AF_INET6) && defined(HAVE_INET_NTOP)
- else if (family == AF_INET6) {
- char host[INET6_ADDRSTRLEN];
- const char *tmp;
-
- tmp = inet_ntop(family, &(addr.sa_in6.sin6_addr), host, sizeof(host));
- return g_strdup(tmp);
- }
-#endif
-
- return NULL;
-}
-
int
purple_socket_get_family(int fd)
{
@@ -2917,7 +2796,6 @@
return ret;
}
-
size_t
purple_utf16_size(const gunichar2 *str)
{
@@ -3289,33 +3167,6 @@
return NULL;
}
-#define utf8_first(x) ((x & 0x80) == 0 || (x & 0xe0) == 0xc0 \
- || (x & 0xf0) == 0xe0 || (x & 0xf8) == 0xf0)
-gchar *
-purple_utf8_salvage(const char *str)
-{
- GString *workstr;
- const char *end;
-
- g_return_val_if_fail(str != NULL, NULL);
-
- workstr = g_string_sized_new(strlen(str));
-
- do {
- (void)g_utf8_validate(str, -1, &end);
- workstr = g_string_append_len(workstr, str, end - str);
- str = end;
- if (*str == '\0')
- break;
- do {
- workstr = g_string_append_c(workstr, '?');
- str++;
- } while (!utf8_first(*str));
- } while (*str != '\0');
-
- return g_string_free(workstr, FALSE);
-}
-
gchar *
purple_utf8_strip_unprintables(const gchar *str)
{
@@ -3692,37 +3543,6 @@
return buf;
}
-void purple_restore_default_signal_handlers(void)
-{
-#ifndef _WIN32
- signal(SIGHUP, SIG_DFL); /* 1: terminal line hangup */
- signal(SIGINT, SIG_DFL); /* 2: interrupt program */
- signal(SIGQUIT, SIG_DFL); /* 3: quit program */
- signal(SIGILL, SIG_DFL); /* 4: illegal instruction (not reset when caught) */
- signal(SIGTRAP, SIG_DFL); /* 5: trace trap (not reset when caught) */
- signal(SIGABRT, SIG_DFL); /* 6: abort program */
-
-#ifdef SIGPOLL
- signal(SIGPOLL, SIG_DFL); /* 7: pollable event (POSIX) */
-#endif /* SIGPOLL */
-
-#ifdef SIGEMT
- signal(SIGEMT, SIG_DFL); /* 7: EMT instruction (Non-POSIX) */
-#endif /* SIGEMT */
-
- signal(SIGFPE, SIG_DFL); /* 8: floating point exception */
- signal(SIGBUS, SIG_DFL); /* 10: bus error */
- signal(SIGSEGV, SIG_DFL); /* 11: segmentation violation */
- signal(SIGSYS, SIG_DFL); /* 12: bad argument to system call */
- signal(SIGPIPE, SIG_DFL); /* 13: write on a pipe with no reader */
- signal(SIGALRM, SIG_DFL); /* 14: real-time timer expired */
- signal(SIGTERM, SIG_DFL); /* 15: software termination signal */
- signal(SIGCHLD, SIG_DFL); /* 20: child status has changed */
- signal(SIGXCPU, SIG_DFL); /* 24: exceeded CPU time limit */
- signal(SIGXFSZ, SIG_DFL); /* 25: exceeded file size limit */
-#endif /* !_WIN32 */
-}
-
static void
set_status_with_attrs(PurpleStatus *status, ...)
{
@@ -3786,26 +3606,6 @@
return g_string_free(string, FALSE);
}
-gchar *
-purple_uuid_random(void)
-{
- guint32 tmp, a, b;
-
- tmp = g_random_int();
- a = 0x4000 | (tmp & 0xFFF); /* 0x4000 to 0x4FFF */
- tmp >>= 12;
- b = ((1 << 3) << 12) | (tmp & 0x3FFF); /* 0x8000 to 0xBFFF */
-
- tmp = g_random_int();
-
- return g_strdup_printf("%08x-%04x-%04x-%04x-%04x%08x",
- g_random_int(),
- tmp & 0xFFFF,
- a,
- b,
- (tmp >> 16) & 0xFFFF, g_random_int());
-}
-
void purple_callback_set_zero(gpointer data)
{
gpointer *ptr = data;
--- a/libpurple/util.h Sat Aug 22 04:02:53 2020 -0500
+++ b/libpurple/util.h Sat Aug 22 04:03:26 2020 -0500
@@ -92,57 +92,6 @@
void purple_util_uninit(void);
/**************************************************************************/
-/* Base16 Functions */
-/**************************************************************************/
-
-/**
- * purple_base16_encode:
- * @data: The data to convert.
- * @len: The length of the data.
- *
- * Converts a chunk of binary data to its base-16 equivalent.
- *
- * See purple_base16_decode()
- *
- * Returns: The base-16 string in the ASCII encoding. Must be
- * g_free'd when no longer needed.
- */
-gchar *purple_base16_encode(const guchar *data, gsize len);
-
-/**
- * purple_base16_decode:
- * @str: The base-16 string to convert to raw data.
- * @ret_len: The length of the returned data. You can
- * pass in NULL if you're sure that you know
- * the length of the decoded data, or if you
- * know you'll be able to use strlen to
- * determine the length, etc.
- *
- * Converts an ASCII string of base-16 encoded data to
- * the binary equivalent.
- *
- * See purple_base16_encode()
- *
- * Returns: The raw data. Must be g_free'd when no longer needed.
- */
-guchar *purple_base16_decode(const char *str, gsize *ret_len);
-
-/**
- * purple_base16_encode_chunked:
- * @data: The data to convert.
- * @len: The length of the data.
- *
- * Converts a chunk of binary data to a chunked base-16 representation
- * (handy for key fingerprints)
- *
- * Example output: 01:23:45:67:89:AB:CD:EF
- *
- * Returns: The base-16 string in the ASCII chunked encoding. Must be
- * g_free'd when no longer needed.
- */
-gchar *purple_base16_encode_chunked(const guchar *data, gsize len);
-
-/**************************************************************************/
/* Date/Time Functions */
/**************************************************************************/
@@ -822,16 +771,6 @@
gboolean purple_running_osx(void);
/**
- * purple_fd_get_ip:
- * @fd: The socket file descriptor.
- *
- * Returns the IP address from a socket file descriptor.
- *
- * Returns: The IP address, or %NULL on error.
- */
-char *purple_fd_get_ip(int fd);
-
-/**
* purple_socket_get_family:
* @fd: The socket file descriptor.
*
@@ -1100,7 +1039,6 @@
*/
void purple_utf16_wipe(gunichar2 *str);
-
/**************************************************************************/
/* URI/URL Functions */
/**************************************************************************/
@@ -1199,18 +1137,6 @@
gchar *purple_utf8_try_convert(const char *str);
/**
- * purple_utf8_salvage:
- * @str: The source string.
- *
- * Salvages the valid UTF-8 characters from a string, replacing any
- * invalid characters with a filler character (currently hardcoded to
- * '?').
- *
- * Returns: A valid UTF-8 string.
- */
-gchar *purple_utf8_salvage(const char *str);
-
-/**
* purple_utf8_strip_unprintables:
* @str: A valid UTF-8 string.
*
@@ -1311,24 +1237,6 @@
const char *purple_escape_filename(const char *str);
/**
- * purple_restore_default_signal_handlers:
- *
- * Restore default signal handlers for signals which might reasonably have
- * handlers. This should be called by a fork()'d child process, since child processes
- * inherit the handlers of the parent.
- */
-void purple_restore_default_signal_handlers(void);
-
-/**
- * purple_uuid_random:
- *
- * Returns a type 4 (random) UUID
- *
- * Returns: A UUID, caller is responsible for freeing it
- */
-gchar *purple_uuid_random(void);
-
-/**
* purple_callback_set_zero:
* @data: A pointer to variable, which should be set to NULL.
*
--- a/meson.build Sat Aug 22 04:02:53 2020 -0500
+++ b/meson.build Sat Aug 22 04:03:26 2020 -0500
@@ -272,7 +272,7 @@
# #######################################################################
# # Check for GLib 2.44 (required)
# #######################################################################
-glib = dependency('glib-2.0', version : '>= 2.48.0')
+glib = dependency('glib-2.0', version : '>= 2.52.0')
gio = dependency('gio-2.0')
gobject = dependency('gobject-2.0')
gthread = dependency('gthread-2.0')