--- a/libpurple/protocols/facebook/thrift.c Thu Jun 18 00:45:16 2015 -0400 +++ b/libpurple/protocols/facebook/thrift.c Mon Jun 22 16:26:50 2015 -0400 @@ -385,14 +385,25 @@ gboolean fb_thrift_read_str(FbThrift *thft, gchar **str) { - gint32 size; + FbThriftPrivate *priv; + gboolean res; guint8 *data; + guint32 size; + + g_return_val_if_fail(FB_IS_THRIFT(thft), FALSE); + priv = thft->priv; if (str != NULL) { *str = NULL; } - if (!fb_thrift_read_i32(thft, &size)) { + if (priv->flags & FB_THRIFT_FLAG_COMPACT) { + res = fb_thrift_read_vi32(thft, &size); + } else { + res = fb_thrift_read_i32(thft, (gint32*) &size); + } + + if (!res) { return FALSE; } @@ -769,12 +780,21 @@ void fb_thrift_write_str(FbThrift *thft, const gchar *str) { + FbThriftPrivate *priv; guint32 size; + g_return_if_fail(FB_IS_THRIFT(thft)); g_return_if_fail(str != NULL); + priv = thft->priv; size = strlen(str); - fb_thrift_write_vi32(thft, size); + + if (priv->flags & FB_THRIFT_FLAG_COMPACT) { + fb_thrift_write_vi32(thft, size); + } else { + fb_thrift_write_i32(thft, size); + } + fb_thrift_write(thft, str, size); }