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