Fossil SCM
Removed the cleanup of g.zXYZ because there's simply too high of a chance that future changes would turn one of those free() calls into a double-free or passing an invalid pointer to free().
Commit
d60dd7afb02d16b6816bee67995c1bcd5d1e8c995d1a6bc419736fce90e25367
Parent
5f36a86a73aef8b…
1 file changed
-20
-20
| --- src/main.c | ||
| +++ src/main.c | ||
| @@ -390,30 +390,10 @@ | ||
| 390 | 390 | memset(&g.json, 0, sizeof(g.json)); |
| 391 | 391 | #endif |
| 392 | 392 | if(g.db){ |
| 393 | 393 | db_close(0); |
| 394 | 394 | } |
| 395 | - fossil_free(g.ckinLockFail); | |
| 396 | - fossil_free(g.zAuxSchema); | |
| 397 | - fossil_free(g.zConfigDbName); | |
| 398 | - fossil_free(g.zErrMsg); | |
| 399 | - fossil_free(g.zHttpAuth); | |
| 400 | - fossil_free(g.zIpAddr); | |
| 401 | - fossil_free(g.zLocalDbName); | |
| 402 | - fossil_free(g.zLocalRoot); | |
| 403 | - fossil_free(g.zNonce); | |
| 404 | - fossil_free(g.zSshCmd); | |
| 405 | -#define never_free(x) | |
| 406 | - never_free(g.zTop/* sometimes part of another string */); | |
| 407 | - never_free(g.zPath /* sometimes part of another string */); | |
| 408 | - never_free(g.zBaseURL /* might be the same as g.zTop */); | |
| 409 | - never_free(g.zRepositoryOption/* sometimes static */); | |
| 410 | - never_free(g.zRepositoryName /* sometimes static */); | |
| 411 | - never_free(g.zOpenRevision /* sometimes static */); | |
| 412 | - never_free(g.zHttpsURL /* sometimes = g.zBaseUrl */); | |
| 413 | - never_free(g.zExtra /* might be part of another string */); | |
| 414 | -#undef never_free | |
| 415 | 395 | manifest_clear_cache(); |
| 416 | 396 | content_clear_cache(1); |
| 417 | 397 | rebuild_clear_cache(); |
| 418 | 398 | if(fossilFreeAtExit.n>0){ |
| 419 | 399 | int i; |
| 420 | 400 |
| --- src/main.c | |
| +++ src/main.c | |
| @@ -390,30 +390,10 @@ | |
| 390 | memset(&g.json, 0, sizeof(g.json)); |
| 391 | #endif |
| 392 | if(g.db){ |
| 393 | db_close(0); |
| 394 | } |
| 395 | fossil_free(g.ckinLockFail); |
| 396 | fossil_free(g.zAuxSchema); |
| 397 | fossil_free(g.zConfigDbName); |
| 398 | fossil_free(g.zErrMsg); |
| 399 | fossil_free(g.zHttpAuth); |
| 400 | fossil_free(g.zIpAddr); |
| 401 | fossil_free(g.zLocalDbName); |
| 402 | fossil_free(g.zLocalRoot); |
| 403 | fossil_free(g.zNonce); |
| 404 | fossil_free(g.zSshCmd); |
| 405 | #define never_free(x) |
| 406 | never_free(g.zTop/* sometimes part of another string */); |
| 407 | never_free(g.zPath /* sometimes part of another string */); |
| 408 | never_free(g.zBaseURL /* might be the same as g.zTop */); |
| 409 | never_free(g.zRepositoryOption/* sometimes static */); |
| 410 | never_free(g.zRepositoryName /* sometimes static */); |
| 411 | never_free(g.zOpenRevision /* sometimes static */); |
| 412 | never_free(g.zHttpsURL /* sometimes = g.zBaseUrl */); |
| 413 | never_free(g.zExtra /* might be part of another string */); |
| 414 | #undef never_free |
| 415 | manifest_clear_cache(); |
| 416 | content_clear_cache(1); |
| 417 | rebuild_clear_cache(); |
| 418 | if(fossilFreeAtExit.n>0){ |
| 419 | int i; |
| 420 |
| --- src/main.c | |
| +++ src/main.c | |
| @@ -390,30 +390,10 @@ | |
| 390 | memset(&g.json, 0, sizeof(g.json)); |
| 391 | #endif |
| 392 | if(g.db){ |
| 393 | db_close(0); |
| 394 | } |
| 395 | manifest_clear_cache(); |
| 396 | content_clear_cache(1); |
| 397 | rebuild_clear_cache(); |
| 398 | if(fossilFreeAtExit.n>0){ |
| 399 | int i; |
| 400 |