From 994ead130daf53b3a5c3196d46c74f41ccd3e9ad Mon Sep 17 00:00:00 2001 From: Magnus Henoch Date: Sun, 3 Jun 2007 18:33:11 +0000 Subject: [PATCH] Revision: mange@freemail.hu--2005/emacs-jabber--cvs-head--0--patch-364 Creator: Magnus Henoch Check MD5 hash of received files --- jabber-ft-server.el | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/jabber-ft-server.el b/jabber-ft-server.el index f749ad3..cd889d5 100644 --- a/jabber-ft-server.el +++ b/jabber-ft-server.el @@ -1,7 +1,7 @@ ;; jabber-ft-server.el - handle incoming file transfers, by JEP-0096 +;; Copyright (C) 2003, 2004, 2007 - Magnus Henoch - mange@freemail.hu ;; Copyright (C) 2002, 2003, 2004 - tom berger - object@intelectronica.net -;; Copyright (C) 2003, 2004 - Magnus Henoch - mange@freemail.hu ;; This file is a part of jabber.el. @@ -28,6 +28,9 @@ (defvar jabber-ft-size nil "Size of the file that is being downloaded") +(defvar jabber-ft-md5-hash nil + "MD5 hash of the file that is being downloaded") + (add-to-list 'jabber-advertised-features "http://jabber.org/protocol/si/profile/file-transfer") (add-to-list 'jabber-si-profiles @@ -78,8 +81,10 @@ (if (fboundp 'set-buffer-multibyte) (set-buffer-multibyte nil)) (set-visited-file-name file-name t) - (make-local-variable 'jabber-ft-size) - (setq jabber-ft-size (string-to-number size))) + (set (make-local-variable 'jabber-ft-size) + (string-to-number size)) + (set (make-local-variable 'jabber-ft-md5-hash) + md5-hash)) (add-to-list 'jabber-ft-sessions (cons (list si-id from) buffer))) @@ -107,7 +112,17 @@ (if (and data (< (buffer-size) jabber-ft-size)) t (basic-save-buffer) - (message "%s downloaded" (file-name-nondirectory buffer-file-name)) + (if (and jabber-ft-md5-hash + (let ((file-hash (jabber-ft-get-md5 buffer-file-name))) + (and file-hash + (not (string= file-hash jabber-ft-md5-hash))))) + ;; hash mismatch! + (progn + (message "%s downloaded - CHECKSUM MISMATCH!" + (file-name-nondirectory buffer-file-name)) + (sleep-for 5)) + ;; all is fine + (message "%s downloaded" (file-name-nondirectory buffer-file-name))) (kill-buffer buffer) nil))))