Should you call ReleaseStringUTFChars if GetStringUTFChars returned a copy?

JavaJava Native-Interface

Java Problem Overview


The book "Essential JNI: Java Native Interface" by Rob Gordon contains the following code example to convert a jstring to a C string:

const char* utf_string;
jboolean isCopy;
utf_string = env->GetStringUTFChars(str, &isCopy);
/* ... use string ... */
if (isCopy == JNI_TRUE) {
    env->ReleaseStringUTFChars(str, utf_string);
}

Note that it only calls ReleaseStringUTFChars if isCopy is true.

But the book Java Native Interface: Programmer's Guide and Specification (alternate link: http://192.9.162.55/docs/books/jni/html/objtypes.html#5161) says:

> The ReleaseString-Chars call is > necessary whether GetStringChars has > set *isCopy to JNI_TRUE or JNI_FALSE. > ReleaseStringChars either frees the > copy or unpins the instance, depending > upon whether GetStringChars has > returned a copy or not.

I am correct in assuming this is a bug in Gordon's book?

Java Solutions


Solution 1 - Java

Yes, your assumption is correct (you should always call ReleaseStringUTFChars).

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionEdward LoperView Question on Stackoverflow
Solution 1 - JavaBrett KailView Answer on Stackoverflow