pidgin/pidgin

00cc81f9b809
Merged in EionRobb/pidgin (pull request #12)

Cookie improvements to HTTP functions
--- a/libpurple/http.c Sat Jan 23 12:54:04 2016 -0600
+++ b/libpurple/http.c Sat Jan 23 12:57:30 2016 -0600
@@ -24,8 +24,10 @@
#include "internal.h"
#include "glibcompat.h"
+
#include "debug.h"
#include "ntlm.h"
+#include "proxy.h"
#include "purple-socket.h"
#include <zlib.h>
@@ -1990,7 +1992,7 @@
while (g_hash_table_iter_next(&it, (gpointer*)&key,
(gpointer*)&cookie))
{
- if (cookie->expires != -1 && cookie->expires <= now)
+ if (cookie->expires != -1 && cookie->expires != 0 && cookie->expires <= now)
continue;
g_string_append_printf(str, "%s=%s; ", key, cookie->value);
}
@@ -2003,7 +2005,17 @@
void purple_http_cookie_jar_set(PurpleHttpCookieJar *cookie_jar,
const gchar *name, const gchar *value)
{
- purple_http_cookie_jar_set_ext(cookie_jar, name, value, -1);
+ gchar *escaped_name = g_strdup(purple_url_encode(name));
+ gchar *escaped_value = NULL;
+
+ if (escaped_value) {
+ escaped_value = g_strdup(purple_url_encode(value));
+ }
+
+ purple_http_cookie_jar_set_ext(cookie_jar, escaped_name, escaped_value, -1);
+
+ g_free(escaped_name);
+ g_free(escaped_value);
}
static void purple_http_cookie_jar_set_ext(PurpleHttpCookieJar *cookie_jar,
@@ -2012,7 +2024,7 @@
g_return_if_fail(cookie_jar != NULL);
g_return_if_fail(name != NULL);
- if (expires != -1 && time(NULL) >= expires)
+ if (expires != -1 && expires != 0 && time(NULL) >= expires)
value = NULL;
if (value != NULL) {
@@ -2023,7 +2035,7 @@
g_hash_table_remove(cookie_jar->tab, name);
}
-const gchar * purple_http_cookie_jar_get(PurpleHttpCookieJar *cookie_jar,
+gchar * purple_http_cookie_jar_get(PurpleHttpCookieJar *cookie_jar,
const gchar *name)
{
PurpleHttpCookie *cookie;
@@ -2035,7 +2047,7 @@
if (!cookie)
return NULL;
- return cookie->value;
+ return g_strdup(purple_url_decode(cookie->value));
}
gchar * purple_http_cookie_jar_dump(PurpleHttpCookieJar *cjar)
--- a/libpurple/http.h Sat Jan 23 12:54:04 2016 -0600
+++ b/libpurple/http.h Sat Jan 23 12:57:30 2016 -0600
@@ -463,9 +463,11 @@
*
* Gets the cookie.
*
+ * The result must be g_free'd.
+ *
* Returns: Cookie contents, or NULL, if cookie doesn't exists.
*/
-const gchar * purple_http_cookie_jar_get(PurpleHttpCookieJar *cookie_jar,
+gchar * purple_http_cookie_jar_get(PurpleHttpCookieJar *cookie_jar,
const gchar *name);
/**
--- a/libpurple/protocols/yahoo/ymsg.c Sat Jan 23 12:54:04 2016 -0600
+++ b/libpurple/protocols/yahoo/ymsg.c Sat Jan 23 12:57:30 2016 -0600
@@ -1705,9 +1705,9 @@
"\r\n", -1);
cookiejar = purple_http_conn_get_cookie_jar(http_conn);
- yd->cookie_b = g_strdup(purple_http_cookie_jar_get(cookiejar, "B"));
- yd->cookie_t = g_strdup(purple_http_cookie_jar_get(cookiejar, "T"));
- yd->cookie_y = g_strdup(purple_http_cookie_jar_get(cookiejar, "Y"));
+ yd->cookie_b = purple_http_cookie_jar_get(cookiejar, "B");
+ yd->cookie_t = purple_http_cookie_jar_get(cookiejar, "T");
+ yd->cookie_y = purple_http_cookie_jar_get(cookiejar, "Y");
i = 0;
while (splits[i]) {
@@ -3214,7 +3214,7 @@
PurpleAccount *account = purple_connection_get_account(gc);
PurpleHttpCookieJar *cjar;
GString *auth_s;
- const gchar *cookie;
+ gchar *cookie;
if (purple_http_response_get_code(resp) != 302) {
purple_connection_error(gc,
@@ -3226,14 +3226,20 @@
auth_s = g_string_new(NULL);
cjar = purple_http_conn_get_cookie_jar(hc);
cookie = purple_http_cookie_jar_get(cjar, "B");
- if (cookie)
+ if (cookie) {
g_string_append_printf(auth_s, "B=%s; ", cookie);
+ g_free(cookie);
+ }
cookie = purple_http_cookie_jar_get(cjar, "T");
- if (cookie)
+ if (cookie) {
g_string_append_printf(auth_s, "T=%s; ", cookie);
+ g_free(cookie);
+ }
cookie = purple_http_cookie_jar_get(cjar, "Y");
- if (cookie)
+ if (cookie) {
g_string_append_printf(auth_s, "Y=%s; ", cookie);
+ g_free(cookie);
+ }
yd->auth = g_string_free(auth_s, FALSE);
/* Now we have our cookies to login with. I'll go get the milk. */