Changeset 15299


Ignore:
Timestamp:
04/16/12 22:48:11 (11 years ago)
Author:
nit
Message:

[titan] fix segfault and memleak in tithek

Location:
titan
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • titan/plugins/tithek/tithek.h

    r14610 r15299  
    607607        debug(99, "link(%d): %s", flag, link);
    608608        char* ip = NULL, *pos = NULL, *path = NULL;
     609       
    609610        ip = string_replace("http://", "", (char*)link, 0);
    610611
     
    623624        if(flag == 1)
    624625        {
    625                 string_resub("\": \"url=","\", \"",tmpstr);
    626        
    627                 while(string_find(",url=",tmpstr))
    628                 {
     626                string_resub("\": \"url=", "\", \"", tmpstr);
     627       
     628                while(string_find(",url=", tmpstr))
    629629                        tmpstr = string_replace(",url=", "\nurl=", tmpstr, 1);
    630                 }
    631        
    632                 tmpstr = string_decode(tmpstr,0);
     630       
     631                tmpstr = string_decode(tmpstr, 0);
    633632       
    634633                int count = 0;
     
    636635                struct splitstr* ret1 = NULL;
    637636                ret1 = strsplit(tmpstr, "\n", &count);
    638                 int max = count;
    639                 for( i = 0; i < max; i++){
    640                         if(string_find("type=video/mp4",(&ret1[i])->part))
    641                         {
    642                                 streamurl = ostrcat(streamurl, (&ret1[i])->part, 1, 0);
    643                                 int count2 = 0;
    644                                 struct splitstr* ret2 = NULL;
    645                                 ret2 = strsplit((&ret1[i])->part, "+", &count2);
    646                                 streamurl = ostrcat("", (&ret2[0])->part, 0, 0);
    647                                 free(ret2), ret2 = NULL;
     637                if(ret1 != NULL)
     638                {
     639                        int max = count;
     640                        for(i = 0; i < max; i++)
     641                        {
     642                                if(string_find("type=video/mp4",(&ret1[i])->part))
     643                                {
     644                                        streamurl = ostrcat(streamurl, (&ret1[i])->part, 1, 0);
     645                                        int count2 = 0;
     646                                        struct splitstr* ret2 = NULL;
     647                                        ret2 = strsplit((&ret1[i])->part, "+", &count2);
     648                                        if(ret2 != NULL)
     649                                        {
     650                                                free(streamurl);
     651                                                streamurl = ostrcat("", (&ret2[0])->part, 0, 0);
     652                                                free(ret2); ret2 = NULL;
     653                                        }
     654                                }
    648655                        }
    649                 }
    650                 free(ret1), ret1 = NULL;
    651                 free(tmpstr), tmpstr = NULL;
     656                        free(ret1); ret1 = NULL;
    652657                       
    653                 streamurl = string_replace("url=", "", streamurl, 1);
     658                        streamurl = string_replace("url=", "", streamurl, 1);
     659                }
     660                free(tmpstr); tmpstr = NULL;
    654661        }
    655662        else if(flag == 2)
    656663        {
    657                 string_resub("data:'","',",tmpstr);
     664                string_resub("data:'", "',", tmpstr);
    658665                debug(99, "tmpstr: %s", tmpstr);
    659666
    660                 char* tmpstr_tmp = NULL;
    661                 tmpstr_tmp = ostrcat(tmpstr_tmp, tmpstr, 1, 0);
    662                 htmldecode(tmpstr,tmpstr_tmp);
    663                 streamurl = ostrcat(url, tmpstr, 0, 0);
    664                 free(tmpstr), tmpstr = NULL;
    665                 debug(99, "streamurl: %s", streamurl);
    666                 streamurl = getstreamurl(streamurl, url, name, 3);
    667         }               
     667                htmldecode(tmpstr, tmpstr);
     668                tmpstr = ostrcat(url, tmpstr, 0, 1);
     669                debug(99, "streamurl: %s", tmpstr);
     670                streamurl = getstreamurl(tmpstr, url, name, 3);
     671                free(tmpstr); tmpstr = NULL;
     672        }
    668673        else if(flag == 3)
    669674        {
    670                 string_resub("<filename><![CDATA[","]]></filename>",tmpstr);
     675                string_resub("<filename><![CDATA[", "]]></filename>", tmpstr);
    671676                debug(99, "tmpstr: %s", tmpstr);
    672677
     
    675680                struct splitstr* ret1 = NULL;
    676681                ret1 = strsplit(tmpstr, "/", &count);
    677                 int max = count;
    678                 char* link = NULL;
    679                 char* path = NULL;
    680                 for( i = 0; i < max; i++){
    681                         if(i < 3)
    682                         {
    683                                 if(count > i)
    684                                         link = ostrcat(link, (&ret1[i])->part, 1, 0);
    685 
    686                                 if(i == 0)
    687                                         link = ostrcat(link, "//", 1, 0);
     682                if(ret1 != NULL)
     683                {
     684                        int max = count;
     685                        char* link = NULL;
     686                        char* path = NULL;
     687                        for(i = 0; i < max; i++)
     688                        {
     689                                if(i < 3)
     690                                {
     691                                        if(count > i)
     692                                                link = ostrcat(link, (&ret1[i])->part, 1, 0);
     693
     694                                        if(i == 0)
     695                                                link = ostrcat(link, "//", 1, 0);
     696                                        else
     697                                                link = ostrcat(link, "/", 1, 0);
     698                                }
    688699                                else
    689                                         link = ostrcat(link, "/", 1, 0);
     700                                {
     701                                        if(count > i)
     702                                                path = ostrcat(path, (&ret1[i])->part, 1, 0);
     703                                        if(i != max - 1)
     704                                                path = ostrcat(path, "/", 1, 0);
     705                                }
    690706                        }
    691                         else
    692                         {
    693                                 if(count > i)
    694                                         path = ostrcat(path, (&ret1[i])->part, 1, 0);
    695                                 if(i != max-1)
    696                                         path = ostrcat(path, "/", 1, 0);
    697                         }
    698                 }
    699                 free(ret1), ret1 = NULL;
    700                 free(tmpstr), tmpstr = NULL;
    701 
    702                 debug(99, "link: %s", link);
    703                 debug(99, "path: %s", path);
    704 
    705                 streamurl = ostrcat(link, " swfVfy=1 playpath=mp4:", 0, 0);
    706                 streamurl = ostrcat(streamurl, path, 1, 0);
    707                 streamurl = ostrcat(streamurl, " app=", 1, 0);
    708                 streamurl = ostrcat(streamurl, name, 1, 0);
    709                 streamurl = ostrcat(streamurl, "/_definst_ pageUrl=", 1, 0);
    710                 streamurl = ostrcat(streamurl, url, 1, 0);
    711                 streamurl = ostrcat(streamurl, "/p/ tcUrl=", 1, 0);
    712                 streamurl = ostrcat(streamurl, link, 1, 0);
    713                 streamurl = ostrcat(streamurl, " swfUrl=", 1, 0);
    714                 streamurl = ostrcat(streamurl, url, 1, 0);
    715                 streamurl = ostrcat(streamurl, "/includes/vodplayer.swf", 1, 0);               
    716 
    717                 if(link != NULL)
    718                         free(link), link = NULL;
    719 
    720                 if(path != NULL)
    721                         free(path), path = NULL;
    722                
     707                        free(ret1), ret1 = NULL;
     708
     709                        debug(99, "link: %s", link);
     710                        debug(99, "path: %s", path);
     711       
     712                        streamurl = ostrcat(link, " swfVfy=1 playpath=mp4:", 0, 0);
     713                        streamurl = ostrcat(streamurl, path, 1, 0);
     714                        streamurl = ostrcat(streamurl, " app=", 1, 0);
     715                        streamurl = ostrcat(streamurl, name, 1, 0);
     716                        streamurl = ostrcat(streamurl, "/_definst_ pageUrl=", 1, 0);
     717                        streamurl = ostrcat(streamurl, url, 1, 0);
     718                        streamurl = ostrcat(streamurl, "/p/ tcUrl=", 1, 0);
     719                        streamurl = ostrcat(streamurl, link, 1, 0);
     720                        streamurl = ostrcat(streamurl, " swfUrl=", 1, 0);
     721                        streamurl = ostrcat(streamurl, url, 1, 0);
     722                        streamurl = ostrcat(streamurl, "/includes/vodplayer.swf", 1, 0);               
     723       
     724                        if(link != NULL)
     725                                free(link), link = NULL;
     726       
     727                        if(path != NULL)
     728                                free(path), path = NULL;
     729                }
     730                free(tmpstr); tmpstr = NULL;
    723731                debug(99, "streamurl: %s", streamurl);
    724732        }
  • titan/titan/global.h

    r15235 r15299  
    11031103void htmldecode(char* to, char* from)
    11041104{
     1105        if(to == NULL || from == NULL) return;
     1106
    11051107        for(; *from != '\0'; ++to, ++from)
    11061108        {
     
    11181120void htmldecode2(char* to, char* from)
    11191121{
     1122        if(to == NULL || from == NULL) return;
     1123
    11201124        for(; *from != '\0'; ++to, ++from)
    11211125        {
     
    46224626char* string_decode(char* input, int flag)
    46234627{
    4624         if(input == NULL)
    4625         {
    4626                 return input;
    4627         }
    4628 
    4629         while(string_find("\\u00",input))
     4628        if(input == NULL) return input;
     4629
     4630        while(string_find("\\u00", input))
    46304631        {
    46314632                debug(210, "input: %s", input);
     
    46344635        }
    46354636
    4636         while(string_find("&amp;",input))
     4637        while(string_find("&amp;", input))
    46374638        {
    46384639                debug(210, "input: %s", input);
     
    46414642        }
    46424643
    4643         while(string_find("&gt;",input))
     4644        while(string_find("&gt;", input))
    46444645        {
    46454646                debug(210, "input: %s", input);
     
    46484649        }
    46494650
    4650         while(string_find("&lt;",input))
     4651        while(string_find("&lt;", input))
    46514652        {
    46524653                debug(210, "input: %s", input);
     
    46554656        }
    46564657       
    4657         while(string_find("&quot;",input))
     4658        while(string_find("&quot;", input))
    46584659        {
    46594660                debug(210, "input: %s", input);
     
    46624663        }
    46634664
    4664         while(string_find("&#x",input))
     4665        while(string_find("&#x", input))
    46654666        {
    46664667                debug(210, "out %s", input);
     
    46684669                debug(210, "input: %s", input);
    46694670        }
    4670         while(string_find("&#",input))
     4671        while(string_find("&#", input))
    46714672        {
    46724673                debug(210, "input: %s", input);
     
    46764677       
    46774678        if(flag == 1)
    4678                 htmldecode2(input,input);
     4679                htmldecode2(input, input);
    46794680        else
    4680                 htmldecode(input,input);
     4681                htmldecode(input, input);
    46814682                       
    4682         while(string_find(";",input))
     4683        while(string_find(";", input))
    46834684        {
    46844685                debug(210, "input: %s", input);
Note: See TracChangeset for help on using the changeset viewer.