[Mplayerxp-cvslog] SF.net SVN: mplayerxp:[642] mplayerxp/libmpconf/cfgparser.cpp
Brought to you by:
olov
From: <nic...@us...> - 2013-05-19 07:38:48
|
Revision: 642 http://sourceforge.net/p/mplayerxp/code/642 Author: nickols_k Date: 2013-05-19 07:38:45 +0000 (Sun, 19 May 2013) Log Message: ----------- about illegal-patch =================== In addition to previous observations i've found out that malefactors have hacked libstdc++: ---------------------- 8< --------------------- 8< ---------------------------------- GNU gdb (GDB) 7.6 Copyright (C) 2013 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "x86_64-unknown-linux-gnu". For bug reporting instructions, please see: <http://www.gnu.org/software/gdb/bugs/>... Reading symbols from /mnt/Storage/Data/-SF.NET-/MPXP/mplayerxp/mplayerxp/mplayerxp...done. (gdb) break main.cpp:1580 Breakpoint 1 at 0x46978b: file main.cpp, line 1580. (gdb) run Starting program: /mnt/Storage/Data/-SF.NET-/MPXP/mplayerxp/mplayerxp/mplayerxp -vo fbdev -ao alsa trassa\ e95.avi [Thread debugging using libthread_db enabled] Using host libthread_db library "/usr/lib/libthread_db.so.1". Breakpoint 1, usr::MPlayerXP (argv=std::vector of length 6, capacity 8 = {...}, envm=std::map with 20 elements) at main.cpp:1580 1580 xmp_init(); (gdb) print envm $1 = std::map with 20 elements (gdb) print argv $2 = std::vector of length 6, capacity 8 = {"/mnt/Storage/Data/-SF.NET-/MPXP/mplayerxp/mplayerxp/mplayerxp", "-vo", "fbdev", "-ao", "alsa", "trassa e95.avi"} (gdb) q A debugging session is active. Inferior 1 [process 1047] will be killed. Quit anyway? (y or n) ---------------------- 8< --------------------- 8< ---------------------------------- it's clear that std::vector contains char* but not std::string(s) therefore, malefactor(s) substitute libstdc++ too: ---------------------- 8< --------------------- 8< ---------------------------------- $nm -D -C mplayerxp | grep string U std::string::find(char, unsigned long) const U std::string::find(char const*, unsigned long, unsigned long) const U std::string::rfind(char, unsigned long) const U std::string::substr(unsigned long, unsigned long) const U std::string::compare(char const*) const U std::string::_M_leak_hard() U std::string::_Rep::_M_destroy(std::allocator<char> const&) U std::string::_Rep::_M_dispose(std::allocator<char> const&) 000000000103a040 u std::string::_Rep::_S_empty_rep_storage U std::string::append(char const*, unsigned long) U std::string::append(std::string const&) U std::string::assign(char const*, unsigned long) U std::string::assign(std::string const&) U std::string::resize(unsigned long, char) U std::string::reserve(unsigned long) U std::string::_M_mutate(unsigned long, unsigned long, unsigned long) U std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&) U std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::string const&) U std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::string const&, unsigned long, unsigned long) U std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string() 0000000000580f00 W std::basic_string<char, std::char_traits<char>, std::allocator<char> > std::operator+<char, std::char_traits<char>, std::allocator<char> >(char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) 0000000000482680 W std::basic_string<char, std::char_traits<char>, std::allocator<char> > std::operator+<char, std::char_traits<char>, std::allocator<char> >(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) $nm -D -C mplayerxp | grep ostream U std::ostream::put(char) U std::ostream::flush() U std::ostream::seekp(long, std::_Ios_Seekdir) U std::ostream::tellp() U std::ostream::write(char const*, long) U std::ostream& std::ostream::_M_insert<double>(double) U std::ostream& std::ostream::_M_insert<long>(long) U std::ostream& std::ostream::_M_insert<unsigned long>(unsigned long) U std::ostream& std::ostream::_M_insert<void const*>(void const*) U std::ostream& std::ostream::_M_insert<long long>(long long) U std::basic_ostream<char, std::char_traits<char> >::~basic_ostream() U std::basic_ostream<char, std::char_traits<char> >::~basic_ostream() U std::ostream::operator<<(int) U std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long) U std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&) U std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*) 000000000103a4a0 V typeinfo for std::ostream U virtual thunk to std::basic_ostream<char, std::char_traits<char> >::~basic_ostream() U virtual thunk to std::basic_ostream<char, std::char_traits<char> >::~basic_ostream() ---------------------- 8< --------------------- 8< ---------------------------------- second observation: mplayerxp was extremelly virused by illgal patch: ---------------------- 8< --------------------- 8< ---------------------------------- GNU gdb (GDB) 7.6 Copyright (C) 2013 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "x86_64-unknown-linux-gnu". For bug reporting instructions, please see: <http://www.gnu.org/software/gdb/bugs/>... Reading symbols from /mnt/Storage/Data/-SF.NET-/MPXP/mplayerxp/mplayerxp/mplayerxp...done. (gdb) break main.cpp:2109 Breakpoint 1 at 0x44b21c: file main.cpp, line 2109. (gdb) break cfgparser.cpp:769 Breakpoint 2 at 0x5a8271: file cfgparser.cpp, line 769. (gdb) run Starting program: /mnt/Storage/Data/-SF.NET-/MPXP/mplayerxp/mplayerxp/mplayerxp --long-help [Thread debugging using libthread_db enabled] Using host libthread_db library "/usr/lib/libthread_db.so.1". Breakpoint 1, main (argc=<optimized out>, args=<optimized out>, envp=0x7fffffffebd0) at main.cpp:2109 2109 mpxp_ok<<"*** Antiviral protection was inited ***!!!"<<std::endl; (gdb) print envm $1 = std::map with 20 elements = {["COLUMNS"] = "174", ["HISTCONTROL"] = "ignorespace", ["HOME"] = "/root", ["LANG"] = "ru_RU.UTF-8", ["LINES"] = "54", ["LOGNAME"] = "root", ["MAIL"] = "/var/spool/mail/root", ["MC_SID"] = "1251", ["MC_TMPDIR"] = "/tmp/mc-root", ["PATH"] = "/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/bin/core_perl", ["PWD"] = "/mnt/Storage/Data/-SF.NET-/MPXP/mplayerxp/mplayerxp", ["SHELL"] = "/bin/bash", ["SHLVL"] = "2", ["TERM"] = "linux", ["USER"] = "root", ["XDG_RUNTIME_DIR"] = "/run/user/0", ["XDG_SEAT"] = "seat0", ["XDG_SESSION_ID"] = "3", ["XDG_VTNR"] = "2", ["_"] = "/usr/bin/gdb"} (gdb) s operator<< (__pf=<optimized out>, this=0x104cdc0 <_ZN3usrL7mpxp_okE>) at /usr/include/c++/4.8.0/ostream:113 113 return __pf(*this); (gdb) s main (argc=<optimized out>, args=<optimized out>, envp=0x7fffffffebd0) at main.cpp:2112 2112 memset(&mp_conf.x86,-1,sizeof(x86_features_t)); (gdb) s 2115 return MPlayerXP(argv,envm); (gdb) s usr::MPlayerXP (argv=std::vector of length 2, capacity 2 = {...}, envm=std::map with 20 elements) at main.cpp:1559 1559 int MPlayerXP(const std::vector<std::string>& argv, const std::map<std::string,std::string>& envm){ (gdb) print envm $2 = std::map with 20 elements (gdb) c Continuing. Breakpoint 2, usr::M_Config::__show_options (this=this@entry=0x2369010, ntabs=ntabs@entry=2, pfx="", opts=opts@entry=0xbc8fe0 <usr::mplayerxp_options>) at cfgparser.cpp:769 769 while(opts[i].name) { (gdb) n 766 void M_Config::__show_options(unsigned ntabs,const std::string& pfx,const mpxp_option_t* opts) const { (gdb) n 769 while(opts[i].name) { (gdb) n 781 __show_options(ntabs+2,newpfx,(const mpxp_option_t *)opts[i].p); (gdb) n 769 while(opts[i].name) { (gdb) n 768 i=0; (gdb) n 781 __show_options(ntabs+2,newpfx,(const mpxp_option_t *)opts[i].p); (gdb) n 770 if(opts[i].type==CONF_TYPE_SUBCONFIG && opts[i].p) { (gdb) n 784 if(opts[i].type<=CONF_TYPE_PRINT) { (gdb) n 847 i++; (gdb) n 769 while(opts[i].name) { (gdb) n 770 if(opts[i].type==CONF_TYPE_SUBCONFIG && opts[i].p) { (gdb) n 784 if(opts[i].type<=CONF_TYPE_PRINT) { (gdb) n 785 for(n=0;n<ntabs;n++) mpxp_info<<" "; (gdb) n 786 if(!pfx.empty()) mpxp_info<<std::left<<pfx<<std::endl; (gdb) n 787 else mpxp_info<<" "<<std::endl; (gdb) n 787 else mpxp_info<<" "<<std::endl; (gdb) n 788 mpxp_info<<std::left<<opts[i].name<<" "<<opts[i].help<<std::endl; (gdb) n 788 mpxp_info<<std::left<<opts[i].name<<" "<<opts[i].help<<std::endl; (gdb) n 789 if((opts[i].flags&CONF_NOCFG)==0) { (gdb) n 791 (opts[i].type==CONF_TYPE_FLAG?"flg": (gdb) n 794 opts[i].type==CONF_TYPE_STRING?"str":"")<<"="; (gdb) n 790 mpxp_info<<" {"<< (gdb) n 794 opts[i].type==CONF_TYPE_STRING?"str":"")<<"="; (gdb) n 795 switch(opts[i].type) { (gdb) n 804 const char **defv = (const char**)(opts[i].p); (gdb) n 805 if(defv) mpxp_info<<"\""<<*defv<<"\""; (gdb) n 843 mpxp_info<<"}"; (gdb) n 845 mpxp_info<<std::endl; (gdb) n 847 i++; (gdb) n 769 while(opts[i].name) { (gdb) n 770 if(opts[i].type==CONF_TYPE_SUBCONFIG && opts[i].p) { (gdb) n 784 if(opts[i].type<=CONF_TYPE_PRINT) { (gdb) n 785 for(n=0;n<ntabs;n++) mpxp_info<<" "; (gdb) n 786 if(!pfx.empty()) mpxp_info<<std::left<<pfx<<std::endl; (gdb) n 787 else mpxp_info<<" "<<std::endl; (gdb) n 787 else mpxp_info<<" "<<std::endl; (gdb) n 788 mpxp_info<<std::left<<opts[i].name<<" "<<opts[i].help<<std::endl; (gdb) n 788 mpxp_info<<std::left<<opts[i].name<<" "<<opts[i].help<<std::endl; (gdb) n 789 if((opts[i].flags&CONF_NOCFG)==0) { (gdb) print opts[i] $3 = {name = 0xb71391 "ao", p = 0x103b100 <usr::mp_conf+224>, type = 3, flags = 0, min = 0, max = 0, help = 0xbc76f8 "select audio output driver and optinaly device"} (gdb) q A debugging session is active. Inferior 1 [process 1275] will be killed. Quit anyway? (y or n) ---------------------- 8< --------------------- 8< ---------------------------------- 1) at first print gdb shows context of envm but at second print it already hides its context. 2) replacement of 'std::string' with 'char*' by hacked-gcc affected class mpxp_ostream: ---------------------- 8< --------------------- 8< ---------------------------------- GNU gdb (GDB) 7.6 Copyright (C) 2013 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "x86_64-unknown-linux-gnu". For bug reporting instructions, please see: <http://www.gnu.org/software/gdb/bugs/>... Reading symbols from /mnt/Storage/Data/-SF.NET-/MPXP/mplayerxp/mplayerxp/mplayerxp...done. (gdb) break cfgparser.cpp:769 Breakpoint 1 at 0x5a8271: file cfgparser.cpp, line 769. (gdb) run Starting program: /mnt/Storage/Data/-SF.NET-/MPXP/mplayerxp/mplayerxp/mplayerxp --long-help [Thread debugging using libthread_db enabled] Using host libthread_db library "/usr/lib/libthread_db.so.1". Breakpoint 1, usr::M_Config::__show_options (this=this@entry=0x23691c0, ntabs=ntabs@entry=2, pfx="", opts=opts@entry=0xbc8fe0 <usr::mplayerxp_options>) at cfgparser.cpp:769 769 while(opts[i].name) { (gdb) n 766 void M_Config::__show_options(unsigned ntabs,const std::string& pfx,const mpxp_option_t* opts) const { (gdb) n 769 while(opts[i].name) { (gdb) n 781 __show_options(ntabs+2,newpfx,(const mpxp_option_t *)opts[i].p); (gdb) n 769 while(opts[i].name) { (gdb) n 768 i=0; (gdb) n 781 __show_options(ntabs+2,newpfx,(const mpxp_option_t *)opts[i].p); (gdb) n 770 if(opts[i].type==CONF_TYPE_SUBCONFIG && opts[i].p) { (gdb) n 784 if(opts[i].type<=CONF_TYPE_PRINT) { (gdb) n 847 i++; (gdb) n 769 while(opts[i].name) { (gdb) n 770 if(opts[i].type==CONF_TYPE_SUBCONFIG && opts[i].p) { (gdb) n 784 if(opts[i].type<=CONF_TYPE_PRINT) { (gdb) n 785 for(n=0;n<ntabs;n++) mpxp_info<<" "; (gdb) n 786 if(!pfx.empty()) mpxp_info<<std::left<<pfx<<std::endl; (gdb) n 787 else mpxp_info<<" "<<std::endl; (gdb) n 787 else mpxp_info<<" "<<std::endl; (gdb) n 788 mpxp_info<<std::left<<opts[i].name<<" "<<opts[i].help<<std::endl; (gdb) n 788 mpxp_info<<std::left<<opts[i].name<<" "<<opts[i].help<<std::endl; (gdb) n 789 if((opts[i].flags&CONF_NOCFG)==0) { (gdb) n 791 (opts[i].type==CONF_TYPE_FLAG?"flg": (gdb) n 794 opts[i].type==CONF_TYPE_STRING?"str":"")<<"="; (gdb) n 790 mpxp_info<<" {"<< (gdb) n 794 opts[i].type==CONF_TYPE_STRING?"str":"")<<"="; (gdb) n 795 switch(opts[i].type) { (gdb) n 804 const char **defv = (const char**)(opts[i].p); (gdb) n 805 if(defv) mpxp_info<<"\""<<*defv<<"\""; (gdb) n 843 mpxp_info<<"}"; (gdb) n 845 mpxp_info<<std::endl; (gdb) n 847 i++; (gdb) n 769 while(opts[i].name) { (gdb) n 770 if(opts[i].type==CONF_TYPE_SUBCONFIG && opts[i].p) { (gdb) n 784 if(opts[i].type<=CONF_TYPE_PRINT) { (gdb) n 785 for(n=0;n<ntabs;n++) mpxp_info<<" "; (gdb) n 786 if(!pfx.empty()) mpxp_info<<std::left<<pfx<<std::endl; (gdb) n 787 else mpxp_info<<" "<<std::endl; (gdb) n 787 else mpxp_info<<" "<<std::endl; (gdb) n 788 mpxp_info<<std::left<<opts[i].name<<" "<<opts[i].help<<std::endl; (gdb) s operator<< (__pf=<optimized out>, this=<optimized out>) at /usr/include/c++/4.8.0/ostream:132 132 __pf(*this); (gdb) n usr::M_Config::__show_options (this=this@entry=0x23691c0, ntabs=ntabs@entry=2, pfx="", opts=opts@entry=0xbc8fe0 <usr::mplayerxp_options>) at cfgparser.cpp:788 788 mpxp_info<<std::left<<opts[i].name<<" "<<opts[i].help<<std::endl; (gdb) s operator<< (__pf=<optimized out>, this=0x1cff240 <_ZN3usrL9mpxp_infoE>) at /usr/include/c++/4.8.0/ostream:132 132 __pf(*this); (gdb) n usr::M_Config::__show_options (this=this@entry=0x23691c0, ntabs=ntabs@entry=2, pfx="", opts=opts@entry=0xbc8fe0 <usr::mplayerxp_options>) at cfgparser.cpp:788 788 mpxp_info<<std::left<<opts[i].name<<" "<<opts[i].help<<std::endl; (gdb) s operator<< <std::char_traits<char> > (__s=<optimized out>, __out=...) at /usr/include/c++/4.8.0/ostream:532 532 if (!__s) (gdb) n usr::M_Config::__show_options (this=this@entry=0x23691c0, ntabs=ntabs@entry=2, pfx="", opts=opts@entry=0xbc8fe0 <usr::mplayerxp_options>) at cfgparser.cpp:788 788 mpxp_info<<std::left<<opts[i].name<<" "<<opts[i].help<<std::endl; (gdb) s operator<< (__pf=<optimized out>, this=0x1cff240 <_ZN3usrL9mpxp_infoE>) at cfgparser.cpp:788 788 mpxp_info<<std::left<<opts[i].name<<" "<<opts[i].help<<std::endl; (gdb) s left (__base=...) at cfgparser.cpp:788 788 mpxp_info<<std::left<<opts[i].name<<" "<<opts[i].help<<std::endl; (gdb) s setf (__mask=std::_S_adjustfield, __fmtfl=std::_S_left, this=0x1d008d0 <_ZN3usrL9mpxp_infoE+5776>) at cfgparser.cpp:788 788 mpxp_info<<std::left<<opts[i].name<<" "<<opts[i].help<<std::endl; (gdb) s operator|= (__b=std::_S_left, __a=@0x1d008e8: 4130) at cfgparser.cpp:788 788 mpxp_info<<std::left<<opts[i].name<<" "<<opts[i].help<<std::endl; (gdb) s operator| (__b=std::_S_left, __a=4098) at /usr/include/c++/4.8.0/bits/ios_base.h:80 80 { return _Ios_Fmtflags(static_cast<int>(__a) | static_cast<int>(__b)); } (gdb) s usr::M_Config::__show_options (this=this@entry=0x23691c0, ntabs=ntabs@entry=2, pfx="", opts=opts@entry=0xbc8fe0 <usr::mplayerxp_options>) at cfgparser.cpp:788 788 mpxp_info<<std::left<<opts[i].name<<" "<<opts[i].help<<std::endl; (gdb) s operator<< <std::char_traits<char> > (__s=0xb71391 "ao", __out=...) at /usr/include/c++/4.8.0/ostream:532 532 if (!__s) (gdb) s 536 static_cast<streamsize>(_Traits::length(__s))); (gdb) s length (__s=0xb71391 "ao") at /usr/include/c++/4.8.0/bits/char_traits.h:259 259 { return __builtin_strlen(__s); } (gdb) s operator<< <std::char_traits<char> > (__s=0xb71391 "ao", __out=...) at /usr/include/c++/4.8.0/ostream:535 535 __ostream_insert(__out, __s, (gdb) s usr::M_Config::__show_options (this=this@entry=0x23691c0, ntabs=ntabs@entry=2, pfx="", opts=opts@entry=0xbc8fe0 <usr::mplayerxp_options>) at cfgparser.cpp:788 788 mpxp_info<<std::left<<opts[i].name<<" "<<opts[i].help<<std::endl; (gdb) s operator<< <std::char_traits<char> > (__s=0xbc76f8 "select audio output driver and optinaly device", __out=...) at /usr/include/c++/4.8.0/ostream:532 532 if (!__s) (gdb) s 536 static_cast<streamsize>(_Traits::length(__s))); (gdb) s length (__s=0xbc76f8 "select audio output driver and optinaly device") at /usr/include/c++/4.8.0/bits/char_traits.h:259 259 { return __builtin_strlen(__s); } (gdb) s operator<< <std::char_traits<char> > (__s=0xbc76f8 "select audio output driver and optinaly device", __out=...) at /usr/include/c++/4.8.0/ostream:535 535 __ostream_insert(__out, __s, (gdb) s usr::M_Config::__show_options (this=this@entry=0x23691c0, ntabs=ntabs@entry=2, pfx="", opts=opts@entry=0xbc8fe0 <usr::mplayerxp_options>) at cfgparser.cpp:788 788 mpxp_info<<std::left<<opts[i].name<<" "<<opts[i].help<<std::endl; (gdb) s operator<< (__pf=<optimized out>, this=<optimized out>) at cfgparser.cpp:788 788 mpxp_info<<std::left<<opts[i].name<<" "<<opts[i].help<<std::endl; (gdb) s endl<char, std::char_traits<char> > (__os=...) at /usr/include/c++/4.8.0/ostream:565 565 { return flush(__os.put(__os.widen('\n'))); } (gdb) s usr::M_Config::__show_options (this=this@entry=0x23691c0, ntabs=ntabs@entry=2, pfx="", opts=opts@entry=0xbc8fe0 <usr::mplayerxp_options>) at cfgparser.cpp:788 788 mpxp_info<<std::left<<opts[i].name<<" "<<opts[i].help<<std::endl; (gdb) q A debugging session is active. Inferior 1 [process 1312] will be killed. Quit anyway? (y or n) ---------------------- 8< --------------------- 8< ---------------------------------- Modified Paths: -------------- mplayerxp/libmpconf/cfgparser.cpp Modified: mplayerxp/libmpconf/cfgparser.cpp =================================================================== --- mplayerxp/libmpconf/cfgparser.cpp 2013-05-18 17:23:21 UTC (rev 641) +++ mplayerxp/libmpconf/cfgparser.cpp 2013-05-19 07:38:45 UTC (rev 642) @@ -784,10 +784,8 @@ if(opts[i].type<=CONF_TYPE_PRINT) { for(n=0;n<ntabs;n++) mpxp_info<<" "; if(!pfx.empty()) mpxp_info<<std::left<<pfx<<std::endl; - else mpxp_info<<"-"<<std::endl; - mpxp_info<<std::left<<opts[i].name<<" " - <<((opts[i].type==CONF_TYPE_PRINT && strcmp(opts[i].help,"show help")!=0)?opts[i].p:opts[i].help) - <<std::endl; + else mpxp_info<<" "<<std::endl; + mpxp_info<<std::left<<opts[i].name<<" "<<opts[i].help<<std::endl; if((opts[i].flags&CONF_NOCFG)==0) { mpxp_info<<" {"<< (opts[i].type==CONF_TYPE_FLAG?"flg": This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |