Mercurial > pidgin.yaz
view licq2gaim.pl @ 10039:cf02e7104706
[gaim-migrate @ 10998]
A patch from rian hunter (chrono86):
In src/protocols/oscar/oscar.c, in the function
gaim_plugin_oscar_convert_to_best_encoding. g_convert
is called multiple times. As its 5th argument g_convert
takes a gsize* (8 byte), yet the argument to
gaim_plugin_oscar_convert_to_best_encoding is a int* (4
byte).
On LP64 machines this can allow the int* to be
overwritten. This is especially bad on big endian
64-bit machines, causing the high 32-bits to be written
into the low 32-bits of the int.
This is a quick fix patch that lets g_convert deal with
a gsize* pointer instead, then casting the value at
gsize* to the value at the int*.
A real fix would be to fix the aim_sendimext_args
structure to have a gsize instead of an int (and all
functions that use the aim_sendimext_args struct), and
changing gaim_plugin_oscar_convert_to_best_encoding to
accept a gsize*. of course, this woudl promote glib2
dependence, so that's probably not the best thing to do.
committer: Tailor Script <tailor@pidgin.im>
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Sat, 18 Sep 2004 23:17:18 +0000 |
parents | e967c0d93930 |
children |
line wrap: on
line source
#!/usr/bin/perl -w # licq2gaim.pl # # Arturo Cisneros, Jr <acjr@hal-pc.org> # GPL'd use strict; my $DIR = "$ENV{HOME}/.licq"; my $GAIM = "$ENV{HOME}/.gaim"; my (@UINS, %USERS) = (); my $OWNER = ""; get_uins(); foreach my $uin (@UINS) { $USERS{$uin} = get_alias($uin); } get_owner(); write_list(); sub get_uins { opendir(DIR, "$DIR/users") or die "Couldn't open dir $DIR/users/: $!"; @UINS = grep !/^\./, readdir DIR; closedir(DIR); } sub get_owner { my @foo = (); open(FILE, "<$DIR/owner.uin") or die "Couldn't open file $DIR/owner.uin $!"; while(<FILE>) { next unless /^Uin/; @foo = split; last; } close(FILE); $OWNER = $foo[2]; } sub get_alias { my @foo = (); open(FILE, "<$DIR/users/$_[0]") or die "Couldn't open $DIR/users/$_[0]: $!"; while(<FILE>) { next unless /^Alias/; @foo = split / /, $_, 3; last; } close(FILE); return $foo[2]; } sub write_list { # Backup Original if( -e "$GAIM/$OWNER.3.blist") { rename("$GAIM/$OWNER.3.blist","$GAIM/$OWNER.3.bak"); } # Write new file open(FILE, ">$GAIM/$OWNER.3.blist") or die "Couldn't open file for writing: $!"; print FILE "m 1\n"; print FILE "g ICQBuddies\n"; while(my($key, $value) = each %USERS) { $key =~ s/\.uin$//; print FILE "b $key:$value"; } close(FILE); }