Kind reader:
As far as I can tell, this does not apply to ISSUES 4099, 3609, or 2028, all of
which reference svn_uri_is_canonical.
The following URIs return TRUE from svn_uri_is_canonical:
1) file:///MyHost/path
2) file:///C:dir/path
3) file:///c=dir/path
I believe the problem is with code at or about dirent_uri.c -- line 1795:
/* If this is a file url, ptr now points to the third '/' in
file:///C:/path. Check that if we have such a URL the drive
letter is in uppercase. */
if (strncmp(uri, "file:", 5) == 0 &&
! (*(ptr+1) >= 'A' && *(ptr+1) <= 'Z') &&
*(ptr+2) == ':')
return FALSE;
This condition evaluates to FALSE (and does not return FALSE) as soon as
*(prt+1) is determined to be uppercase.
This renders the additional check *(ptr+2) == ':' as moot, but I believe this
check is also invalid, as demonstrated by URI 3)
above. If *(ptr+2) != ':' the condition is still FALSE and the routine does
not return FALSE as it should.
I respectfully submit the following correction for your consideration:
if (strncmp(uri, "file:", 5) == 0 &&
! (*(ptr+1) >= 'A' && *(ptr+1) <= 'Z' &&
*(ptr+2) == ':' && *(ptr+3) == '/')
)
return FALSE;
If you concur with my finding of this issue, I welcome hints, pointers, or
guidance as to the proper way to raise this issue through
proper channels.
Thank you for your cycles,
Jim O'Leary