[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master 59a3edc3559: Avert a crash and file descriptor leak in yank-media
From: |
Po Lu |
Subject: |
master 59a3edc3559: Avert a crash and file descriptor leak in yank-media |
Date: |
Sun, 29 Oct 2023 01:00:00 -0400 (EDT) |
branch: master
commit 59a3edc3559057e6f0346e3f1b3b13e8ef3e1683
Author: Po Lu <luangruo@yahoo.com>
Commit: Po Lu <luangruo@yahoo.com>
Avert a crash and file descriptor leak in yank-media
* java/org/gnu/emacs/EmacsNative.java (close): New declaration.
* java/org/gnu/emacs/EmacsSdk11Clipboard.java
(getClipboardData): Catch SecurityException and guarantee file
descriptors are closed even if exceptions arise.
* src/android.c (dup): Export another function.
---
java/org/gnu/emacs/EmacsNative.java | 3 +++
java/org/gnu/emacs/EmacsSdk11Clipboard.java | 24 ++++++++++++++++++++++++
src/android.c | 8 ++++++++
3 files changed, 35 insertions(+)
diff --git a/java/org/gnu/emacs/EmacsNative.java
b/java/org/gnu/emacs/EmacsNative.java
index 7d7e1e5d831..f15927bb3a7 100644
--- a/java/org/gnu/emacs/EmacsNative.java
+++ b/java/org/gnu/emacs/EmacsNative.java
@@ -39,6 +39,9 @@ public final class EmacsNative
/* Like `dup' in C. */
public static native int dup (int fd);
+ /* Like `close' in C. */
+ public static native int close (int fd);
+
/* Obtain the fingerprint of this build of Emacs. The fingerprint
can be used to determine the dump file name. */
public static native String getFingerprint ();
diff --git a/java/org/gnu/emacs/EmacsSdk11Clipboard.java
b/java/org/gnu/emacs/EmacsSdk11Clipboard.java
index b8a43496b6d..b068a89831e 100644
--- a/java/org/gnu/emacs/EmacsSdk11Clipboard.java
+++ b/java/org/gnu/emacs/EmacsSdk11Clipboard.java
@@ -245,6 +245,8 @@ public final class EmacsSdk11Clipboard extends
EmacsClipboard
if (data == null || data.getItemCount () < 1)
return null;
+ fd = -1;
+
try
{
uri = data.getItemAt (0).getUri ();
@@ -267,12 +269,34 @@ public final class EmacsSdk11Clipboard extends
EmacsClipboard
/* Close the original offset. */
assetFd.close ();
}
+ catch (SecurityException e)
+ {
+ /* Guarantee a file descriptor duplicated or detached is
+ ultimately closed if an error arises. */
+
+ if (fd != -1)
+ EmacsNative.close (fd);
+
+ return null;
+ }
catch (FileNotFoundException e)
{
+ /* Guarantee a file descriptor duplicated or detached is
+ ultimately closed if an error arises. */
+
+ if (fd != -1)
+ EmacsNative.close (fd);
+
return null;
}
catch (IOException e)
{
+ /* Guarantee a file descriptor duplicated or detached is
+ ultimately closed if an error arises. */
+
+ if (fd != -1)
+ EmacsNative.close (fd);
+
return null;
}
diff --git a/src/android.c b/src/android.c
index 3344a773d5f..79f16568fd4 100644
--- a/src/android.c
+++ b/src/android.c
@@ -1260,6 +1260,14 @@ NATIVE_NAME (dup) (JNIEnv *env, jobject object, jint fd)
return dup (fd);
}
+JNIEXPORT jint JNICALL
+NATIVE_NAME (close) (JNIEnv *env, jobject object, jint fd)
+{
+ JNI_STACK_ALIGNMENT_PROLOGUE;
+
+ return close (fd);
+}
+
JNIEXPORT jstring JNICALL
NATIVE_NAME (getFingerprint) (JNIEnv *env, jobject object)
{
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master 59a3edc3559: Avert a crash and file descriptor leak in yank-media,
Po Lu <=