summaryrefslogtreecommitdiff
path: root/core
authorerik <erik>2007-01-19 01:20:57 (UTC)
committer erik <erik>2007-01-19 01:20:57 (UTC)
commitf60301bab1f8aa3693089036a3791a01ae6f9db8 (patch) (side-by-side diff)
tree876aef9930a5f85762bcc17e0310921617a568da /core
parent32343107b30904806d02672955c57ed53d39fe79 (diff)
downloadopie-f60301bab1f8aa3693089036a3791a01ae6f9db8.zip
opie-f60301bab1f8aa3693089036a3791a01ae6f9db8.tar.gz
opie-f60301bab1f8aa3693089036a3791a01ae6f9db8.tar.bz2
core/opie-login/loginwindowimpl.cpp has a fix to properly free strings
that were dup'ed. noncore/apps/opie-reader/Bkmks.cpp deletes a temporary pointer that was not being properly disposed of.
Diffstat (limited to 'core') (more/less context) (ignore whitespace changes)
-rw-r--r--core/opie-login/loginwindowimpl.cpp25
1 files changed, 21 insertions, 4 deletions
diff --git a/core/opie-login/loginwindowimpl.cpp b/core/opie-login/loginwindowimpl.cpp
index 547a9b3..b9a286d 100644
--- a/core/opie-login/loginwindowimpl.cpp
+++ b/core/opie-login/loginwindowimpl.cpp
@@ -222,21 +222,35 @@ public:
private:
bool m_visible;
};
void LoginWindowImpl::login ( )
{
- const char *user = ::strdup ( m_user-> currentText ( ). local8Bit ( ));
- const char *pass = ::strdup ( m_password-> text ( ). local8Bit ( ));
+ char *const user = ::strdup ( m_user-> currentText ( ). local8Bit ( ));
+ char *pass = ::strdup ( m_password-> text ( ). local8Bit ( ));
- if ( !user || !user [0] )
+ if ( !user ) {
+ if ( pass )
+ free( pass );
return;
- if ( !pass )
+ }
+ if ( !user [0] ) {
+ free( user );
+ if ( pass )
+ free( pass );
+ return;
+ }
+ bool passwordIsEmpty = false;
+ if ( !pass ) {
+ passwordIsEmpty = true;
pass = "";
+ }
if ( lApp-> checkPassword ( user, pass )) {
+ if ( !passwordIsEmpty )
+ free(pass);
Config cfg ( "opie-login" );
cfg. setGroup ( "General" );
cfg. writeEntry ( "LastLogin", user );
cfg. write ( );
lApp-> setLoginAs ( user );
@@ -246,12 +260,15 @@ void LoginWindowImpl::login ( )
new WaitLogo ( );
// WaitLogo::showEvent() calls qApp-> quit()
}
else {
QMessageBox::warning ( this, tr( "Wrong password" ), tr( "The given password is incorrect." ));
m_password-> clear ( );
+ free( user );
+ if ( !passwordIsEmpty )
+ free( pass );
}
}
void LoginWindowImpl::showPasswordDialog() {
PasswordDialogImpl dia( this );
dia.showMaximized();