@@ -25,11 +25,22 @@ Java_com_microsoft_applications_events_Signals_sendSignal(JNIEnv *env,
2525 jlong nativeLoggerPtr,
2626 jstring signal_item_json) {
2727 jboolean isCopy = true ;
28+ auto logger = reinterpret_cast <ILogger*>(nativeLoggerPtr);
29+ if (logger == nullptr ) {
30+ return false ;
31+ }
32+ if (signal_item_json == nullptr ) {
33+ return false ;
34+ }
2835 const char *signalItemJson = (env)->GetStringUTFChars (signal_item_json, &isCopy);
29- env->ReleaseStringUTFChars (signal_item_json, signalItemJson);
36+ if (signalItemJson == nullptr ) {
37+ // Preserve the pending Java exception (typically an allocation failure)
38+ // rather than masking it as a clean false result.
39+ return false ;
40+ }
3041
31- auto logger = reinterpret_cast <ILogger*>(nativeLoggerPtr);
3242 EventProperties eventProperties = Signals::CreateEventProperties (signalItemJson);
43+ env->ReleaseStringUTFChars (signal_item_json, signalItemJson);
3344 logger->LogEvent (eventProperties);
3445 return true ;
3546}
@@ -54,20 +65,34 @@ Java_com_microsoft_applications_events_Signals_nativeInitialize(JNIEnv *env, jcl
5465 SubstrateSignalsConfiguration config;
5566
5667 jboolean isCopy = true ;
57- const char *convertedValue = (env)->GetStringUTFChars (base_url, &isCopy);
58- if (strlen (convertedValue) > 0 ) {
59- config.ServiceRequestConfig .BaseUrl = convertedValue;
68+ if (base_url != nullptr ) {
69+ const char *convertedValue = (env)->GetStringUTFChars (base_url, &isCopy);
70+ if (convertedValue == nullptr ) {
71+ // Preserve the pending Java exception (typically an allocation failure)
72+ // rather than masking it as a clean false result.
73+ return false ;
74+ }
75+ if (strlen (convertedValue) > 0 ) {
76+ config.ServiceRequestConfig .BaseUrl = convertedValue;
77+ }
78+ env->ReleaseStringUTFChars (base_url, convertedValue);
6079 }
61- env->ReleaseStringUTFChars (base_url, convertedValue);
6280
6381 config.ServiceRequestConfig .TimeoutMs = reinterpret_cast <int >(timeout_ms);
6482 config.ServiceRequestConfig .RetryTimes = reinterpret_cast <int >(retry_times);
6583 config.ServiceRequestConfig .RetryTimesToWait = reinterpret_cast <int >(retry_time_to_wait);
6684
67- jsize size = env->GetArrayLength (retry_status_codes);
68- std::vector<int > retryStatusCodes (size);
69- env->GetIntArrayRegion (retry_status_codes, jsize{0 }, size, &retryStatusCodes[0 ] );
70- config.ServiceRequestConfig .RetryStatusCodes = std::vector<int64_t >(retryStatusCodes.begin (), retryStatusCodes.end ());
85+ if (retry_status_codes != nullptr )
86+ {
87+ jsize size = env->GetArrayLength (retry_status_codes);
88+ std::vector<int > retryStatusCodes (size);
89+ if (size > 0 )
90+ {
91+ env->GetIntArrayRegion (retry_status_codes, jsize{0 }, size, retryStatusCodes.data ());
92+ }
93+ config.ServiceRequestConfig .RetryStatusCodes =
94+ std::vector<int64_t >(retryStatusCodes.begin (), retryStatusCodes.end ());
95+ }
7196
7297 spDataInspector = Signals::CreateSignalsEventInspector (nullptr , config);
7398 return true ;
0 commit comments