Fossil SCM
Fix bugs that can cause a segfault if a blank check-in comment is entered.
Commit
1871a93dd4908cb547189d8c6cda978a82bfcdb6
Parent
fad606934c49623…
2 files changed
+3
+5
-3
+3
| --- src/checkin.c | ||
| +++ src/checkin.c | ||
| @@ -392,10 +392,13 @@ | ||
| 392 | 392 | } |
| 393 | 393 | db_finalize(&q); |
| 394 | 394 | |
| 395 | 395 | /* Create the manifest */ |
| 396 | 396 | blob_zero(&manifest); |
| 397 | + if( blob_size(&comment)==0 ){ | |
| 398 | + blob_append(&comment, "(no comment)", -1); | |
| 399 | + } | |
| 397 | 400 | blob_appendf(&manifest, "C %F\n", blob_str(&comment)); |
| 398 | 401 | zDate = db_text(0, "SELECT datetime('now')"); |
| 399 | 402 | zDate[10] = 'T'; |
| 400 | 403 | blob_appendf(&manifest, "D %s\n", zDate); |
| 401 | 404 | db_prepare(&q, |
| 402 | 405 |
| --- src/checkin.c | |
| +++ src/checkin.c | |
| @@ -392,10 +392,13 @@ | |
| 392 | } |
| 393 | db_finalize(&q); |
| 394 | |
| 395 | /* Create the manifest */ |
| 396 | blob_zero(&manifest); |
| 397 | blob_appendf(&manifest, "C %F\n", blob_str(&comment)); |
| 398 | zDate = db_text(0, "SELECT datetime('now')"); |
| 399 | zDate[10] = 'T'; |
| 400 | blob_appendf(&manifest, "D %s\n", zDate); |
| 401 | db_prepare(&q, |
| 402 |
| --- src/checkin.c | |
| +++ src/checkin.c | |
| @@ -392,10 +392,13 @@ | |
| 392 | } |
| 393 | db_finalize(&q); |
| 394 | |
| 395 | /* Create the manifest */ |
| 396 | blob_zero(&manifest); |
| 397 | if( blob_size(&comment)==0 ){ |
| 398 | blob_append(&comment, "(no comment)", -1); |
| 399 | } |
| 400 | blob_appendf(&manifest, "C %F\n", blob_str(&comment)); |
| 401 | zDate = db_text(0, "SELECT datetime('now')"); |
| 402 | zDate[10] = 'T'; |
| 403 | blob_appendf(&manifest, "D %s\n", zDate); |
| 404 | db_prepare(&q, |
| 405 |
+5
-3
| --- src/vfile.c | ||
| +++ src/vfile.c | ||
| @@ -384,15 +384,18 @@ | ||
| 384 | 384 | int i, fid; |
| 385 | 385 | Blob file, mfile; |
| 386 | 386 | Manifest m; |
| 387 | 387 | char zBuf[100]; |
| 388 | 388 | |
| 389 | + blob_zero(pOut); | |
| 390 | + if( pManOut ){ | |
| 391 | + blob_zero(pManOut); | |
| 392 | + } | |
| 389 | 393 | db_must_be_within_tree(); |
| 390 | 394 | content_get(vid, &mfile); |
| 391 | 395 | if( manifest_parse(&m, &mfile)==0 ){ |
| 392 | - blob_zero(pOut); | |
| 393 | - return; | |
| 396 | + fossil_panic("manifest file (%d) is malformed", vid); | |
| 394 | 397 | } |
| 395 | 398 | for(i=0; i<m.nFile; i++){ |
| 396 | 399 | fid = uuid_to_rid(m.aFile[i].zUuid, 0); |
| 397 | 400 | md5sum_step_text(m.aFile[i].zName, -1); |
| 398 | 401 | content_get(fid, &file); |
| @@ -400,11 +403,10 @@ | ||
| 400 | 403 | md5sum_step_text(zBuf, -1); |
| 401 | 404 | md5sum_step_blob(&file); |
| 402 | 405 | blob_reset(&file); |
| 403 | 406 | } |
| 404 | 407 | if( pManOut ){ |
| 405 | - blob_zero(pManOut); | |
| 406 | 408 | blob_append(pManOut, m.zRepoCksum, -1); |
| 407 | 409 | } |
| 408 | 410 | manifest_clear(&m); |
| 409 | 411 | md5sum_finish(pOut); |
| 410 | 412 | } |
| 411 | 413 |
| --- src/vfile.c | |
| +++ src/vfile.c | |
| @@ -384,15 +384,18 @@ | |
| 384 | int i, fid; |
| 385 | Blob file, mfile; |
| 386 | Manifest m; |
| 387 | char zBuf[100]; |
| 388 | |
| 389 | db_must_be_within_tree(); |
| 390 | content_get(vid, &mfile); |
| 391 | if( manifest_parse(&m, &mfile)==0 ){ |
| 392 | blob_zero(pOut); |
| 393 | return; |
| 394 | } |
| 395 | for(i=0; i<m.nFile; i++){ |
| 396 | fid = uuid_to_rid(m.aFile[i].zUuid, 0); |
| 397 | md5sum_step_text(m.aFile[i].zName, -1); |
| 398 | content_get(fid, &file); |
| @@ -400,11 +403,10 @@ | |
| 400 | md5sum_step_text(zBuf, -1); |
| 401 | md5sum_step_blob(&file); |
| 402 | blob_reset(&file); |
| 403 | } |
| 404 | if( pManOut ){ |
| 405 | blob_zero(pManOut); |
| 406 | blob_append(pManOut, m.zRepoCksum, -1); |
| 407 | } |
| 408 | manifest_clear(&m); |
| 409 | md5sum_finish(pOut); |
| 410 | } |
| 411 |
| --- src/vfile.c | |
| +++ src/vfile.c | |
| @@ -384,15 +384,18 @@ | |
| 384 | int i, fid; |
| 385 | Blob file, mfile; |
| 386 | Manifest m; |
| 387 | char zBuf[100]; |
| 388 | |
| 389 | blob_zero(pOut); |
| 390 | if( pManOut ){ |
| 391 | blob_zero(pManOut); |
| 392 | } |
| 393 | db_must_be_within_tree(); |
| 394 | content_get(vid, &mfile); |
| 395 | if( manifest_parse(&m, &mfile)==0 ){ |
| 396 | fossil_panic("manifest file (%d) is malformed", vid); |
| 397 | } |
| 398 | for(i=0; i<m.nFile; i++){ |
| 399 | fid = uuid_to_rid(m.aFile[i].zUuid, 0); |
| 400 | md5sum_step_text(m.aFile[i].zName, -1); |
| 401 | content_get(fid, &file); |
| @@ -400,11 +403,10 @@ | |
| 403 | md5sum_step_text(zBuf, -1); |
| 404 | md5sum_step_blob(&file); |
| 405 | blob_reset(&file); |
| 406 | } |
| 407 | if( pManOut ){ |
| 408 | blob_append(pManOut, m.zRepoCksum, -1); |
| 409 | } |
| 410 | manifest_clear(&m); |
| 411 | md5sum_finish(pOut); |
| 412 | } |
| 413 |