On 5. 4. 26 23:55, Nathan Hartman wrote:
On Sun, Apr 5, 2026 at 3:45 PM Branko Čibej <[email protected]> wrote:

    On 5. 4. 26 21:37, Daniel Sahlberg wrote:
    Den sön 5 apr. 2026 kl 16:43 skrev Branko Čibej <[email protected]>:

        On 5. 4. 26 16:33, Timofei Zhakov wrote:
        On Sun, Apr 5, 2026 at 4:07 PM Branko Čibej<[email protected]> 
<mailto:[email protected]> wrote:
        On 5. 4. 26 11:44,[email protected] wrote:

        Author: rinrab
        Date: Sun Apr  5 09:44:54 2026
        New Revision: 1932855

        Log:
        Export a function for parsing a single opt_revision into the public 
API. We'll
        probably use it in svnbrowse. Neither of other tools need it because 
they
        primarly operate over a revision range for which there is a separate 
function
        in the API.


        Is making this public really necessary? A wrapper for 
svn_opt_parse_revision() that checks that there was only one revision in the 
argument is literally two lines of code that can be local in svnbrowse.
        Not exactly. It wraps parse_one_rev().

        I know this implementation does, but parse_one_rev() is static.


        svn_opt_parse_revision() has extra code for revision ranges. It
        technically is possible to use it and just check that the end is
        missing (which svn does if revision ranges are not supported for the
        specific subcommand), but I believe it's easier to have more specific
        APIs.

        Every new public API is another that needs to be maintained
        forever, that's all I'm trying to say. I really don't think
        it's worth it for one usage in our code.

        -- Brane


    I believe both Timofei and Brane have valid points here.
    Furthermore, they both know much more C than I do so maybe my
    suggestion is not correct, but:

    Would it be possible to re-write svn_opt_parse_revision so one
    could say "Please extract exactly ONE revision and not a range"?
    What if you could send 0 for end_revision?

    [[[
    Index: libsvn_subr/opt_revision.c
    ===================================================================
    --- libsvn_subr/opt_revision.c  (revision 1932860)
    +++ libsvn_subr/opt_revision.c  (working copy)
    @@ -187,7 +187,7 @@
       left_rev = apr_pstrdup(pool, arg);

       right_rev = parse_one_rev(start_revision, left_rev, pool);
    -  if (right_rev && *right_rev == ':')
    +  if (end_revision && right_rev && *right_rev == ':')
         {
           right_rev++;
           end = parse_one_rev(end_revision, right_rev, pool);
    ]]]

    Shouldn't this be functionally equivalent to
    svn_opt_parse_one_revision when passing 0 for end_revision?

    I thought of that of course. It seamlessly extends the semantics
    of the function, but it also creates a non-obvious ABI
    incompatibility: previously, sending a NULL revision parameter
    would cause a segfault.



Is a segfault ever a desired outcome? :-)

It's not, but it's been the policy and practice for Subversion APIs to not check for a null pointer value in arguments unless it's explicitly documented as valid. Because it's harder to ignore a crash than an (error) return value from a function, so failing hard and fast is better.

[...]

-- Brane

Reply via email to