/pidgin/main: 00cc81f9b809: Merged in EionRobb/pidgin (pull requ...

Gary Kramlich <[email protected]>
Newsgroups gmane.comp.gnome.gaim.cvs
Message-ID <[email protected]>
Changeset: 00cc81f9b8090634fb514d3d0a0670115d2736f8
Author:	 Gary Kramlich <[email protected]>
Date:	 2016-01-23 12:57 -0600
Branch:	 default
URL: https://hg.pidgin.im/pidgin/main/rev/00cc81f9b809

Description:

Merged in EionRobb/pidgin (pull request #12)

Cookie improvements to HTTP functions

diffstat:

 libpurple/http.c                 |  22 +++++++++++++++++-----
 libpurple/http.h                 |   4 +++-
 libpurple/protocols/yahoo/ymsg.c |  20 +++++++++++++-------
 3 files changed, 33 insertions(+), 13 deletions(-)

diffs (134 lines):

diff --git a/libpurple/http.c b/libpurple/http.c
--- a/libpurple/http.c
+++ b/libpurple/http.c
@@ -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 @@ static gchar * purple_http_cookie_jar_ge
 	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 @@ static gchar * purple_http_cookie_jar_ge
 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 @@ static void purple_http_cookie_jar_set_e
 	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 @@ static void purple_http_cookie_jar_set_e
 		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 @@ const gchar * purple_http_cookie_jar_get
 	if (!cookie)
 		return NULL;
 
-	return cookie->value;
+	return g_strdup(purple_url_decode(cookie->value));
 }
 
 gchar * purple_http_cookie_jar_dump(PurpleHttpCookieJar *cjar)
diff --git a/libpurple/http.h b/libpurple/http.h
--- a/libpurple/http.h
+++ b/libpurple/http.h
@@ -463,9 +463,11 @@ void purple_http_cookie_jar_set(PurpleHt
  *
  * 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);
 
 /**
diff --git a/libpurple/protocols/yahoo/ymsg.c b/libpurple/protocols/yahoo/ymsg.c
--- a/libpurple/protocols/yahoo/ymsg.c
+++ b/libpurple/protocols/yahoo/ymsg.c
@@ -1705,9 +1705,9 @@ static void yahoo_auth16_stage2(PurpleHt
 		"\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 @@ yahoo_login_page_got(PurpleHttpConnectio
 	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 @@ yahoo_login_page_got(PurpleHttpConnectio
 	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. */

_______________________________________________
Commits mailing list
[email protected]
https://pidgin.im/cgi-bin/mailman/listinfo/commits
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.