Stefan Küng wrote: > I've now analyzed the fifth crash report for TSVN that shows a segfault > when upgrading a working copy. The crash happens here: > > libsvn_wc\upgrade.c, line 1111 > > info = apr_hash_get(*text_bases_info, versioned_file_name, > APR_HASH_KEY_STRING); > > with 'versioned_file_name' being NULL. > (ok, the crash is in the hash function in the apr lib, but it crashes > because the key string is NULL). > > Problem is I have no idea why that would be NULL, it gets set a few > lines above by the 'remove_suffix()' function which only returns NULL if > either the filename is too short or the extension doesn't match - which > I can't see why this would ever happen. > > Anyone got any ideas? > I've asked those who sent those reports, but they have no idea what's > different about their working copies. All of them had several working > copies, and the crash happens only with one or maybe two of them, but > not all of the working copies they upgrade.
Looks like that could happen if the text-base directory contains a file that's not a Subversion text-base filename. This might fix it: [[[ Index: subversion/libsvn_wc/upgrade.c =================================================================== --- subversion/libsvn_wc/upgrade.c (revision 1154861) +++ subversion/libsvn_wc/upgrade.c (working copy) @@ -1102,12 +1102,17 @@ migrate_text_bases(apr_hash_t **text_bas else { versioned_file_name = remove_suffix(text_base_basename, SVN_WC__BASE_EXT, result_pool); is_revert_base = FALSE; } + if (! versioned_file_name) + { + SVN_DBG(("ignoring non-text-base file '%s'\n", text_base_basename)); + continue; + } /* Create a new info struct for this versioned file, or fill in the * existing one if this is the second text-base we've found for it. */ info = apr_hash_get(*text_bases_info, versioned_file_name, APR_HASH_KEY_STRING); if (info == NULL) ]]] - Julian