Changeset 3219 for trunk/lib/MT/App.pm

Show
Ignore:
Timestamp:
12/03/08 07:58:25 (12 months ago)
Author:
fumiakiy
Message:

Merging the latest of fireball branch to trunk. svn merge -r3095:3215 http://code.sixapart.com/svn/movabletype/branches/fireball . (two conflicts resolved; MT.pm, mt.php and mt-check.cgi merged manually.)

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/lib/MT/App.pm

    r3082 r3219  
    19741974 
    19751975        $url = $q->param('url'); 
    1976         if ( $url && !is_url($url) ) { 
     1976        if ( $url && (!is_url($url) || ($url =~ m/[<>]/)) ) { 
    19771977            return $app->error( $app->translate("URL is invalid.") ); 
    19781978        } 
     
    19871987        return $app->error( $app->translate("User requires username.") ); 
    19881988    } 
     1989    if ( $name =~ m/([<>])/) { 
     1990        return $app->error( $app->translate("[_1] contains an invalid character: [_2]", $app->translate("Username"), encode_html( $1 ) ) ); 
     1991    } 
    19891992 
    19901993    my $existing = MT::Author->exist( { name => $name } ); 
     
    19961999    unless ($nickname) { 
    19972000        return $app->error( $app->translate("User requires display name.") ); 
     2001    } 
     2002    if ( $nickname =~ m/([<>])/) { 
     2003        return $app->error( $app->translate("[_1] contains an invalid character: [_2]", $app->translate("Display Name"), encode_html( $1 ) ) ); 
    19982004    } 
    19992005 
     
    20042010            return $app->error( 
    20052011                $app->translate("Email Address is invalid.") ); 
     2012        } 
     2013 
     2014        if ( $email =~ m/([<>])/) { 
     2015            return $app->error( $app->translate("[_1] contains an invalid character: [_2]", $app->translate("Email Address"), encode_html( $1 ) ) ); 
    20062016        } 
    20072017    } 
     
    23992409    my $url     = $app->uri; 
    24002410    my $blog_id = $app->param('blog_id'); 
     2411 
    24012412    if ( ref $param ne 'HASH' ) { 
    2402  
    24032413        # old scalar signature 
    24042414        $param = { error => $param }; 
    24052415    } 
    24062416 
    2407     if ( $MT::DebugMode && $@ ) { 
    2408         $param->{error} = '<pre>' . encode_html( $param->{error} ) . '</pre>'; 
     2417    my $error = $param->{error}; 
     2418 
     2419    if ( $MT::DebugMode ) { 
     2420        if ( $@ ) { 
     2421            # Use 'pre' tag to wrap Perl error 
     2422            $error = '<pre>' . encode_html( $error ) . '</pre>'; 
     2423        } 
    24092424    } 
    24102425    else { 
    2411         $param->{error} = encode_html( $param->{error} ); 
    2412         $param->{error} 
     2426        if ($error =~ m/^(.+?)( at .+? line \d+)(.*)$/s) { 
     2427            # Hide any module path info from perl error message 
     2428            # Information could be revealing info about where MT app 
     2429            # resides on server, and what version is being used, which 
     2430            # may be helpful forensics to an attacker. 
     2431            $error = $1; 
     2432        } 
     2433        $error = encode_html( $error ); 
     2434        $error 
    24132435            =~ s!(https?://\S+)!<a href="$1" target="_blank">$1</a>!g; 
    24142436    } 
    2415     $tmpl = $app->load_tmpl('error.tmpl') 
    2416         or return "Can't load error template; got error '" 
    2417         . encode_html( $app->errstr ) 
    2418         . "'. Giving up. Original error was <pre>$param->{error}</pre>"; 
     2437 
     2438    $tmpl = $app->load_tmpl('error.tmpl'); 
     2439    if (!$tmpl) { 
     2440        $error = '<pre>' . $error . '</pre>' unless $error =~ m/<pre>/; 
     2441        return "Can't load error template; got error '" 
     2442            . encode_html( $app->errstr ) 
     2443            . "'. Giving up. Original error was: $error"; 
     2444    } 
    24192445    my $type = $app->param('__type') || ''; 
    24202446    if ( $type eq 'dialog' ) { 
     
    24282454        $param->{value}  ||= $app->{value}  || $app->translate("Go Back"); 
    24292455    } 
     2456    local $param->{error} = $error; 
    24302457    $tmpl->param($param); 
    24312458    my $out = $tmpl->output; 
    24322459    if ( !defined $out ) { 
     2460        $error = '<pre>' . $error . '</pre>' unless $error =~ m/<pre>/; 
    24332461        return 
    24342462              "Can't build error template; got error '" 
    24352463            . encode_html( $tmpl->errstr ) 
    2436             . "'. Giving up. Original error was <pre>$param->{error}</pre>"; 
     2464            . "'. Giving up. Original error was: $error"; 
    24372465    } 
    24382466    return $app->l10n_filter($out);