Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision ae69689a

Von Sven Schöling vor fast 7 Jahren hinzugefügt

  • ID ae69689aea78c4a209523c22392683fa34ce77f3
  • Vorgänger 259a5727
  • Nachfolger 9ed16037

Controller::LoginScreen: AuthHandler::handle ohne Argumente aufrufen

Abgesehen davon, dass die Parameter nicht mehr benutzt werden, behebt
das einen ganz ekeligen Bug: "panic: attempt to copy freed scalar"

Das Problem ist, dass der AuthHandler selber das Einloggen übernimmt und
dafür %::myconfig neu beschreibt. Wenn währenddessen aber ein Alias von
einem %::myconfig Value auf dem Stack liegt, wird der sofort freigegeben
weil der Stack nicht refcounted ist.

Normalerweise fällt das nicht weiter auf, und die Daten werden im
final pass aufgeräumt. Aber mit backtrace_on_error wird bei einem Fehler
sofort ein Carp::confess aufgerufen, und das nimmt für den Stacktrace
den Stack auseinander und stolpert dabei über den bereits freigegeben Wert.

Unterschiede anzeigen:

SL/Controller/LoginScreen.pm
58 58

  
59 59
  %::myconfig      = $login ? $::auth->read_user(login => $login) : ();
60 60
  $::locale        = Locale->new($::myconfig{countrycode}) if $::myconfig{countrycode};
61
  SL::Dispatcher::AuthHandler::User->new->handle(countrycode => $::myconfig{countrycode});
61
  SL::Dispatcher::AuthHandler::User->new->handle;
62 62

  
63 63
  $::request->layout(SL::Layout::Dispatcher->new(style => $::myconfig{menustyle}));
64 64

  

Auch abrufbar als: Unified diff