diff --git a/hal/src/main/native/cpp/jni/I2CJNI.cpp b/hal/src/main/native/cpp/jni/I2CJNI.cpp index b605b9550a..68b844223a 100644 --- a/hal/src/main/native/cpp/jni/I2CJNI.cpp +++ b/hal/src/main/native/cpp/jni/I2CJNI.cpp @@ -64,6 +64,16 @@ Java_edu_wpi_first_hal_I2CJNI_i2CTransactionB (JNIEnv* env, jclass, jint port, jbyte address, jbyteArray dataToSend, jbyte sendSize, jbyteArray dataReceived, jbyte receiveSize) { + if (sendSize < 0) { + ThrowIllegalArgumentException(env, "I2CJNI.i2cTransactionB() sendSize < 0"); + return 0; + } + if (receiveSize < 0) { + ThrowIllegalArgumentException(env, + "I2CJNI.i2cTransactionB() receiveSize < 0"); + return 0; + } + wpi::SmallVector recvBuf; recvBuf.resize(receiveSize); jint returnValue = @@ -142,6 +152,11 @@ Java_edu_wpi_first_hal_I2CJNI_i2CReadB (JNIEnv* env, jclass, jint port, jbyte address, jbyteArray dataReceived, jbyte receiveSize) { + if (receiveSize < 0) { + ThrowIllegalArgumentException(env, "I2CJNI.i2cReadB() receiveSize < 0"); + return 0; + } + wpi::SmallVector recvBuf; recvBuf.resize(receiveSize); jint returnValue = HAL_ReadI2C(static_cast(port), address, diff --git a/hal/src/main/native/cpp/jni/SPIJNI.cpp b/hal/src/main/native/cpp/jni/SPIJNI.cpp index 67ef56df44..3c9143bbb4 100644 --- a/hal/src/main/native/cpp/jni/SPIJNI.cpp +++ b/hal/src/main/native/cpp/jni/SPIJNI.cpp @@ -63,6 +63,11 @@ Java_edu_wpi_first_hal_SPIJNI_spiTransactionB (JNIEnv* env, jclass, jint port, jbyteArray dataToSend, jbyteArray dataReceived, jbyte size) { + if (size < 0) { + ThrowIllegalArgumentException(env, "SPIJNI.spiTransactionB() size < 0"); + return 0; + } + wpi::SmallVector recvBuf; recvBuf.resize(size); jint retVal = @@ -120,6 +125,11 @@ Java_edu_wpi_first_hal_SPIJNI_spiRead (JNIEnv* env, jclass, jint port, jboolean initiate, jobject dataReceived, jbyte size) { + if (size < 0) { + ThrowIllegalArgumentException(env, "SPIJNI.spiRead() size < 0"); + return 0; + } + uint8_t* dataReceivedPtr = reinterpret_cast(env->GetDirectBufferAddress(dataReceived)); jint retVal; @@ -145,6 +155,11 @@ Java_edu_wpi_first_hal_SPIJNI_spiReadB (JNIEnv* env, jclass, jint port, jboolean initiate, jbyteArray dataReceived, jbyte size) { + if (size < 0) { + ThrowIllegalArgumentException(env, "SPIJNI.spiReadB() size < 0"); + return 0; + } + jint retVal; wpi::SmallVector recvBuf; recvBuf.resize(size); @@ -361,6 +376,12 @@ Java_edu_wpi_first_hal_SPIJNI_spiReadAutoReceivedData__I_3IID (JNIEnv* env, jclass, jint port, jintArray buffer, jint numToRead, jdouble timeout) { + if (numToRead < 0) { + ThrowIllegalArgumentException( + env, "SPIJNI.spiReadAutoReceivedData() numToRead < 0"); + return 0; + } + wpi::SmallVector recvBuf; recvBuf.resize(numToRead); int32_t status = 0;