Skip to content

Commit 4653525

Browse files
committed
[GR-21297] Get[Primitive]ByteArrayElements overwrites memory adjacent to passed pointer.
PullRequest: graal/5498
2 parents 0822a6e + bf88c8e commit 4653525

File tree

3 files changed

+6
-7
lines changed

3 files changed

+6
-7
lines changed

substratevm/src/com.oracle.svm.jni/src/com/oracle/svm/jni/JNIGeneratedMethodSupport.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
import java.lang.reflect.Array;
3030

3131
import org.graalvm.compiler.serviceprovider.GraalUnsafeAccess;
32-
import org.graalvm.nativeimage.c.type.CIntPointer;
32+
import org.graalvm.nativeimage.c.type.CCharPointer;
3333
import org.graalvm.word.PointerBase;
3434
import org.graalvm.word.WordBase;
3535
import org.graalvm.word.WordFactory;
@@ -106,10 +106,10 @@ static void rethrowPendingException() throws Throwable {
106106
}
107107
}
108108

109-
static PointerBase pinArrayAndGetAddress(Object array, CIntPointer isCopy) throws Throwable {
109+
static PointerBase pinArrayAndGetAddress(Object array, CCharPointer isCopy) throws Throwable {
110110
if (array.getClass().isArray()) {
111111
if (isCopy.isNonNull()) {
112-
isCopy.write(0);
112+
isCopy.write((byte) 0);
113113
}
114114
return JNIThreadLocalPinnedObjects.pinArrayAndGetAddress(array);
115115
}

substratevm/src/com.oracle.svm.jni/src/com/oracle/svm/jni/hosted/JNIPrimitiveArrayOperationMethod.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
import org.graalvm.compiler.nodes.extended.BranchProbabilityNode;
4141
import org.graalvm.compiler.nodes.java.NewArrayNode;
4242
import org.graalvm.nativeimage.c.function.CEntryPoint.FatalExceptionHandler;
43-
import org.graalvm.nativeimage.c.type.CIntPointer;
43+
import org.graalvm.nativeimage.c.type.CCharPointer;
4444
import org.graalvm.nativeimage.c.type.WordPointer;
4545

4646
import com.oracle.graal.pointsto.meta.HostedProviders;
@@ -135,7 +135,7 @@ private SimpleSignature createSignature(MetaAccessProvider metaAccess) {
135135
} else {
136136
args.add(objectHandleType); // j<PrimitiveType>Array array;
137137
if (operation == Operation.GET_ELEMENTS) {
138-
args.add(metaAccess.lookupJavaType(CIntPointer.class)); // jboolean *isCopy;
138+
args.add(metaAccess.lookupJavaType(CCharPointer.class)); // jboolean *isCopy;
139139
returnType = metaAccess.lookupJavaType(WordPointer.class);
140140
} else if (operation == Operation.RELEASE_ELEMENTS) {
141141
args.add(metaAccess.lookupJavaType(WordPointer.class)); // NativeType *elems;

substratevm/src/com.oracle.svm.jni/src/com/oracle/svm/jni/nativeapi/JNIFunctionPointerTypes.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
import org.graalvm.nativeimage.c.function.CFunctionPointer;
2828
import org.graalvm.nativeimage.c.function.InvokeCFunctionPointer;
2929
import org.graalvm.nativeimage.c.type.CCharPointer;
30-
import org.graalvm.nativeimage.c.type.CIntPointer;
3130
import org.graalvm.word.PointerBase;
3231
import org.graalvm.word.WordBase;
3332

@@ -118,7 +117,7 @@ public interface CallLongMethod2FunctionPointer extends CallLongMethodFunctionPo
118117

119118
public interface GetStringUTFCharsFunctionPointer extends CFunctionPointer {
120119
@InvokeCFunctionPointer
121-
CCharPointer invoke(JNIEnvironment env, JNIObjectHandle str, CIntPointer isCopy);
120+
CCharPointer invoke(JNIEnvironment env, JNIObjectHandle str, CCharPointer isCopy);
122121
}
123122

124123
public interface ReleaseStringUTFCharsFunctionPointer extends CFunctionPointer {

0 commit comments

Comments
 (0)