projects/guix·blob python-team · refs

71 lines · 2.4 KiB

1For some reason, the original code gets miscompiled on x86_64, leading
2'Java_java_io_VMFile_isFile' to return true when the return value of
3'cpio_checkType' is ENOENT (= 2).
4
5See <https://issues.guix.gnu.org/issue/36685>
6and <https://issues.guix.gnu.org/49990>.
7
8diff --git a/native/jni/java-io/java_io_VMFile.c b/native/jni/java-io/java_io_VMFile.c
9index de1320b..6695e1f 100644
10--- a/native/jni/java-io/java_io_VMFile.c
11+++ b/native/jni/java-io/java_io_VMFile.c
12@@ -240,6 +240,7 @@ Java_java_io_VMFile_exists (JNIEnv * env,
13 #ifndef WITHOUT_FILESYSTEM
14 const char *filename;
15 int result;
16+ jboolean exists;
17
18 /* Don't use the JCL convert function because it throws an exception
19 on failure */
20@@ -250,9 +251,10 @@ Java_java_io_VMFile_exists (JNIEnv * env,
21 }
22
23 result = cpio_isFileExists (filename);
24+ exists = (result == CPNATIVE_OK ? 1 : 0);
25 (*env)->ReleaseStringUTFChars (env, name, filename);
26
27- return result == CPNATIVE_OK ? 1 : 0;
28+ return exists;
29 #else /* not WITHOUT_FILESYSTEM */
30 return 0;
31 #endif /* not WITHOUT_FILESYSTEM */
32@@ -278,6 +280,7 @@ Java_java_io_VMFile_isFile (JNIEnv * env,
33 const char *filename;
34 int result;
35 jint entryType;
36+ jboolean isfile;
37
38 /* Don't use the JCL convert function because it throws an exception
39 on failure */
40@@ -288,9 +291,10 @@ Java_java_io_VMFile_isFile (JNIEnv * env,
41 }
42
43 result = cpio_checkType (filename, &entryType);
44+ isfile = (result == CPNATIVE_OK && entryType == CPFILE_FILE ? 1 : 0);
45 (*env)->ReleaseStringUTFChars (env, name, filename);
46
47- return result == CPNATIVE_OK && entryType == CPFILE_FILE ? 1 : 0;
48+ return isfile;
49 #else /* not WITHOUT_FILESYSTEM */
50 return 0;
51 #endif /* not WITHOUT_FILESYSTEM */
52@@ -315,6 +319,7 @@ Java_java_io_VMFile_isDirectory (JNIEnv * env,
53 const char *filename;
54 int result;
55 jint entryType;
56+ jboolean isdirectory;
57
58 /* Don't use the JCL convert function because it throws an exception
59 on failure */
60@@ -325,9 +330,10 @@ Java_java_io_VMFile_isDirectory (JNIEnv * env,
61 }
62
63 result = cpio_checkType (filename, &entryType);
64+ isdirectory = (result == CPNATIVE_OK && entryType == CPFILE_DIRECTORY ? 1 : 0);
65 (*env)->ReleaseStringUTFChars (env, name, filename);
66
67- return result == CPNATIVE_OK && entryType == CPFILE_DIRECTORY ? 1 : 0;
68+ return isdirectory;
69 #else /* not WITHOUT_FILESYSTEM */
70 return 0;
71 #endif /* not WITHOUT_FILESYSTEM */