GetStringUTFChars() can fail, returning NULL. Make sure we do not trip
over it.
Change-Id: I2d6b9c72c353c2423042fd035087f0d57fdc08ca
Signed-off-by: Robert Varga <nite@hq.sk>
vppjni_main_t * jm = &vppjni_main;
u32 sw_if_index = ~0;
uword * p;
vppjni_main_t * jm = &vppjni_main;
u32 sw_if_index = ~0;
uword * p;
- const char *if_name_str = (*env)->GetStringUTFChars (env, ifName, 0);
+ const char *if_name_str = (*env)->GetStringUTFChars (env, ifName, 0);
+ if (!if_name_str)
+ return NULL;
vppjni_lock (jm, 24);
p = hash_get_mem (jm->sw_if_index_by_interface_name, if_name_str);
vppjni_lock (jm, 24);
p = hash_get_mem (jm->sw_if_index_by_interface_name, if_name_str);
if (jm->is_connected)
return -2;
if (jm->is_connected)
return -2;
+ client_name = (*env)->GetStringUTFChars(env, clientName, 0);
+ if (!client_name)
+ return -3;
+
if (jm->heap == 0)
clib_mem_init (0, 128<<20);
heap = clib_mem_get_per_cpu_heap();
h = mheap_header (heap);
if (jm->heap == 0)
clib_mem_init (0, 128<<20);
heap = clib_mem_get_per_cpu_heap();
h = mheap_header (heap);
- client_name = (*env)->GetStringUTFChars (env, clientName, 0);
-
clib_time_init (&jm->clib_time);
rv = connect_to_vpe ((char *) client_name);
clib_time_init (&jm->clib_time);
rv = connect_to_vpe ((char *) client_name);
hash_pair_t * p;
name_sort_t * nses = 0, * ns;
const char *this_name;
hash_pair_t * p;
name_sort_t * nses = 0, * ns;
const char *this_name;
- const char * nf = (*env)->GetStringUTFChars (env, name_filter, NULL);
u8 * s = 0;
char *strcasestr (const char *, const char *);
u8 * s = 0;
char *strcasestr (const char *, const char *);
+ const char * nf = (*env)->GetStringUTFChars (env, name_filter, NULL);
+ if (!nf)
+ return NULL;
vppjni_main_t * jm = &vppjni_main;
jint rv = -1;
const char * if_name = (*env)->GetStringUTFChars (env, interfaceName, NULL);
vppjni_main_t * jm = &vppjni_main;
jint rv = -1;
const char * if_name = (*env)->GetStringUTFChars (env, interfaceName, NULL);
+ if (if_name) {
+ uword * p;
- p = hash_get_mem (jm->sw_if_index_by_interface_name, if_name);
+ p = hash_get_mem (jm->sw_if_index_by_interface_name, if_name);
- if (p != 0)
- rv = (jint) p[0];
+ if (p != 0)
+ rv = (jint) p[0];
- (*env)->ReleaseStringUTFChars (env, interfaceName, if_name);
+ (*env)->ReleaseStringUTFChars (env, interfaceName, if_name);
+ }
(JNIEnv * env, jobject obj, jstring bridgeDomain)
{
vppjni_main_t * jm = &vppjni_main;
(JNIEnv * env, jobject obj, jstring bridgeDomain)
{
vppjni_main_t * jm = &vppjni_main;
- static u8 * bd_name = 0;
jint rv = -1;
const char * bdName = (*env)->GetStringUTFChars (env, bridgeDomain, NULL);
jint rv = -1;
const char * bdName = (*env)->GetStringUTFChars (env, bridgeDomain, NULL);
+ if (bdName) {
+ static u8 * bd_name = 0;
- vec_validate_init_c_string (bd_name, bdName, strlen(bdName));
- (*env)->ReleaseStringUTFChars (env, bridgeDomain, bdName);
+ vec_validate_init_c_string (bd_name, bdName, strlen(bdName));
+ (*env)->ReleaseStringUTFChars (env, bridgeDomain, bdName);
- vppjni_lock (jm, 6);
- rv = (jint)vjbd_find_or_add_bd (&jm->vjbd_main, bd_name);
- vppjni_unlock (jm);
+ vppjni_lock (jm, 6);
+ rv = (jint)vjbd_find_or_add_bd (&jm->vjbd_main, bd_name);
+ vppjni_unlock (jm);
+ _vec_len(bd_name) = 0;
+ }
(JNIEnv * env, jobject obj, jstring bridgeDomain)
{
vppjni_main_t * jm = &vppjni_main;
(JNIEnv * env, jobject obj, jstring bridgeDomain)
{
vppjni_main_t * jm = &vppjni_main;
- static u8 * bd_name = 0;
jint rv = -1;
const char * bdName = (*env)->GetStringUTFChars (env, bridgeDomain, NULL);
jint rv = -1;
const char * bdName = (*env)->GetStringUTFChars (env, bridgeDomain, NULL);
+ if (bdName) {
+ static u8 * bd_name = 0;
- vec_validate_init_c_string (bd_name, bdName, strlen(bdName));
- (*env)->ReleaseStringUTFChars (env, bridgeDomain, bdName);
+ vec_validate_init_c_string (bd_name, bdName, strlen(bdName));
+ (*env)->ReleaseStringUTFChars (env, bridgeDomain, bdName);
- vppjni_lock (jm, 20);
- rv = (jint)vjbd_id_from_name(&jm->vjbd_main, (u8 *)bd_name);
- vppjni_unlock (jm);
+ vppjni_lock (jm, 20);
+ rv = (jint)vjbd_id_from_name(&jm->vjbd_main, (u8 *)bd_name);
+ vppjni_unlock (jm);
+ _vec_len(bd_name) = 0;
+ }
}
if_name = (*env)->GetStringUTFChars (env, interfaceName, NULL);
}
if_name = (*env)->GetStringUTFChars (env, interfaceName, NULL);
+ if (!if_name) {
+ return -1;
+ }
+
p = hash_get_mem (jm->sw_if_index_by_interface_name, if_name);
(*env)->ReleaseStringUTFChars (env, interfaceName, if_name);
if (p == 0) {
p = hash_get_mem (jm->sw_if_index_by_interface_name, if_name);
(*env)->ReleaseStringUTFChars (env, interfaceName, if_name);
if (p == 0) {