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
Received on 2011-08-08 19:10:59 CEST