Mark Phippard <markp...@gmail.com> writes:

> We have had a few users report a weird error that looks like they are
> getting an ArrayIndexOutOfBoundsException except that it appears that
> it is coming out of the native code.  This happens during an update
> operation.  I am going to paste some of the native code in here, in
> case anyone sees anything in the array handling that looks wrong.  The
> use of ++i instead of i++ looks odd to me, but I am not a C++
> programmer and the general code patterns.

++i and i++ are equivalent in this case, and likely to be identical
after optimisation.

>
>     const apr_array_header_t *array = targets.array(subPool);
>     SVN_JNI_ERR(targets.error_occured(), NULL);
>     SVN_JNI_ERR(svn_client_update4(&revs, array,
>                                    revision.revision(),
>                                    depth,
>                                    depthIsSticky,
>                                    ignoreExternals,
>                                    allowUnverObstructions,
>                                    TRUE /* adds_as_modification */,
>                                    makeParents,
>                                    ctx, subPool.getPool()),
>                 NULL);
>
>     JNIEnv *env = JNIUtil::getEnv();
>     jlongArray jrevs = env->NewLongArray(revs->nelts);
>     if (JNIUtil::isJavaExceptionThrown())
>         return NULL;
>     jlong *jrevArray = env->GetLongArrayElements(jrevs, NULL);
>     if (JNIUtil::isJavaExceptionThrown())
>         return NULL;
>     for (int i = 0; i < revs->nelts; ++i)
>     {
>         jlong rev = APR_ARRAY_IDX(revs, i, svn_revnum_t);
>         jrevArray[i] = rev;
>     }
>     env->ReleaseLongArrayElements(jrevs, jrevArray, 0);

Do we need to consider ReleaseLongArrayElements raising an exception?

Everything else looks OK.

>     return jrevs;

-- 
uberSVN: Apache Subversion Made Easy
http://www.uberSVN.com

Reply via email to