Fossil SCM
Make sure a user does not attempt to "fossil add" the manifest or the _FOSSIL_ files.
Commit
20bcbcf2f2b2518f1745f473337ce5c524e2a4cf
Parent
a040ae6e17e68b6…
1 file changed
+6
-3
+6
-3
| --- src/add.c | ||
| +++ src/add.c | ||
| @@ -53,17 +53,20 @@ | ||
| 53 | 53 | |
| 54 | 54 | zName = mprintf("%s", g.argv[i]); |
| 55 | 55 | isDir = file_isdir(zName); |
| 56 | 56 | if( isDir==1 ) continue; |
| 57 | 57 | if( isDir==0 ){ |
| 58 | - fossil_panic("not found: %s\n", zName); | |
| 58 | + fossil_fatal("not found: %s", zName); | |
| 59 | 59 | } |
| 60 | 60 | if( isDir==2 && access(zName, R_OK) ){ |
| 61 | - fossil_panic("cannot open %s\n", zName); | |
| 61 | + fossil_fatal("cannot open %s", zName); | |
| 62 | 62 | } |
| 63 | 63 | file_tree_name(zName, &pathname); |
| 64 | 64 | zPath = blob_str(&pathname); |
| 65 | + if( strcmp(zPath, "manifest")==0 || strcmp(zPath, "_FOSSIL_")==0 ){ | |
| 66 | + fossil_fatal("cannot add %s", zPath); | |
| 67 | + } | |
| 65 | 68 | if( db_exists("SELECT 1 FROM vfile WHERE pathname=%Q", zPath) ){ |
| 66 | 69 | db_multi_exec("UPDATE vfile SET deleted=0 WHERE pathname=%Q", zPath); |
| 67 | 70 | }else{ |
| 68 | 71 | db_multi_exec( |
| 69 | 72 | "INSERT INTO vfile(vid,deleted,rid,mrid,pathname)" |
| @@ -99,15 +102,15 @@ | ||
| 99 | 102 | zName = mprintf("%s", g.argv[i]); |
| 100 | 103 | file_tree_name(zName, &pathname); |
| 101 | 104 | zPath = blob_str(&pathname); |
| 102 | 105 | if( !db_exists( |
| 103 | 106 | "SELECT 1 FROM vfile WHERE pathname=%Q AND NOT deleted", zPath) ){ |
| 104 | - fossil_panic("not in the repository: %s\n", zName); | |
| 107 | + fossil_fatal("not in the repository: %s", zName); | |
| 105 | 108 | }else{ |
| 106 | 109 | db_multi_exec("UPDATE vfile SET deleted=1 WHERE pathname=%Q", zPath); |
| 107 | 110 | } |
| 108 | 111 | blob_reset(&pathname); |
| 109 | 112 | free(zName); |
| 110 | 113 | } |
| 111 | 114 | db_multi_exec("DELETE FROM vfile WHERE deleted AND rid=0"); |
| 112 | 115 | db_end_transaction(0); |
| 113 | 116 | } |
| 114 | 117 |
| --- src/add.c | |
| +++ src/add.c | |
| @@ -53,17 +53,20 @@ | |
| 53 | |
| 54 | zName = mprintf("%s", g.argv[i]); |
| 55 | isDir = file_isdir(zName); |
| 56 | if( isDir==1 ) continue; |
| 57 | if( isDir==0 ){ |
| 58 | fossil_panic("not found: %s\n", zName); |
| 59 | } |
| 60 | if( isDir==2 && access(zName, R_OK) ){ |
| 61 | fossil_panic("cannot open %s\n", zName); |
| 62 | } |
| 63 | file_tree_name(zName, &pathname); |
| 64 | zPath = blob_str(&pathname); |
| 65 | if( db_exists("SELECT 1 FROM vfile WHERE pathname=%Q", zPath) ){ |
| 66 | db_multi_exec("UPDATE vfile SET deleted=0 WHERE pathname=%Q", zPath); |
| 67 | }else{ |
| 68 | db_multi_exec( |
| 69 | "INSERT INTO vfile(vid,deleted,rid,mrid,pathname)" |
| @@ -99,15 +102,15 @@ | |
| 99 | zName = mprintf("%s", g.argv[i]); |
| 100 | file_tree_name(zName, &pathname); |
| 101 | zPath = blob_str(&pathname); |
| 102 | if( !db_exists( |
| 103 | "SELECT 1 FROM vfile WHERE pathname=%Q AND NOT deleted", zPath) ){ |
| 104 | fossil_panic("not in the repository: %s\n", zName); |
| 105 | }else{ |
| 106 | db_multi_exec("UPDATE vfile SET deleted=1 WHERE pathname=%Q", zPath); |
| 107 | } |
| 108 | blob_reset(&pathname); |
| 109 | free(zName); |
| 110 | } |
| 111 | db_multi_exec("DELETE FROM vfile WHERE deleted AND rid=0"); |
| 112 | db_end_transaction(0); |
| 113 | } |
| 114 |
| --- src/add.c | |
| +++ src/add.c | |
| @@ -53,17 +53,20 @@ | |
| 53 | |
| 54 | zName = mprintf("%s", g.argv[i]); |
| 55 | isDir = file_isdir(zName); |
| 56 | if( isDir==1 ) continue; |
| 57 | if( isDir==0 ){ |
| 58 | fossil_fatal("not found: %s", zName); |
| 59 | } |
| 60 | if( isDir==2 && access(zName, R_OK) ){ |
| 61 | fossil_fatal("cannot open %s", zName); |
| 62 | } |
| 63 | file_tree_name(zName, &pathname); |
| 64 | zPath = blob_str(&pathname); |
| 65 | if( strcmp(zPath, "manifest")==0 || strcmp(zPath, "_FOSSIL_")==0 ){ |
| 66 | fossil_fatal("cannot add %s", zPath); |
| 67 | } |
| 68 | if( db_exists("SELECT 1 FROM vfile WHERE pathname=%Q", zPath) ){ |
| 69 | db_multi_exec("UPDATE vfile SET deleted=0 WHERE pathname=%Q", zPath); |
| 70 | }else{ |
| 71 | db_multi_exec( |
| 72 | "INSERT INTO vfile(vid,deleted,rid,mrid,pathname)" |
| @@ -99,15 +102,15 @@ | |
| 102 | zName = mprintf("%s", g.argv[i]); |
| 103 | file_tree_name(zName, &pathname); |
| 104 | zPath = blob_str(&pathname); |
| 105 | if( !db_exists( |
| 106 | "SELECT 1 FROM vfile WHERE pathname=%Q AND NOT deleted", zPath) ){ |
| 107 | fossil_fatal("not in the repository: %s", zName); |
| 108 | }else{ |
| 109 | db_multi_exec("UPDATE vfile SET deleted=1 WHERE pathname=%Q", zPath); |
| 110 | } |
| 111 | blob_reset(&pathname); |
| 112 | free(zName); |
| 113 | } |
| 114 | db_multi_exec("DELETE FROM vfile WHERE deleted AND rid=0"); |
| 115 | db_end_transaction(0); |
| 116 | } |
| 117 |