On Wed, Dec 01, 2010 at 05:25:28AM +0200, Daniel Shahaf wrote: > stef...@apache.org wrote on Tue, Nov 30, 2010 at 23:56:41 -0000: > > Author: stefan2 > > Date: Tue Nov 30 23:56:40 2010 > > New Revision: 1040831 > > > > URL: http://svn.apache.org/viewvc?rev=1040831&view=rev > > Log: > > Fix 'svnadmin verify' for format 5 repositories. During the checking > > process, > > they yield NULL for SHA1 checksums. The most robust way to fix that is to > > allow NULL for checksum in svn_checksum_to_cstring. This seems justified > > as NULL is already a valid return value instead of e.g. an empty string. So, > > callers may receive NULL as result and could therefore assume that NULL is > > a valid input, too > > > > Can you explain how to trigger the bug you are fixing? Just running > 'svnadmin verify' on my r1040058-created Greek repository doesn't. > > > * subversion/include/svn_checksum.h > > (svn_checksum_to_cstring): extend doc string > > * subversion/libsvn_subr/checksum.c > > (svn_checksum_to_cstring): return NULL for NULL checksums as well > > > > Modified: > > subversion/trunk/subversion/include/svn_checksum.h > > subversion/trunk/subversion/libsvn_subr/checksum.c > > > > Modified: subversion/trunk/subversion/include/svn_checksum.h > > URL: > > http://svn.apache.org/viewvc/subversion/trunk/subversion/include/svn_checksum.h?rev=1040831&r1=1040830&r2=1040831&view=diff > > ============================================================================== > > --- subversion/trunk/subversion/include/svn_checksum.h (original) > > +++ subversion/trunk/subversion/include/svn_checksum.h Tue Nov 30 23:56:40 > > 2010 > > @@ -121,7 +121,7 @@ svn_checksum_to_cstring_display(const sv > > > > /** Return the hex representation of @a checksum, allocating the > > * string in @a pool. If @a checksum->digest is all zeros (that is, > > - * 0, not '0'), then return NULL. > > + * 0, not '0') or NULL, then return NULL. > > * > > First, this change doesn't match the code change: the docstring change > says CHECKSUM->DIGEST may be NULL, but the code change allows CHECKSUM > to be NULL. > > Second, let's have the docstring say that NULL is only allowed by 1.7+. > (Passing NULL will segfault in 1.6.) > > (doxygen has a @note directive.)
Yes, this certainly violates API backwards compatibility rules. A regression test that shows the problem would be nice. Thanks, Stefan > > > * @since New in 1.6. > > */ > > > > Modified: subversion/trunk/subversion/libsvn_subr/checksum.c > > URL: > > http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/checksum.c?rev=1040831&r1=1040830&r2=1040831&view=diff > > ============================================================================== > > --- subversion/trunk/subversion/libsvn_subr/checksum.c (original) > > +++ subversion/trunk/subversion/libsvn_subr/checksum.c Tue Nov 30 23:56:40 > > 2010 > > @@ -135,6 +135,9 @@ const char * > > svn_checksum_to_cstring(const svn_checksum_t *checksum, > > apr_pool_t *pool) > > { > > + if (checksum == NULL) > > + return NULL; > > + > > switch (checksum->kind) > > { > > case svn_checksum_md5: > > > >