On Thu, 22 Nov 2018 19:08:04 +0100, Boris Feld wrote:
> # HG changeset patch
> # User Boris Feld <boris.f...@octobus.net>
> # Date 1541785378 -3600
> #      Fri Nov 09 18:42:58 2018 +0100
> # Node ID 18864760091a1622d0404e9a87923cf2b1b82082
> # Parent  b6fff7b07488608fe8ea86ffb69a74037ed15cbe
> # EXP-Topic sparse-perf
> # Available At https://bitbucket.org/octobus/mercurial-devel/
> #              hg pull https://bitbucket.org/octobus/mercurial-devel/ -r 
> 18864760091a
> sparse-revlog: add a `index_get_length` function in C

> diff --git a/mercurial/cext/revlog.c b/mercurial/cext/revlog.c
> --- a/mercurial/cext/revlog.c
> +++ b/mercurial/cext/revlog.c
> @@ -218,6 +218,31 @@ static inline int64_t index_get_start(in
>       return (int64_t)(offset >> 16);
>  }
>  
> +static inline int index_get_length(indexObject *self, Py_ssize_t rev)
> +{
> +     if (rev >= self->length) {
> +             PyObject *tuple;
> +             PyObject *pylong;
> +             long ret;
> +             tuple = PyList_GET_ITEM(self->added, rev - self->length);
> +             pylong = PyTuple_GET_ITEM(tuple, 1);
> +             ret = PyInt_AsLong(pylong);
> +             if (ret == -1 && PyErr_Occurred()) {
> +                     return -1;
> +             }
> +             if (ret < 0 || ret > (long)INT_MAX) {
> +                     PyErr_Format(PyExc_OverflowError,
> +                                  "revlog entry size out of bound (%llu)",
> +                                  (long long)ret);

Changed this to %ld ret as well.

> +                     return -1;
> +             }
> +             return (int)ret;
> +     } else {
> +             const char *data = index_deref(self, rev);
> +             return (int)getbe32(data + 8);

Here, (int)getbe32(data + 8) may be negative. We have to check the underflow
so that Python interpreter wouldn't confused by bad NULL return.

Can you send a follow up?
_______________________________________________
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel

Reply via email to