Author: philip Date: Wed Nov 16 10:52:56 2011 New Revision: 1202630 URL: http://svn.apache.org/viewvc?rev=1202630&view=rev Log: Make BASE files that have no checksum an error; this prevents future operations asserting on such nodes and should avoid the corrupt working copies seen in issue 4062.
* subversion/libsvn_wc/entries.c (insert_node): Check for BASE files with null checksum. * subversion/libsvn_wc/wc_db.c (insert_base_node): Check for files with null checksum. Modified: subversion/trunk/subversion/libsvn_wc/entries.c subversion/trunk/subversion/libsvn_wc/wc_db.c Modified: subversion/trunk/subversion/libsvn_wc/entries.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/entries.c?rev=1202630&r1=1202629&r2=1202630&view=diff ============================================================================== --- subversion/trunk/subversion/libsvn_wc/entries.c (original) +++ subversion/trunk/subversion/libsvn_wc/entries.c Wed Nov 16 10:52:56 2011 @@ -1476,8 +1476,20 @@ insert_node(svn_sqlite__db_t *sdb, svn_node_kind_to_word(node->kind))); if (node->kind == svn_node_file) - SVN_ERR(svn_sqlite__bind_checksum(stmt, 14, node->checksum, - scratch_pool)); + { + if (!node->checksum + && node->op_depth == 0 + && node->presence != svn_wc__db_status_not_present + && node->presence != svn_wc__db_status_excluded + && node->presence != svn_wc__db_status_server_excluded) + return svn_error_createf(SVN_ERR_WC_CORRUPT, NULL, + _("The file '%s' has no checksum"), + svn_dirent_local_style(node->local_relpath, + scratch_pool)); + + SVN_ERR(svn_sqlite__bind_checksum(stmt, 14, node->checksum, + scratch_pool)); + } if (node->properties) /* ### Never set, props done later */ SVN_ERR(svn_sqlite__bind_properties(stmt, 15, node->properties, Modified: subversion/trunk/subversion/libsvn_wc/wc_db.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/wc_db.c?rev=1202630&r1=1202629&r2=1202630&view=diff ============================================================================== --- subversion/trunk/subversion/libsvn_wc/wc_db.c (original) +++ subversion/trunk/subversion/libsvn_wc/wc_db.c Wed Nov 16 10:52:56 2011 @@ -842,6 +842,15 @@ insert_base_node(void *baton, moved_to_relpath /* 21 */)); if (pibb->kind == svn_kind_file) { + if (!pibb->checksum + && pibb->status != svn_wc__db_status_not_present + && pibb->status != svn_wc__db_status_excluded + && pibb->status != svn_wc__db_status_server_excluded) + return svn_error_createf(SVN_ERR_WC_CORRUPT, svn_sqlite__reset(stmt), + _("The file '%s' has no checksum."), + path_for_error_message(wcroot, local_relpath, + scratch_pool)); + SVN_ERR(svn_sqlite__bind_checksum(stmt, 14, pibb->checksum, scratch_pool));