../src/subversion/bindings/javahl/native/CreateJ.cpp:861:30: warning: 
comparison between signed and unsigned integer expressions [-Wsign-compare]
../src/subversion/bindings/javahl/native/JNIUtil.cpp:665:36: warning: 
comparison between signed and unsigned integer expressions [-Wsign-compare]

Both of these are similar:

   664  1456343      brane   const jsize stSize = static_cast<jsize>(newStackTra
ce.size());
   665  1456343      brane   if (stSize != newStackTrace.size())
   666  1456343      brane     {
   667  1456343      brane       
env->ThrowNew(env->FindClass("java.lang.ArithmeticException"),
   668  1456343      brane                     "Overflow converting C size_t to 
JNI jsize");
   669  1456343      brane       POP_AND_RETURN_NOTHING();
   670  1456343      brane     }

According to the log this is an attempt to detect overflow.  Does it
work?  jsize is a signed integer type and newStackTrace.size is an an
unsigned type.  The types could be different sizes and I think the test
is designed to trigger when the unsigned type is larger than the signed
type and the value is truncated.  However the test fails to trigger when
the cast produces a negative value because the types are the same size
and the unsigned value is bigger than the maximum signed value.

I don't think we can use an unsigned type here so I think we need to
compare with something like std::numeric_limits<jsize>::max()
explicitly.

-- 
Philip

Reply via email to