[-- Attachment #1: message body text --] [-- Type: text/plain, Size: 161 bytes --] When I export the following as HTML, emacs hangs in org-html-protect: #+begin_src org & #+end_src The attached patch fixes the problem for me. Thanks, Kim. [-- Attachment #2: Patch for org mode --] [-- Type: text/plain, Size: 737 bytes --] From cfb1ccb6f9cfd84530c73b7f72d686a2062b3c3b Mon Sep 17 00:00:00 2001 From: Kim Rutherford <kmr44@cam.ac.uk> Date: Fri, 11 Mar 2011 16:44:09 +0000 Subject: [PATCH] Fix infinite loop in org-html-protect --- lisp/org-html.el | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/lisp/org-html.el b/lisp/org-html.el index c60c90d..2312b21 100644 --- a/lisp/org-html.el +++ b/lisp/org-html.el @@ -2186,7 +2186,7 @@ Possible conversions are set in `org-export-html-protect-char-alist'." (let ((start 0)) (while (string-match (car c) s start) (setq s (replace-match (cdr c) t t s) - start (match-beginning 0))))) + start (1+ (match-beginning 0)))))) s)) (defun org-html-expand (string) -- 1.7.1
Patch 674 (http://patchwork.newartisans.com/patch/674/) is now "Accepted". Maintainer comment: none This relates to the following submission: http://mid.gmane.org/%3C19834.23619.813886.886825%40gargle.gargle.HOWL%3E Here is the original message containing the patch: > Content-Type: text/plain; charset="utf-8" > MIME-Version: 1.0 > Content-Transfer-Encoding: 7bit > Subject: [O] Fix for infinite loop in org-html-protect > Date: Fri, 11 Mar 2011 22:30:43 -0000 > From: Kim Rutherford <kmr44@cam.ac.uk> > X-Patchwork-Id: 674 > Message-Id: <19834.23619.813886.886825@gargle.gargle.HOWL> > To: emacs-orgmode@gnu.org > > When I export the following as HTML, emacs hangs in org-html-protect: > > #+begin_src org > & > #+end_src > > The attached patch fixes the problem for me. > > Thanks, > Kim. > >From cfb1ccb6f9cfd84530c73b7f72d686a2062b3c3b Mon Sep 17 00:00:00 2001 > From: Kim Rutherford <kmr44@cam.ac.uk> > Date: Fri, 11 Mar 2011 16:44:09 +0000 > Subject: [PATCH] Fix infinite loop in org-html-protect > > --- > lisp/org-html.el | 2 +- > 1 files changed, 1 insertions(+), 1 deletions(-) > > diff --git a/lisp/org-html.el b/lisp/org-html.el > index c60c90d..2312b21 100644 > --- a/lisp/org-html.el > +++ b/lisp/org-html.el > @@ -2186,7 +2186,7 @@ Possible conversions are set in `org-export-html-protect-char-alist'." > (let ((start 0)) > (while (string-match (car c) s start) > (setq s (replace-match (cdr c) t t s) > - start (match-beginning 0))))) > + start (1+ (match-beginning 0)))))) > s)) > > (defun org-html-expand (string) >
Hi Kim,
Kim Rutherford <kmr44@cam.ac.uk> writes:
> When I export the following as HTML, emacs hangs in org-html-protect:
>
> #+begin_src org
> &
> #+end_src
>
> The attached patch fixes the problem for me.
Applied -- your patch is faaaaar better than the one I pushed, thanks.
--
Bastien
On 3/11/11 12:38 PM, Bastien Guerry wrote:
>>
>> ---
>> lisp/org-html.el | 2 +-
>> 1 files changed, 1 insertions(+), 1 deletions(-)
>>
>> diff --git a/lisp/org-html.el b/lisp/org-html.el
>> index c60c90d..2312b21 100644
>> --- a/lisp/org-html.el
>> +++ b/lisp/org-html.el
>> @@ -2186,7 +2186,7 @@ Possible conversions are set in `org-export-html-protect-char-alist'."
>> (let ((start 0))
>> (while (string-match (car c) s start)
>> (setq s (replace-match (cdr c) t t s)
>> - start (match-beginning 0)))))
>> + start (1+ (match-beginning 0))))))
>> s))
>>
>> (defun org-html-expand (string)
>>
I think there might be a second bug in that function that I had to fix myself.
I don't know the proper way to create/submit a patch, but instead of this:
(while (setq c (pop cl))
(while (string-match (car c) s start)
I think you need this:
(while (setq c (pop cl))
(setq start 0)
(while (string-match (car c) s start)
i.e. you need to start over at the beginning of the line each time you go
through the list of protected chars, or else you'll start from the last
replacement location.
Scott
Scott Frazer <frazer.scott@gmail.com> wrote:
> On 3/11/11 12:38 PM, Bastien Guerry wrote:
>
> >>
> >> ---
> >> lisp/org-html.el | 2 +-
> >> 1 files changed, 1 insertions(+), 1 deletions(-)
> >>
> >> diff --git a/lisp/org-html.el b/lisp/org-html.el
> >> index c60c90d..2312b21 100644
> >> --- a/lisp/org-html.el
> >> +++ b/lisp/org-html.el
> >> @@ -2186,7 +2186,7 @@ Possible conversions are set in `org-export-html-protect-char-alist'."
> >> (let ((start 0))
> >> (while (string-match (car c) s start)
> >> (setq s (replace-match (cdr c) t t s)
> >> - start (match-beginning 0)))))
> >> + start (1+ (match-beginning 0))))))
> >> s))
> >>
> >> (defun org-html-expand (string)
> >>
>
> I think there might be a second bug in that function that I had to fix myself.
> I don't know the proper way to create/submit a patch, but instead of this:
>
> (while (setq c (pop cl))
> (while (string-match (car c) s start)
>
> I think you need this:
>
> (while (setq c (pop cl))
> (setq start 0)
> (while (string-match (car c) s start)
>
> i.e. you need to start over at the beginning of the line each time you go
> through the list of protected chars, or else you'll start from the last
> replacement location.
>
There is a (let ((start 0))... around the (while (string-match...)..)
and inside the outer loop, so every time the inner loop is finished,
start is recreated and initialized to 0 for the next iteration of the
outer loop. At least, that's the case in latest git.
Nick
On Fri, Mar 11, 2011 at 1:55 PM, Nick Dokos <nicholas.dokos@hp.com> wrote:
> Scott Frazer <frazer.scott@gmail.com> wrote:
> There is a (let ((start 0))... around the (while (string-match...)..)
> and inside the outer loop, so every time the inner loop is finished,
> start is recreated and initialized to 0 for the next iteration of the
> outer loop. At least, that's the case in latest git.
>
Okay, it must have already been fixed then. I am on the 7.5 tag, so I should
probably move to the latest.
Scott