author | drw <drw> | 2003-03-15 16:09:22 (UTC) |
---|---|---|
committer | drw <drw> | 2003-03-15 16:09:22 (UTC) |
commit | 69823b154b29cd62c9d53f7ebdaae4cb7dd61939 (patch) (unidiff) | |
tree | f678ad4bb0cf7005ce00e7231713372220c75cf6 | |
parent | ede78d4ab60d2c78427c4b1cc51cd9accc0aed1c (diff) | |
download | opie-69823b154b29cd62c9d53f7ebdaae4cb7dd61939.zip opie-69823b154b29cd62c9d53f7ebdaae4cb7dd61939.tar.gz opie-69823b154b29cd62c9d53f7ebdaae4cb7dd61939.tar.bz2 |
Added several checks to ensure we have a valid server or destination. Fixes bug #727, and also prevents several other segfault situations.
-rw-r--r-- | noncore/settings/aqpkg/settingsimpl.cpp | 36 |
1 files changed, 33 insertions, 3 deletions
diff --git a/noncore/settings/aqpkg/settingsimpl.cpp b/noncore/settings/aqpkg/settingsimpl.cpp index 9f611da..e2afada 100644 --- a/noncore/settings/aqpkg/settingsimpl.cpp +++ b/noncore/settings/aqpkg/settingsimpl.cpp | |||
@@ -286,11 +286,21 @@ void SettingsImpl :: editServer( int sel ) | |||
286 | { | 286 | { |
287 | currentSelectedServer = sel; | 287 | currentSelectedServer = sel; |
288 | Server *s = dataMgr->getServer( servers->currentText() ); | 288 | Server *s = dataMgr->getServer( servers->currentText() ); |
289 | if ( s ) | ||
290 | { | ||
289 | serverName = s->getServerName(); | 291 | serverName = s->getServerName(); |
290 | servername->setText( s->getServerName() ); | 292 | servername->setText( s->getServerName() ); |
291 | serverurl->setText( s->getServerUrl() ); | 293 | serverurl->setText( s->getServerUrl() ); |
292 | active->setChecked( s->isServerActive() ); | 294 | active->setChecked( s->isServerActive() ); |
293 | } | 295 | } |
296 | else | ||
297 | { | ||
298 | serverName = ""; | ||
299 | servername->setText( "" ); | ||
300 | serverurl->setText( "" ); | ||
301 | active->setChecked( false ); | ||
302 | } | ||
303 | } | ||
294 | 304 | ||
295 | void SettingsImpl :: newServer() | 305 | void SettingsImpl :: newServer() |
296 | { | 306 | { |
@@ -305,9 +315,12 @@ void SettingsImpl :: removeServer() | |||
305 | { | 315 | { |
306 | changed = true; | 316 | changed = true; |
307 | Server *s = dataMgr->getServer( servers->currentText() ); | 317 | Server *s = dataMgr->getServer( servers->currentText() ); |
318 | if ( s ) | ||
319 | { | ||
308 | dataMgr->getServerList().removeRef( s ); | 320 | dataMgr->getServerList().removeRef( s ); |
309 | servers->removeItem( currentSelectedServer ); | 321 | servers->removeItem( currentSelectedServer ); |
310 | } | 322 | } |
323 | } | ||
311 | 324 | ||
312 | void SettingsImpl :: changeServerDetails() | 325 | void SettingsImpl :: changeServerDetails() |
313 | { | 326 | { |
@@ -332,12 +345,12 @@ void SettingsImpl :: changeServerDetails() | |||
332 | if ( !newserver ) | 345 | if ( !newserver ) |
333 | { | 346 | { |
334 | Server *s = dataMgr->getServer( servers->currentText() ); | 347 | Server *s = dataMgr->getServer( servers->currentText() ); |
335 | 348 | if ( s ) | |
349 | { | ||
336 | // Update url | 350 | // Update url |
337 | s->setServerUrl( serverurl->text() ); | 351 | s->setServerUrl( serverurl->text() ); |
338 | s->setActive( active->isChecked() ); | 352 | s->setActive( active->isChecked() ); |
339 | 353 | ||
340 | |||
341 | // Check if server name has changed, if it has then we need to replace the key in the map | 354 | // Check if server name has changed, if it has then we need to replace the key in the map |
342 | if ( serverName != newName ) | 355 | if ( serverName != newName ) |
343 | { | 356 | { |
@@ -348,6 +361,7 @@ void SettingsImpl :: changeServerDetails() | |||
348 | // Update list box | 361 | // Update list box |
349 | servers->changeItem( newName, currentSelectedServer ); | 362 | servers->changeItem( newName, currentSelectedServer ); |
350 | } | 363 | } |
364 | } | ||
351 | else | 365 | else |
352 | { | 366 | { |
353 | Server s( newName, serverurl->text() ); | 367 | Server s( newName, serverurl->text() ); |
@@ -365,11 +379,21 @@ void SettingsImpl :: editDestination( int sel ) | |||
365 | { | 379 | { |
366 | currentSelectedDestination = sel; | 380 | currentSelectedDestination = sel; |
367 | Destination *d = dataMgr->getDestination( destinations->currentText() ); | 381 | Destination *d = dataMgr->getDestination( destinations->currentText() ); |
382 | if ( d ) | ||
383 | { | ||
368 | destinationName = d->getDestinationName(); | 384 | destinationName = d->getDestinationName(); |
369 | destinationname->setText( d->getDestinationName() ); | 385 | destinationname->setText( d->getDestinationName() ); |
370 | destinationurl->setText( d->getDestinationPath() ); | 386 | destinationurl->setText( d->getDestinationPath() ); |
371 | linkToRoot->setChecked( d->linkToRoot() ); | 387 | linkToRoot->setChecked( d->linkToRoot() ); |
372 | } | 388 | } |
389 | else | ||
390 | { | ||
391 | destinationName = ""; | ||
392 | destinationname->setText( "" ); | ||
393 | destinationurl->setText( "" ); | ||
394 | linkToRoot->setChecked( false ); | ||
395 | } | ||
396 | } | ||
373 | 397 | ||
374 | void SettingsImpl :: newDestination() | 398 | void SettingsImpl :: newDestination() |
375 | { | 399 | { |
@@ -384,9 +408,12 @@ void SettingsImpl :: removeDestination() | |||
384 | { | 408 | { |
385 | changed = true; | 409 | changed = true; |
386 | Destination *d = dataMgr->getDestination( destinations->currentText() ); | 410 | Destination *d = dataMgr->getDestination( destinations->currentText() ); |
411 | if ( d ) | ||
412 | { | ||
387 | dataMgr->getDestinationList().removeRef( d ); | 413 | dataMgr->getDestinationList().removeRef( d ); |
388 | destinations->removeItem( currentSelectedDestination ); | 414 | destinations->removeItem( currentSelectedDestination ); |
389 | } | 415 | } |
416 | } | ||
390 | 417 | ||
391 | void SettingsImpl :: changeDestinationDetails() | 418 | void SettingsImpl :: changeDestinationDetails() |
392 | { | 419 | { |
@@ -401,7 +428,8 @@ void SettingsImpl :: changeDestinationDetails() | |||
401 | if ( !newdestination ) | 428 | if ( !newdestination ) |
402 | { | 429 | { |
403 | Destination *d = dataMgr->getDestination( destinations->currentText() ); | 430 | Destination *d = dataMgr->getDestination( destinations->currentText() ); |
404 | 431 | if ( d ) | |
432 | { | ||
405 | // Update url | 433 | // Update url |
406 | d->setDestinationPath( destinationurl->text() ); | 434 | d->setDestinationPath( destinationurl->text() ); |
407 | d->linkToRoot( linkToRoot->isChecked() ); | 435 | d->linkToRoot( linkToRoot->isChecked() ); |
@@ -415,6 +443,7 @@ void SettingsImpl :: changeDestinationDetails() | |||
415 | // Update list box | 443 | // Update list box |
416 | destinations->changeItem( newName, currentSelectedDestination ); | 444 | destinations->changeItem( newName, currentSelectedDestination ); |
417 | } | 445 | } |
446 | |||
418 | #ifdef QWS | 447 | #ifdef QWS |
419 | QString key = newName; | 448 | QString key = newName; |
420 | key += "_linkToRoot"; | 449 | key += "_linkToRoot"; |
@@ -422,6 +451,7 @@ void SettingsImpl :: changeDestinationDetails() | |||
422 | cfg.writeEntry( key, val ); | 451 | cfg.writeEntry( key, val ); |
423 | #endif | 452 | #endif |
424 | } | 453 | } |
454 | } | ||
425 | else | 455 | else |
426 | { | 456 | { |
427 | dataMgr->getDestinationList().append( new Destination( newName, destinationurl->text() ) ); | 457 | dataMgr->getDestinationList().append( new Destination( newName, destinationurl->text() ) ); |