2929
3030// #include <iostream>
3131
32+ #define MAX_PORT_NAME_STR_LEN 32
33+
3234/*
3335 * Get native library version
3436 */
@@ -46,7 +48,12 @@ JNIEXPORT jlong JNICALL Java_jssc_SerialNativeInterface_openPort(JNIEnv *env, jo
4648 const char * port = env->GetStringUTFChars (portName, JNI_FALSE);
4749
4850 // since 2.1.0 -> string concat fix
49- char portFullName[strlen (prefix) + strlen (port) + 1 ];
51+ char portFullName[MAX_PORT_NAME_STR_LEN];
52+
53+ if (strlen (prefix) + strlen (port) + 1 > sizeof (portFullName)){
54+ return (jlong)((HANDLE)jssc_SerialNativeInterface_ERR_PORT_NOT_FOUND);
55+ }
56+
5057 strcpy (portFullName, prefix);
5158 strcat (portFullName, port);
5259 // <- since 2.1.0
@@ -259,8 +266,15 @@ JNIEXPORT jbyteArray JNICALL Java_jssc_SerialNativeInterface_readBytes
259266 DWORD lpNumberOfBytesTransferred;
260267 DWORD lpNumberOfBytesRead;
261268 OVERLAPPED *overlapped = new OVERLAPPED ();
262- jbyte lpBuffer[byteCount] ;
269+ jbyte * lpBuffer = NULL ;
263270 jbyteArray returnArray = env->NewByteArray (byteCount);
271+
272+ lpBuffer = (jbyte *)malloc (byteCount * sizeof (jbyte));
273+ if (lpBuffer == NULL ){
274+ // return an empty array
275+ return returnArray;
276+ }
277+
264278 overlapped->hEvent = CreateEventA (NULL , true , false , NULL );
265279 if (ReadFile (hComm, lpBuffer, (DWORD)byteCount, &lpNumberOfBytesRead, overlapped)){
266280 env->SetByteArrayRegion (returnArray, 0 , byteCount, lpBuffer);
@@ -274,6 +288,7 @@ JNIEXPORT jbyteArray JNICALL Java_jssc_SerialNativeInterface_readBytes
274288 }
275289 CloseHandle (overlapped->hEvent );
276290 delete overlapped;
291+ free (lpBuffer);
277292 return returnArray;
278293}
279294
0 commit comments