diff options
| author | Paul Eggert | 2020-08-26 00:07:08 -0700 |
|---|---|---|
| committer | Paul Eggert | 2020-08-26 00:20:31 -0700 |
| commit | bd5771ff27dbbb2b09cc7c14f1ac040234285acc (patch) | |
| tree | 3a1fc95feed46fd6557397b92d5c05773c13c294 /src | |
| parent | 4c0a9754ace421461d648b911da6d5eec49e9a62 (diff) | |
| download | emacs-bd5771ff27dbbb2b09cc7c14f1ac040234285acc.tar.gz emacs-bd5771ff27dbbb2b09cc7c14f1ac040234285acc.zip | |
regex-emacs: fix leak on memory allocation failure
* src/regex-emacs.c (ENSURE_FAIL_STACK): If the failure
stack cannot be grown, free locally-allocated storage
before returning.
Diffstat (limited to 'src')
| -rw-r--r-- | src/regex-emacs.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/regex-emacs.c b/src/regex-emacs.c index 5d1bb094d53..3d8aaf4bb13 100644 --- a/src/regex-emacs.c +++ b/src/regex-emacs.c | |||
| @@ -969,7 +969,11 @@ typedef struct | |||
| 969 | #define ENSURE_FAIL_STACK(space) \ | 969 | #define ENSURE_FAIL_STACK(space) \ |
| 970 | while (REMAINING_AVAIL_SLOTS <= space) { \ | 970 | while (REMAINING_AVAIL_SLOTS <= space) { \ |
| 971 | if (!GROW_FAIL_STACK (fail_stack)) \ | 971 | if (!GROW_FAIL_STACK (fail_stack)) \ |
| 972 | return -2; \ | 972 | { \ |
| 973 | unbind_to (count, Qnil); \ | ||
| 974 | SAFE_FREE (); \ | ||
| 975 | return -2; \ | ||
| 976 | } \ | ||
| 973 | DEBUG_PRINT ("\n Doubled stack; size now: %td\n", fail_stack.size); \ | 977 | DEBUG_PRINT ("\n Doubled stack; size now: %td\n", fail_stack.size); \ |
| 974 | DEBUG_PRINT (" slots available: %td\n", REMAINING_AVAIL_SLOTS);\ | 978 | DEBUG_PRINT (" slots available: %td\n", REMAINING_AVAIL_SLOTS);\ |
| 975 | } | 979 | } |