Fossil SCM
Bug fix in the compute_ues_files() subroutine, found when a query from the Meta AI spider caused the server to abort with an invalid SQL error.
Commit
f2fa98329d31f8461cd121e2e9bf39160c408107055f4c57be1748b54b5286bd
Parent
ec26e850c13afc3…
1 file changed
+5
-1
+5
-1
| --- src/descendants.c | ||
| +++ src/descendants.c | ||
| @@ -679,10 +679,11 @@ | ||
| 679 | 679 | Bag pending; |
| 680 | 680 | Blob ins = BLOB_INITIALIZER; |
| 681 | 681 | int nIns = 0; |
| 682 | 682 | Stmt q; |
| 683 | 683 | int rid; |
| 684 | + int nTerm = 0; | |
| 684 | 685 | |
| 685 | 686 | bag_init(&seen); |
| 686 | 687 | bag_init(&pending); |
| 687 | 688 | blob_append_sql(&ins, "INSERT OR IGNORE INTO \"%w\" VALUES", zTab); |
| 688 | 689 | db_prepare(&q, "SELECT mid FROM mlink WHERE fid=%d", fid); |
| @@ -689,19 +690,21 @@ | ||
| 689 | 690 | while( db_step(&q)==SQLITE_ROW ){ |
| 690 | 691 | int mid = db_column_int(&q, 0); |
| 691 | 692 | bag_insert(&pending, mid); |
| 692 | 693 | bag_insert(&seen, mid); |
| 693 | 694 | uses_file_append_term(&ins, &nIns, mid); |
| 695 | + nTerm++; | |
| 694 | 696 | } |
| 695 | 697 | db_finalize(&q); |
| 696 | 698 | |
| 697 | 699 | db_prepare(&q, "SELECT mid FROM mlink WHERE pid=%d", fid); |
| 698 | 700 | while( db_step(&q)==SQLITE_ROW ){ |
| 699 | 701 | int mid = db_column_int(&q, 0); |
| 700 | 702 | bag_insert(&seen, mid); |
| 701 | 703 | if( usesFlags & USESFILE_DELETE ){ |
| 702 | 704 | uses_file_append_term(&ins, &nIns, mid); |
| 705 | + nTerm++; | |
| 703 | 706 | } |
| 704 | 707 | } |
| 705 | 708 | db_finalize(&q); |
| 706 | 709 | db_prepare(&q, "SELECT cid FROM plink WHERE pid=:rid AND isprim"); |
| 707 | 710 | |
| @@ -712,14 +715,15 @@ | ||
| 712 | 715 | int mid = db_column_int(&q, 0); |
| 713 | 716 | if( bag_find(&seen, mid) ) continue; |
| 714 | 717 | bag_insert(&seen, mid); |
| 715 | 718 | bag_insert(&pending, mid); |
| 716 | 719 | uses_file_append_term(&ins, &nIns, mid); |
| 720 | + nTerm++; | |
| 717 | 721 | } |
| 718 | 722 | db_reset(&q); |
| 719 | 723 | } |
| 720 | 724 | db_finalize(&q); |
| 721 | - db_exec_sql(blob_str(&ins)); | |
| 725 | + if( nTerm>0 ) db_exec_sql(blob_str(&ins)); | |
| 722 | 726 | blob_reset(&ins); |
| 723 | 727 | bag_clear(&seen); |
| 724 | 728 | bag_clear(&pending); |
| 725 | 729 | } |
| 726 | 730 |
| --- src/descendants.c | |
| +++ src/descendants.c | |
| @@ -679,10 +679,11 @@ | |
| 679 | Bag pending; |
| 680 | Blob ins = BLOB_INITIALIZER; |
| 681 | int nIns = 0; |
| 682 | Stmt q; |
| 683 | int rid; |
| 684 | |
| 685 | bag_init(&seen); |
| 686 | bag_init(&pending); |
| 687 | blob_append_sql(&ins, "INSERT OR IGNORE INTO \"%w\" VALUES", zTab); |
| 688 | db_prepare(&q, "SELECT mid FROM mlink WHERE fid=%d", fid); |
| @@ -689,19 +690,21 @@ | |
| 689 | while( db_step(&q)==SQLITE_ROW ){ |
| 690 | int mid = db_column_int(&q, 0); |
| 691 | bag_insert(&pending, mid); |
| 692 | bag_insert(&seen, mid); |
| 693 | uses_file_append_term(&ins, &nIns, mid); |
| 694 | } |
| 695 | db_finalize(&q); |
| 696 | |
| 697 | db_prepare(&q, "SELECT mid FROM mlink WHERE pid=%d", fid); |
| 698 | while( db_step(&q)==SQLITE_ROW ){ |
| 699 | int mid = db_column_int(&q, 0); |
| 700 | bag_insert(&seen, mid); |
| 701 | if( usesFlags & USESFILE_DELETE ){ |
| 702 | uses_file_append_term(&ins, &nIns, mid); |
| 703 | } |
| 704 | } |
| 705 | db_finalize(&q); |
| 706 | db_prepare(&q, "SELECT cid FROM plink WHERE pid=:rid AND isprim"); |
| 707 | |
| @@ -712,14 +715,15 @@ | |
| 712 | int mid = db_column_int(&q, 0); |
| 713 | if( bag_find(&seen, mid) ) continue; |
| 714 | bag_insert(&seen, mid); |
| 715 | bag_insert(&pending, mid); |
| 716 | uses_file_append_term(&ins, &nIns, mid); |
| 717 | } |
| 718 | db_reset(&q); |
| 719 | } |
| 720 | db_finalize(&q); |
| 721 | db_exec_sql(blob_str(&ins)); |
| 722 | blob_reset(&ins); |
| 723 | bag_clear(&seen); |
| 724 | bag_clear(&pending); |
| 725 | } |
| 726 |
| --- src/descendants.c | |
| +++ src/descendants.c | |
| @@ -679,10 +679,11 @@ | |
| 679 | Bag pending; |
| 680 | Blob ins = BLOB_INITIALIZER; |
| 681 | int nIns = 0; |
| 682 | Stmt q; |
| 683 | int rid; |
| 684 | int nTerm = 0; |
| 685 | |
| 686 | bag_init(&seen); |
| 687 | bag_init(&pending); |
| 688 | blob_append_sql(&ins, "INSERT OR IGNORE INTO \"%w\" VALUES", zTab); |
| 689 | db_prepare(&q, "SELECT mid FROM mlink WHERE fid=%d", fid); |
| @@ -689,19 +690,21 @@ | |
| 690 | while( db_step(&q)==SQLITE_ROW ){ |
| 691 | int mid = db_column_int(&q, 0); |
| 692 | bag_insert(&pending, mid); |
| 693 | bag_insert(&seen, mid); |
| 694 | uses_file_append_term(&ins, &nIns, mid); |
| 695 | nTerm++; |
| 696 | } |
| 697 | db_finalize(&q); |
| 698 | |
| 699 | db_prepare(&q, "SELECT mid FROM mlink WHERE pid=%d", fid); |
| 700 | while( db_step(&q)==SQLITE_ROW ){ |
| 701 | int mid = db_column_int(&q, 0); |
| 702 | bag_insert(&seen, mid); |
| 703 | if( usesFlags & USESFILE_DELETE ){ |
| 704 | uses_file_append_term(&ins, &nIns, mid); |
| 705 | nTerm++; |
| 706 | } |
| 707 | } |
| 708 | db_finalize(&q); |
| 709 | db_prepare(&q, "SELECT cid FROM plink WHERE pid=:rid AND isprim"); |
| 710 | |
| @@ -712,14 +715,15 @@ | |
| 715 | int mid = db_column_int(&q, 0); |
| 716 | if( bag_find(&seen, mid) ) continue; |
| 717 | bag_insert(&seen, mid); |
| 718 | bag_insert(&pending, mid); |
| 719 | uses_file_append_term(&ins, &nIns, mid); |
| 720 | nTerm++; |
| 721 | } |
| 722 | db_reset(&q); |
| 723 | } |
| 724 | db_finalize(&q); |
| 725 | if( nTerm>0 ) db_exec_sql(blob_str(&ins)); |
| 726 | blob_reset(&ins); |
| 727 | bag_clear(&seen); |
| 728 | bag_clear(&pending); |
| 729 | } |
| 730 |