aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLars Magne Ingebrigtsen2014-11-27 17:50:05 +0100
committerLars Magne Ingebrigtsen2014-11-27 17:50:05 +0100
commit7c449b8f0dc926a12dcb6d3abbdbd6fe8decadc8 (patch)
tree2e5e4d71dd79d0ede2e798cc47911ce786926256
parent604ce9124efd295b46e3fbb2d6880302fe55a33f (diff)
downloademacs-7c449b8f0dc926a12dcb6d3abbdbd6fe8decadc8.tar.gz
emacs-7c449b8f0dc926a12dcb6d3abbdbd6fe8decadc8.zip
Add more sanity checks to the last eww after-change-function patch
-rw-r--r--lisp/net/eww.el96
1 files changed, 49 insertions, 47 deletions
diff --git a/lisp/net/eww.el b/lisp/net/eww.el
index 63a6c0d7af0..a082fe5a1b5 100644
--- a/lisp/net/eww.el
+++ b/lisp/net/eww.el
@@ -953,53 +953,55 @@ appears in a <link> or <a> tag."
953See URL `https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input'.") 953See URL `https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input'.")
954 954
955(defun eww-process-text-input (beg end length) 955(defun eww-process-text-input (beg end length)
956 (let* ((pos (cond 956 (when-let (pos (and (< (1+ end) (point-max))
957 ((get-text-property (1- end) 'eww-form) 957 (> (1- end) (point-min))
958 (1- end)) 958 (cond
959 ((get-text-property (1+ end) 'eww-form) 959 ((get-text-property (1- end) 'eww-form)
960 (1+ end)))) 960 (1- end))
961 (form (get-text-property pos 'eww-form)) 961 ((get-text-property (1+ end) 'eww-form)
962 (properties (text-properties-at pos)) 962 (1+ end)))))
963 (inhibit-read-only t) 963 (let* ((form (get-text-property pos 'eww-form))
964 (type (plist-get form :type))) 964 (properties (text-properties-at pos))
965 (when (and form 965 (inhibit-read-only t)
966 (member type eww-text-input-types)) 966 (type (plist-get form :type)))
967 (cond 967 (when (and form
968 ((zerop length) 968 (member type eww-text-input-types))
969 ;; Delete some space at the end. 969 (cond
970 (save-excursion 970 ((zerop length)
971 (goto-char 971 ;; Delete some space at the end.
972 (if (equal type "textarea") 972 (save-excursion
973 (1- (line-end-position)) 973 (goto-char
974 (eww-end-of-field))) 974 (if (equal type "textarea")
975 (let ((new (- end beg))) 975 (1- (line-end-position))
976 (while (and (> new 0) 976 (eww-end-of-field)))
977 (eql (following-char) ? )) 977 (let ((new (- end beg)))
978 (delete-region (point) (1+ (point))) 978 (while (and (> new 0)
979 (setq new (1- new)))) 979 (eql (following-char) ? ))
980 (set-text-properties beg end properties))) 980 (delete-region (point) (1+ (point)))
981 ((> length 0) 981 (setq new (1- new))))
982 ;; Add padding. 982 (set-text-properties beg end properties)))
983 (save-excursion 983 ((> length 0)
984 (goto-char (1- end)) 984 ;; Add padding.
985 (goto-char 985 (save-excursion
986 (if (equal type "textarea") 986 (goto-char (1- end))
987 (1- (line-end-position)) 987 (goto-char
988 (1+ (eww-end-of-field)))) 988 (if (equal type "textarea")
989 (let ((start (point))) 989 (1- (line-end-position))
990 (insert (make-string length ? )) 990 (1+ (eww-end-of-field))))
991 (set-text-properties start (point) properties))))) 991 (let ((start (point)))
992 (let ((value (buffer-substring-no-properties 992 (insert (make-string length ? ))
993 (eww-beginning-of-field) 993 (set-text-properties start (point) properties)))))
994 (eww-end-of-field)))) 994 (let ((value (buffer-substring-no-properties
995 (when (string-match " +\\'" value) 995 (eww-beginning-of-field)
996 (setq value (substring value 0 (match-beginning 0)))) 996 (eww-end-of-field))))
997 (plist-put form :value value) 997 (when (string-match " +\\'" value)
998 (when (equal type "password") 998 (setq value (substring value 0 (match-beginning 0))))
999 ;; Display passwords as asterisks. 999 (plist-put form :value value)
1000 (let ((start (eww-beginning-of-field))) 1000 (when (equal type "password")
1001 (put-text-property start (+ start (length value)) 1001 ;; Display passwords as asterisks.
1002 'display (make-string (length value) ?*)))))))) 1002 (let ((start (eww-beginning-of-field)))
1003 (put-text-property start (+ start (length value))
1004 'display (make-string (length value) ?*)))))))))
1003 1005
1004(defun eww-tag-textarea (dom) 1006(defun eww-tag-textarea (dom)
1005 (let ((start (point)) 1007 (let ((start (point))