[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] master b9c0ea6: Port message-checksum to bignums
From: |
Paul Eggert |
Subject: |
[Emacs-diffs] master b9c0ea6: Port message-checksum to bignums |
Date: |
Wed, 26 Dec 2018 04:12:37 -0500 (EST) |
branch: master
commit b9c0ea6a6bc01c0034d00d685cab0de5953fdcc9
Author: Paul Eggert <address@hidden>
Commit: Paul Eggert <address@hidden>
Port message-checksum to bignums
* lisp/gnus/message.el (message--rotate-fixnum-left): New function.
(message-checksum): Use it instead of assuming fixnum-only arithmetic.
This should fix Bug#33083.
---
lisp/gnus/message.el | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/lisp/gnus/message.el b/lisp/gnus/message.el
index 03f8061..dc15769 100644
--- a/lisp/gnus/message.el
+++ b/lisp/gnus/message.el
@@ -5400,6 +5400,17 @@ Otherwise, generate and save a value for
`canlock-password' first."
(message "Denied posting -- only quoted text.")
nil)))))))
+(defun message--rotate-fixnum-left (n)
+ "Rotate the fixnum N left by one bit in a fixnum word.
+The result is a fixnum."
+ (logior (if (natnump n) 0 1)
+ (ash (cond ((< (ash most-positive-fixnum -1) n)
+ (logior n most-negative-fixnum))
+ ((< n (ash most-negative-fixnum -1))
+ (logand n most-positive-fixnum))
+ (n))
+ 1)))
+
(defun message-checksum ()
"Return a \"checksum\" for the current buffer."
(let ((sum 0))
@@ -5409,7 +5420,7 @@ Otherwise, generate and save a value for
`canlock-password' first."
(concat "^" (regexp-quote mail-header-separator) "$"))
(while (not (eobp))
(when (not (looking-at "[ \t\n]"))
- (setq sum (logxor (ash sum 1) (if (natnump sum) 0 1)
+ (setq sum (logxor (message--rotate-fixnum-left sum)
(char-after))))
(forward-char 1)))
sum))
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] master b9c0ea6: Port message-checksum to bignums,
Paul Eggert <=