PaulHowarth/Blog/2010-06-25

Friday 25th June 2010

Fedora Project

  • Finally got round to debugging a segfault in gtorrentviewer (Bug #542502 and Bug #572806), which turned out to be straightforward as one of the bug reporters took the trouble to provide a reliable reproducer of the bug; in the end it was the simple matter of a GValue being declared as a local variable in a function and not initialized to zero before use, resulting in this stack trace:

  • [New Thread 23163]
    Core was generated by `gtorrentviewer /storage/data/torrents-new/xxxx'.
    Program terminated with signal 11, Segmentation fault.
    #0  0x000000340cc28f9c in type_check_is_value_type_U (value=0x7fffdbacac80, 
        type=64) at gtype.c:3836
    3836    gtype.c: No such file or directory.
            in gtype.c
    
    ...
    
    Thread 1 (Thread 23160):
    #0  0x000000340cc28f9c in type_check_is_value_type_U (value=0x7fffdbacac80, 
        type=64) at gtype.c:3836
            tflags = G_TYPE_FLAG_VALUE_ABSTRACT
            node = 0x2224010
    #1  IA__g_type_check_value_holds (value=0x7fffdbacac80, type=64)
        at gtype.c:3878
    No locals.
    #2  0x000000340cc31219 in IA__g_value_set_string (value=0x7fffdbacac80, 
        v_string=0x22c4560 "http://tracker.openbittorrent.com/announce")
        at gvaluetypes.c:922
            __val = 0x7fffdbacac80
            __r = <value optimized out>
            _g_boolean_var_ = <value optimized out>
            new_val = 0x22c4560 "http://tracker.openbittorrent.com/announce"
            __PRETTY_FUNCTION__ = "IA__g_value_set_string"
    #3  0x0000000000407aa6 in on_RefreshTrackerButton_clicked (
        mwin=<value optimized out>, user_data=<value optimized out>)
        at mainwindow.c:753
            iter = {stamp = -1347712751, user_data = 0x22e5830, user_data2 = 0x0, 
              user_data3 = 0x0}
            itemvalue = {g_type = 35799056, data = {{v_int = 214096389, v_uint = 
        214096389, v_long = 223552395781, v_ulong = 223552395781, v_int64 = 
        223552395781, v_uint64 = 223552395781, v_float = 3.00216485e-31, 
                  v_double = 1.1044955880089772e-312, v_pointer = 0x340cc2da05}, {
                  v_int = 36582800, v_uint = 36582800, v_long = 36582800, 
                  v_ulong = 36582800, v_int64 = 36582800, v_uint64 = 36582800, 
                  v_float = 1.27988727e-37, v_double = 1.8074304708681154e-316, 
                  v_pointer = 0x22e3590 }
            }}
            err = 0x340cc1894c
  • The fix was as simple as this:
  • --- GTorrentViewer-0.2b/src/mainwindow.c.orig   2004-10-26 05:37:58.000000000 +0100
    +++ GTorrentViewer-0.2b/src/mainwindow.c        2010-06-25 14:43:22.391786427 +0100
    @@ -744,7 +744,7 @@
     {
       GtkListStore *list;
       GtkTreeIter iter;
    -  GValue itemvalue;
    +  GValue itemvalue = {0};
       gchar *tracker;
       GError *err;

Local Packages

  • Updated gtorrentviewer as per the Fedora package, fixing a crash when the "Refresh" button on the "Tracker Details" tab was pushed

  • Rebuilt libspf2 for perl 5.12.1 in Rawhide and added -fno-strict-aliasing compiler option

  • Updated perl-Number-Compare with patch from CPAN RT#58466 to fix "uninitialized value in comparison" warnings (raised as Bug #607982 in Fedora)

  • Updated perl-YAML-Tiny to 1.42:

    • No functional changes
    • Clarified documation regarding treatment of "bool" keywords

    • YAML::Perl comparison tests were behaving incorrectly

    • Author tests updated and moved into xt/

    • Updated the versions of the other YAML parsers for testing
  • Completed the rebuild of Rawhide packages for perl 5.12.1: bw-whois, grepmail, perl-Array-Compare, perl-Carp-Clan, perl-Class-C3-XS, perl-Class-Factory-Util, perl-Class-Inspector, perl-Class-MOP, perl-Class-Singleton, perl-ConfigReader-Simple, perl-Convert-BinHex, perl-Convert-TNEF, perl-Convert-UUlib, perl-DBD-SQLite, perl-DBI, perl-DBM-Deep, perl-DateTime-Calendar-Mayan, perl-DateTime-Format-Builder, perl-DateTime-Format-MySQL, perl-DateTime-Format-Strptime, perl-DateTime, perl-Declare-Constraints-Simple, perl-Devel-GlobalDestruction, perl-Devel-StackTrace, perl-Devel-Symdump, perl-Digest-BubbleBabble, perl-Email-Address, perl-Error, perl-Expect, perl-ExtUtils-CBuilder, perl-File-Find-Rule-Perl, perl-File-Find-Rule, perl-File-Remove, perl-FileHandle-Fmode, perl-HTML-Lint, perl-HTML-SimpleLinkExtor, perl-HTTP-SimpleLinkChecker, perl-HTTP-Size, perl-Hook-LexWrap, perl-IO-Multiplex, perl-IO-Socket-INET6, perl-IO-Socket-SSL, perl-IO-Tty, perl-IO-stringy, perl-IPC-Run, perl-Jcode, perl-LMAP-CID2SPF, perl-Locale-US, perl-MIME-tools, perl-Mail-IMAPClient, perl-Mail-SPF-Query, perl-Mail-SPF-Test, perl-Mail-SPF, perl-Mail-SRS, perl-Mail-Sender, perl-Mail-Sendmail, perl-MailTools, perl-Module-Pluggable, perl-Module-Refresh, perl-Moose, perl-Net-CIDR-Lite, perl-Net-CIDR, perl-Net-DNS-Resolver-Programmable, perl-Net-DNS, perl-Net-IP, perl-Net-LibIDN, perl-Net-SMTP-SSL, perl-Net-SSLeay, perl-Net-Server, perl-NetAddr-IP, perl-Package-Constants, perl-Package-Stash, perl-Params-Coerce, perl-Params-Validate, perl-Parse-CPAN-Meta, perl-Pod-Escapes, perl-Pod-Simple, perl-Readonly-XS, perl-Readonly, perl-Regexp-Common, perl-SUPER, perl-Scope-Guard, perl-Sendmail-PMilter, perl-Socket6, perl-TimeDate, perl-version, and weblint++


Recent