branch: elpa/jabber
commit b3cfe2ee4af6e20f6abfbb1b6da39f0db115c283
Author: Thanos Apollo <[email protected]>
Commit: Thanos Apollo <[email protected]>
omemo: Derive upload send target from JID, not current buffer
---
lisp/jabber-omemo.el | 16 +++++++++-------
tests/jabber-test-omemo-message.el | 31 ++++++++++++++++++++++++++++++-
2 files changed, 39 insertions(+), 8 deletions(-)
diff --git a/lisp/jabber-omemo.el b/lisp/jabber-omemo.el
index 0a5cacc28e..69dedc6c83 100644
--- a/lisp/jabber-omemo.el
+++ b/lisp/jabber-omemo.el
@@ -46,6 +46,8 @@
(group nickname new-plist))
(declare-function jabber-muc-participant-plist "jabber-muc"
(group nickname))
+(declare-function jabber-muc-joined-p "jabber-muc" (group &optional jc))
+(declare-function jabber-muc-create-buffer "jabber-muc" (jc group))
(declare-function jabber-disco-advertise-feature "jabber-disco")
(declare-function jabber-send-iq "jabber-iq")
(declare-function jabber-httpupload--upload "jabber-httpupload")
@@ -1600,13 +1602,13 @@ Returns (ENCRYPTED-PATH . WRAPPED-CALLBACK) or nil."
"Send GET-URL (aesgcm://) as an OMEMO-encrypted message from JC to JID.
Returns non-nil if handled, nil to fall through to plaintext."
(when (string-prefix-p "aesgcm://" get-url)
- (if (bound-and-true-p jabber-group)
- (jabber-omemo--send-muc jc get-url)
- ;; Capture the chat buffer now: the session callbacks may fire
- ;; from IQ handlers where current buffer is something else, and
- ;; --send-encrypted falls back to (current-buffer) for display
- ;; and send-hook state.
- (let ((buffer (current-buffer)))
+ ;; This runs from the upload process sentinel, where the current
+ ;; buffer is arbitrary; derive the chat buffer from JID rather
+ ;; than trusting buffer-local state.
+ (if (jabber-muc-joined-p jid)
+ (with-current-buffer (jabber-muc-create-buffer jc jid)
+ (jabber-omemo--send-muc jc get-url))
+ (let ((buffer (jabber-chat-create-buffer jc jid)))
(jabber-omemo--ensure-sessions
jc (jabber-jid-user jid)
(lambda (recipient-sessions)
diff --git a/tests/jabber-test-omemo-message.el
b/tests/jabber-test-omemo-message.el
index 5691aafda9..4da1869207 100644
--- a/tests/jabber-test-omemo-message.el
+++ b/tests/jabber-test-omemo-message.el
@@ -328,11 +328,40 @@ Clears OMEMO in-memory caches and tears down on exit."
((symbol-function 'jabber-connection-bare-jid)
(lambda (_jc) "[email protected]"))
((symbol-function 'jabber-jid-user)
- (lambda (jid) jid)))
+ (lambda (jid) jid))
+ ((symbol-function 'jabber-muc-joined-p)
+ (lambda (_group &optional _jc) nil))
+ ((symbol-function 'jabber-chat-create-buffer)
+ (lambda (_jc _jid) (current-buffer))))
(should (jabber-omemo--httpupload-send-url
'fake-jc "[email protected]"
"aesgcm://host/file#abc123"))))
+(ert-deftest jabber-test-omemo-message-httpupload-send-url-muc-from-any-buffer
()
+ "An aesgcm URL for a joined room is sent in that room's buffer.
+The upload callback fires from a process sentinel where the current
+buffer is arbitrary; the room must be derived from the JID, not from
+buffer-local `jabber-group'."
+ (let ((room "[email protected]")
+ (room-buffer (generate-new-buffer " *omemo-muc-upload-test*"))
+ (sent-group nil))
+ (unwind-protect
+ (progn
+ (with-current-buffer room-buffer
+ (setq-local jabber-group room))
+ (cl-letf (((symbol-function 'jabber-muc-joined-p)
+ (lambda (group &optional _jc) (equal group room)))
+ ((symbol-function 'jabber-muc-create-buffer)
+ (lambda (_jc _group) room-buffer))
+ ((symbol-function 'jabber-omemo--send-muc)
+ (lambda (_jc _body &optional _extra)
+ (setq sent-group (bound-and-true-p jabber-group)))))
+ (with-temp-buffer
+ (should (jabber-omemo--httpupload-send-url
+ 'fake-jc room "aesgcm://host/file#abc123"))))
+ (should (equal sent-group room)))
+ (kill-buffer room-buffer))))
+
(ert-deftest jabber-test-omemo-message-httpupload-send-url-skips-https ()
"Send-url override returns nil for https:// URLs."
(should-not (jabber-omemo--httpupload-send-url