From 4771f610915c400b92d63906edce66f986db2513 Mon Sep 17 00:00:00 2001 From: ueno Date: Mon, 19 Mar 2007 07:16:31 +0000 Subject: [PATCH] * epg.el (epg--decode-percent-escape): New function. --- ChangeLog | 4 ++++ epg.el | 47 ++++++++++++++++++++++++++++++++++------------- 2 files changed, 38 insertions(+), 13 deletions(-) diff --git a/ChangeLog b/ChangeLog index 96c1ed7..18129c7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2007-03-19 Daiki Ueno + + * epg.el (epg--decode-percent-escape): New function. + 2007-03-08 Daiki Ueno * epg.el (epg-list-keys): Parse GnuPG's print_string escape. diff --git a/epg.el b/epg.el index 5a3ce86..c391b2c 100644 --- a/epg.el +++ b/epg.el @@ -1199,7 +1199,9 @@ This function is for internal use only." (user-id (match-string 2 string)) (entry (assoc key-id epg-user-id-alist))) (condition-case nil - (setq user-id (epg--decode-coding-string user-id 'utf-8)) + (setq user-id (epg--decode-coding-string + (epg--decode-percent-escape user-id) + 'utf-8)) (error)) (if entry (setcdr entry user-id) @@ -1323,7 +1325,9 @@ This function is for internal use only." (condition-case nil (if (eq (epg-context-protocol context) 'CMS) (setq user-id (epg-dn-from-string user-id)) - (setq user-id (epg--decode-coding-string user-id 'utf-8))) + (setq user-id (epg--decode-coding-string + (epg--decode-percent-escape user-id) + 'utf-8))) (error)) (if entry (setcdr entry user-id) @@ -1584,7 +1588,9 @@ This function is for internal use only." (user-id (match-string 2 string)) (entry (assoc key-id epg-user-id-alist))) (condition-case nil - (setq user-id (epg--decode-coding-string user-id 'utf-8)) + (setq user-id (epg--decode-coding-string + (epg--decode-percent-escape user-id) + 'utf-8)) (error)) (if entry (setcdr entry user-id) @@ -2518,27 +2524,42 @@ PARAMETERS is a string which tells how to create the key." (epg-context-result-for context 'error)))) (epg-reset context))) +(defun epg--decode-percent-escape (string) + (let ((index 0)) + (while (string-match "%\\(\\(%\\)\\|\\([0-9A-Fa-f][0-9A-Fa-f]\\)\\)" + string index) + (if (match-beginning 2) + (setq string (replace-match "%" t t string) + index (1- (match-end 0))) + (setq string (replace-match + (string (string-to-number (match-string 3 string) 16)) + t t string) + index (- (match-end 0) 2)))) + string)) + (defun epg--decode-hexstring (string) (let ((index 0)) (while (eq index (string-match "[0-9A-Fa-f][0-9A-Fa-f]" string index)) - (setq string (replace-match "\\\\x\\&" t nil string) + (setq string (replace-match (string (string-to-number + (match-string 0 string) 16)) + t t string) index (+ index 4))) - (car (read-from-string (concat "\"" string "\""))))) + string)) (defun epg--decode-quotedstring (string) (let ((index 0)) (while (string-match "\\\\\\(\\([,=+<>#;\\\"]\\)\\|\ -\\([0-9A-Fa-f][0-9A-Fa-f]\\)\\|\\(.\\)\\)" +\\([0-9A-Fa-f][0-9A-Fa-f]\\)\\)" string index) (if (match-beginning 2) - (setq string (replace-match "\\2" t nil string) - index (1+ index)) + (setq string (replace-match "\\2" t t string) + index (1- (match-end 0))) (if (match-beginning 3) - (setq string (replace-match "\\\\x\\3" t nil string) - index (+ index 4)) - (setq string (replace-match "\\\\\\\\\\4" t nil string) - index (+ index 3))))) - (car (read-from-string (concat "\"" string "\""))))) + (setq string (replace-match (string (string-to-number + (match-string 0 string) 16)) + t t string) + index (- (match-end 0) 2))))) + string)) (defun epg-dn-from-string (string) "Parse STRING as LADPv3 Distinguished Names (RFC2253). -- 1.7.10.4