diff options
| author | Peder O. Klingenberg | 2016-08-30 14:44:16 +0200 |
|---|---|---|
| committer | Noam Postavsky | 2016-09-07 19:02:43 -0400 |
| commit | 55dde6c1a21a792d3d75c19e612c74dd054aaf1e (patch) | |
| tree | 44978e45c4fe9b0da8c5a9a80c838cb34a9f3f04 | |
| parent | 32078ec8c444cd886a51c1a63103b230371d7a54 (diff) | |
| download | emacs-55dde6c1a21a792d3d75c19e612c74dd054aaf1e.tar.gz emacs-55dde6c1a21a792d3d75c19e612c74dd054aaf1e.zip | |
Avoid error in icalendar--read-element
* lisp/calendar/icalendar.el (icalendar--read-element): Avoid a regex
stack overflow by not using regex to extract values from calendar
events. (Bug#24315)
| -rw-r--r-- | lisp/calendar/icalendar.el | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/lisp/calendar/icalendar.el b/lisp/calendar/icalendar.el index 386c554c068..c88f4abcb6e 100644 --- a/lisp/calendar/icalendar.el +++ b/lisp/calendar/icalendar.el | |||
| @@ -361,7 +361,8 @@ Pass arguments REGEXP REP STRING FIXEDCASE LITERAL to | |||
| 361 | INVALUE gives the current iCalendar element we are reading. | 361 | INVALUE gives the current iCalendar element we are reading. |
| 362 | INPARAMS gives the current parameters..... | 362 | INPARAMS gives the current parameters..... |
| 363 | This function calls itself recursively for each nested calendar element | 363 | This function calls itself recursively for each nested calendar element |
| 364 | it finds." | 364 | it finds. The current buffer should be an unfolded buffer as returned |
| 365 | from `icalendar--get-unfolded-buffer'." | ||
| 365 | (let (element children line name params param param-name param-value | 366 | (let (element children line name params param param-name param-value |
| 366 | value | 367 | value |
| 367 | (continue t)) | 368 | (continue t)) |
| @@ -391,8 +392,9 @@ it finds." | |||
| 391 | (unless (looking-at ":") | 392 | (unless (looking-at ":") |
| 392 | (error "Oops")) | 393 | (error "Oops")) |
| 393 | (forward-char 1) | 394 | (forward-char 1) |
| 394 | (re-search-forward "\\(.*\\)\\(\r?\n[ \t].*\\)*" nil t) | 395 | (let ((start (point))) |
| 395 | (setq value (icalendar--rris "\r?\n[ \t]" "" (match-string 0))) | 396 | (end-of-line) |
| 397 | (setq value (buffer-substring start (point)))) | ||
| 396 | (setq line (list name params value)) | 398 | (setq line (list name params value)) |
| 397 | (cond ((eq name 'BEGIN) | 399 | (cond ((eq name 'BEGIN) |
| 398 | (setq children | 400 | (setq children |