* 23.1; json-read-string crashes emacs with long string @ 2010-05-18 16:08 Carl Worth 2010-05-18 18:07 ` bug#6214: " Chong Yidong 0 siblings, 1 reply; 13+ messages in thread From: Carl Worth @ 2010-05-18 16:08 UTC (permalink / raw) To: bug-gnu-emacs; +Cc: Notmuch mailing list > Please describe exactly what actions triggered the bug > and the precise symptoms of the bug: A user of the emacs-based mail client, Notmuch [*], found that attempting to display a particular message would consistently causes a segmentation fault in emacs. I tracked this down to calling `json-read-string' with a very long string, (roughly 1 million characters). Rather than including that enormous string in this message, here's a little snippet of emacs lisp that creates and reads such a string. So, if evaluated, this code should trigger the segmentation fault, (assuming a copy of GPLv3 exists at /usr/share/emacs/23.1/etc/COPYING---adjust the filename if necessary). ;; Caution: Evaluating the block below has been known to crash emacs (with-temp-buffer (require 'json) ;; First we just need a lot of text. 32 copies of GPLv3 seems to do it (dotimes (i 32) (insert-file "/usr/share/emacs/23.1/etc/COPYING")) ;; Now create a buffer with a json-encoded version of the text (let ((json-string (json-encode-string (buffer-string)))) (with-temp-buffer (insert json-string) (goto-char (point-min)) ;; And try to read the string. This triggers the segfault. (json-read-string)))) > If Emacs crashed, and you have the Emacs process in the gdb debugger, > please include the output from the following gdb commands: > `bt full' and `xbacktrace'. I haven't attempted to debug this within gdb yet, (I'll have to get my hands on a build of emacs with debugging symbols first). But I wanted to share things right away, so that perhaps someone else could do further debugging and follow up. In the meantime, notmuch folks, if you've got a good idea for modifying notmuch to avoid this bug I'd be glad to hear it. Adjust followups to include the notmuch list and not the gnu.org bug address as appropriate. -Carl [*] http://notmuchmail.org PS. Here are some of the details provided by `report-emacs-bug': In GNU Emacs 23.1.1 (i486-pc-linux-gnu, GTK+ Version 2.18.2) of 2010-01-26 on raven, modified by Debian Windowing system distributor `The X.Org Foundation', version 11.0.10799001 configured using `configure '--build=i486-linux-gnu' '--host=i486-linux-gnu' '--prefix=/usr' '--sharedstatedir=/var/lib' '--libexecdir=/usr/lib' '--localstatedir=/var/lib' '--infodir=/usr/share/info' '--mandir=/usr/share/man' '--with-pop=yes' '--enable-locallisppath=/etc/emacs23:/etc/emacs:/usr/local/share/emacs/23.1/site-lisp:/usr/local/share/emacs/site-lisp:/usr/share/emacs/23.1/site-lisp:/usr/share/emacs/site-lisp:/usr/share/emacs/23.1/leim' '--with-x=yes' '--with-x-toolkit=gtk' '--with-toolkit-scroll-bars' 'build_alias=i486-linux-gnu' 'host_alias=i486-linux-gnu' 'CFLAGS=-DDEBIAN -g -O2' 'LDFLAGS=-g' 'CPPFLAGS='' Important settings: value of $LC_ALL: nil value of $LC_COLLATE: nil value of $LC_CTYPE: nil value of $LC_MESSAGES: nil value of $LC_MONETARY: nil value of $LC_NUMERIC: nil value of $LC_TIME: nil value of $LANG: en_US.UTF-8 value of $XMODIFIERS: nil locale-coding-system: utf-8-unix default-enable-multibyte-characters: t -- carl.d.worth@intel.com ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: bug#6214: 23.1; json-read-string crashes emacs with long string 2010-05-18 16:08 23.1; json-read-string crashes emacs with long string Carl Worth @ 2010-05-18 18:07 ` Chong Yidong 2010-08-12 21:58 ` Michal Sojka 0 siblings, 1 reply; 13+ messages in thread From: Chong Yidong @ 2010-05-18 18:07 UTC (permalink / raw) To: Carl Worth; +Cc: Notmuch mailing list, 6214-done Carl Worth <cworth@cworth.org> writes: > A user of the emacs-based mail client, Notmuch [*], found that > attempting to display a particular message would consistently > causes a segmentation fault in emacs. > > I haven't attempted to debug this within gdb yet, (I'll have to get my > hands on a build of emacs with debugging symbols first). But I wanted to > share things right away, so that perhaps someone else could do further > debugging and follow up. Looks like a stack overflow in the `string' function. I've checked in a fix, thanks for the bug report. ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: bug#6214: 23.1; json-read-string crashes emacs with long string 2010-05-18 18:07 ` bug#6214: " Chong Yidong @ 2010-08-12 21:58 ` Michal Sojka 2010-08-13 16:37 ` Chong Yidong 0 siblings, 1 reply; 13+ messages in thread From: Michal Sojka @ 2010-08-12 21:58 UTC (permalink / raw) To: Chong Yidong, Carl Worth; +Cc: 6214, Notmuch mailing list [-- Attachment #1: Type: text/plain, Size: 409 bytes --] On Tue, 18 May 2010, Chong Yidong wrote: > Looks like a stack overflow in the `string' function. I've checked in a > fix, thanks for the bug report. It seems the bug is still in the current Emacs HEAD (http://repo.or.cz/w/emacs.git/commit/08d1bfbda3ef4a7038556f6c56bec1a37b4721f0). I can reproduce it with the lisp code sent by Carl, but the backtrace is different. My backtrace is attached. Thanks Michal [-- Attachment #2: gdb.txt --] [-- Type: text/plain, Size: 24831 bytes --] #0 0x0000000000566739 in Fapply (nargs=2, args=0x7fffffffbcf8) at eval.c:2492 i = 8997664 numargs = <value optimized out> spread_arg = 12020694 funcall_args = 0x7fffff767100 fun = <value optimized out> #1 0x0000000000565135 in Ffuncall (nargs=<value optimized out>, args=<value optimized out>) at eval.c:2964 fun = <value optimized out> original_fun = 11891218 funcar = <value optimized out> numargs = 2 val = <value optimized out> backtrace = { next = 0x7fffffffbf00, function = 0x7fffffffbcf0, args = 0x7fffffffbcf8, nargs = 2, evalargs = 0 '\000', debug_on_exit = 0 '\000' } internal_args = 0x7fffffffbcf8 i = <value optimized out> #2 0x000000000059ecd2 in Fbyte_code (bytestr=<value optimized out>, vector=<value optimized out>, maxdepth=<value optimized out>) at bytecode.c:679 count = 47 op = <value optimized out> stack = { pc = 0xea5250 "\202|", top = 0x7fffffffbd00, bottom = 0x7fffffffbcf0, byte_string = 18230033, byte_string_start = 0xea51d8 "\303`f\211\030\206\t", constants = 18231925, next = 0x7fffffffce20 } top = 0x7fffffffbcf0 result = <value optimized out> #3 0x00000000005672ef in funcall_lambda (fun=18232277, nargs=<value optimized out>, arg_vector=<value optimized out>) at eval.c:3165 val = <value optimized out> syms_left = 11721042 next = 0 i = 0 optional = 0 rest = 0 #4 0x0000000000567454 in apply_lambda (fun=18232277, args=11721042, eval_flag=<value optimized out>) at eval.c:3092 args_left = 11721042 i = <value optimized out> tem = <value optimized out> #5 0x0000000000566b53 in Feval (form=18232272) at eval.c:2408 fun = 140737479340288 val = <value optimized out> original_fun = 17897138 original_args = 11721042 funcar = 8997664 backtrace = { next = 0x7fffffffbfe0, function = 0x7fffffffbf28, args = 0x7fffffffbe30, nargs = 0, evalargs = 0 '\000', debug_on_exit = 0 '\000' } #6 0x00000000005670c7 in Fprogn (args=<value optimized out>) at eval.c:395 val = 8997664 #7 0x0000000000566ec4 in Feval (form=<value optimized out>) at eval.c:2295 numargs = 8997664 args_left = 11697014 i = <value optimized out> argvals = {11721042, 74852149, 74124673, 11721042, 1, 140737488339112, 140737488338912, 5892710} fun = <value optimized out> val = <value optimized out> original_fun = 11890130 original_args = 11697014 funcar = <value optimized out> backtrace = { next = 0x7fffffffc0d0, function = 0x7fffffffc008, args = 0x7fffffffc000, nargs = -1, evalargs = 0 '\000', debug_on_exit = 0 '\000' } #8 0x0000000000567505 in Funwind_protect (args=11695302) at eval.c:1304 val = <value optimized out> #9 0x0000000000566ec4 in Feval (form=<value optimized out>) at eval.c:2295 numargs = 8997664 args_left = 11695302 i = <value optimized out> argvals = {74852149, 5665519, 74852149, 74124801, 140737488339352, 21480469067, 17767008, 17768448} fun = <value optimized out> val = <value optimized out> original_fun = 11890930 original_args = 11695302 funcar = <value optimized out> backtrace = { next = 0x7fffffffc1d0, function = 0x7fffffffc0f8, args = 0x7fffffffc0f0, nargs = -1, evalargs = 0 '\000', debug_on_exit = 0 '\000' } #10 0x00000000005670c7 in Fprogn (args=<value optimized out>) at eval.c:395 val = 8997664 #11 0x000000000055951d in Fsave_current_buffer (args=11693078) at editfns.c:1012 val = <value optimized out> #12 0x0000000000566ec4 in Feval (form=<value optimized out>) at eval.c:2295 numargs = 8997664 args_left = 11693078 i = <value optimized out> argvals = {8633005, 18237426, 11695062, 11695030, 140737488339456, 5662408, 1, 2} fun = <value optimized out> val = <value optimized out> original_fun = 11928034 original_args = 11693078 funcar = <value optimized out> backtrace = { next = 0x7fffffffc2a0, function = 0x7fffffffc1f8, args = 0x7fffffffc1f0, nargs = -1, evalargs = 0 '\000', debug_on_exit = 0 '\000' } #13 0x0000000000566cec in Feval (form=<value optimized out>) at eval.c:2406 fun = <value optimized out> val = <value optimized out> original_fun = 12595842 original_args = 11695030 funcar = <value optimized out> backtrace = { next = 0x7fffffffc3f0, function = 0x7fffffffc2c8, args = 0x7fffffffc2c0, nargs = -1, evalargs = 1 '\001', debug_on_exit = 0 '\000' } #14 0x00000000005670c7 in Fprogn (args=<value optimized out>) at eval.c:395 val = 8997664 #15 0x0000000000567d08 in Flet (args=11694902) at eval.c:1051 tem = 74852149 elt = <value optimized out> varlist = <value optimized out> #16 0x0000000000566ec4 in Feval (form=<value optimized out>) at eval.c:2295 numargs = 8997664 args_left = 11694902 i = <value optimized out> argvals = {8635685, 18755398, 18755446, 18755510, 140737488340000, 5662408, 1, 2} fun = <value optimized out> val = <value optimized out> original_fun = 11890562 original_args = 11694902 funcar = <value optimized out> backtrace = { next = 0x7fffffffc4c0, function = 0x7fffffffc418, args = 0x7fffffffc410, nargs = -1, evalargs = 0 '\000', debug_on_exit = 0 '\000' } #17 0x0000000000566cec in Feval (form=<value optimized out>) at eval.c:2406 fun = <value optimized out> val = <value optimized out> original_fun = 12606802 original_args = 18755430 funcar = <value optimized out> backtrace = { next = 0x7fffffffc610, function = 0x7fffffffc4e8, args = 0x7fffffffc4e0, nargs = -1, evalargs = 1 '\001', debug_on_exit = 0 '\000' } #18 0x00000000005670c7 in Fprogn (args=<value optimized out>) at eval.c:395 val = 8997664 #19 0x0000000000567d08 in Flet (args=18755366) at eval.c:1051 tem = 74125073 elt = <value optimized out> varlist = <value optimized out> #20 0x0000000000566ec4 in Feval (form=<value optimized out>) at eval.c:2295 numargs = 8997664 args_left = 18755366 i = <value optimized out> argvals = {17896994, 11721042, 11721042, 5561631, 140737488340688, 5708090, 41, 0} fun = <value optimized out> val = <value optimized out> original_fun = 11890562 original_args = 18755366 funcar = <value optimized out> backtrace = { next = 0x7fffffffc6f0, function = 0x7fffffffc638, args = 0x7fffffffc630, nargs = -1, evalargs = 0 '\000', debug_on_exit = 0 '\000' } #21 0x00000000005670c7 in Fprogn (args=<value optimized out>) at eval.c:395 val = 8997664 #22 0x0000000000566ec4 in Feval (form=<value optimized out>) at eval.c:2295 numargs = 8997664 args_left = 18752566 i = <value optimized out> argvals = {11721042, 15322325, 15321809, 11721042, 1, 140737488340920, 140737488340720, 17986768} fun = <value optimized out> val = <value optimized out> original_fun = 11890130 original_args = 18752566 funcar = <value optimized out> backtrace = { next = 0x7fffffffc7e0, function = 0x7fffffffc718, args = 0x7fffffffc710, nargs = -1, evalargs = 0 '\000', debug_on_exit = 0 '\000' } #23 0x0000000000567505 in Funwind_protect (args=18752758) at eval.c:1304 val = <value optimized out> #24 0x0000000000566ec4 in Feval (form=<value optimized out>) at eval.c:2295 numargs = 8997664 args_left = 18752758 i = <value optimized out> argvals = {15322325, 5665519, 15322325, 8618505, 140737488341160, 21474836480, 17767008, 17768320} fun = <value optimized out> val = <value optimized out> original_fun = 11890930 original_args = 18752758 funcar = <value optimized out> backtrace = { next = 0x7fffffffc8e0, function = 0x7fffffffc808, args = 0x7fffffffc800, nargs = -1, evalargs = 0 '\000', debug_on_exit = 0 '\000' } #25 0x00000000005670c7 in Fprogn (args=<value optimized out>) at eval.c:395 val = 8997664 #26 0x000000000055951d in Fsave_current_buffer (args=18752966) at editfns.c:1012 val = <value optimized out> #27 0x0000000000566ec4 in Feval (form=<value optimized out>) at eval.c:2295 numargs = 8997664 args_left = 18752966 i = <value optimized out> argvals = {8633005, 17897186, 18752774, 18752806, 140737488341264, 5662408, 1, 2} fun = <value optimized out> val = <value optimized out> original_fun = 11928034 original_args = 18752966 funcar = <value optimized out> backtrace = { next = 0x7fffffffc9b0, function = 0x7fffffffc908, args = 0x7fffffffc900, nargs = -1, evalargs = 0 '\000', debug_on_exit = 0 '\000' } #28 0x0000000000566cec in Feval (form=<value optimized out>) at eval.c:2406 fun = <value optimized out> val = <value optimized out> original_fun = 12595842 original_args = 18752806 funcar = <value optimized out> backtrace = { next = 0x7fffffffcb00, function = 0x7fffffffc9d8, args = 0x7fffffffc9d0, nargs = -1, evalargs = 1 '\001', debug_on_exit = 0 '\000' } #29 0x00000000005670c7 in Fprogn (args=<value optimized out>) at eval.c:395 val = 8997664 #30 0x0000000000567d08 in Flet (args=18752854) at eval.c:1051 tem = 15322325 elt = <value optimized out> varlist = <value optimized out> #31 0x0000000000566ec4 in Feval (form=<value optimized out>) at eval.c:2295 numargs = 8997664 args_left = 18752854 i = <value optimized out> argvals = {8635685, 18755046, 18755126, 18755254, 140737488341808, 5662408, 11739872, 2} fun = <value optimized out> val = <value optimized out> original_fun = 11890562 original_args = 18752854 funcar = <value optimized out> backtrace = { next = 0x7fffffffcbd0, function = 0x7fffffffcb28, args = 0x7fffffffcb20, nargs = -1, evalargs = 0 '\000', debug_on_exit = 0 '\000' } #32 0x0000000000566cec in Feval (form=<value optimized out>) at eval.c:2406 fun = <value optimized out> val = <value optimized out> original_fun = 12606802 original_args = 18755110 funcar = <value optimized out> backtrace = { next = 0x7fffffffcd70, function = 0x7fffffffcbf8, args = 0x7fffffffcbf0, nargs = -1, evalargs = 1 '\001', debug_on_exit = 0 '\000' } #33 0x000000000058ae4f in readevalloop (readcharfun=18093061, stream=0x0, sourcename=18361409, printflag=<value optimized out>, unibyte=<value optimized out>, readfun=<value optimized out>, start=11721042, end=11721042, evalfun=<value optimized out>) at lread.c:1739 count1 = 40 c = <value optimized out> val = <value optimized out> b = 0x1141400 continue_reading_p = 1 whole_buffer = 1 first_sexp = <value optimized out> #34 0x000000000058bb71 in Feval_buffer (buffer=<value optimized out>, printflag=11721042, filename=15002881, unibyte=11721042, do_allow_print=<value optimized out>) at lread.c:1799 tem = <value optimized out> buf = 18093061 #35 0x0000000000565073 in Ffuncall (nargs=<value optimized out>, args=<value optimized out>) at eval.c:2997 fun = <value optimized out> original_fun = <value optimized out> funcar = <value optimized out> numargs = 5 val = <value optimized out> backtrace = { next = 0x7fffffffcf30, function = 0x7fffffffcdd0, args = 0x7fffffffcdd8, nargs = 5, evalargs = 0 '\000', debug_on_exit = 0 '\000' } internal_args = 0x7fffffffcdd8 i = 5 #36 0x000000000059ecd2 in Fbyte_code (bytestr=<value optimized out>, vector=<value optimized out>, maxdepth=<value optimized out>) at bytecode.c:679 count = 27 op = <value optimized out> stack = { pc = 0xaa6e3a "\210,\336\b!\210\016\"\204\256", top = 0x7fffffffcdf8, bottom = 0x7fffffffcdd0, byte_string = 8682273, byte_string_start = 0xaa6dae "\306\b!\204\022", constants = 8682309, next = 0x7fffffffd2c0 } top = 0x7fffffffcdd0 result = <value optimized out> #37 0x00000000005672ef in funcall_lambda (fun=8682141, nargs=<value optimized out>, arg_vector=<value optimized out>) at eval.c:3165 val = <value optimized out> syms_left = 11721042 next = 12593154 i = 4 optional = 1 rest = 0 #38 0x0000000000564f03 in Ffuncall (nargs=<value optimized out>, args=0x847a98) at eval.c:3040 fun = 140737479340288 original_fun = 12593010 funcar = 8997664 numargs = 4 val = <value optimized out> backtrace = { next = 0x7fffffffd1f0, function = 0x7fffffffcf90, args = 0x7fffffffcf98, nargs = 4, evalargs = 0 '\000', debug_on_exit = 0 '\000' } internal_args = 0x7fffffffcf98 i = <value optimized out> #39 0x00000000005652d9 in call4 (fn=<value optimized out>, arg1=<value optimized out>, arg2=16, arg3=8473480, arg4=0) at eval.c:2831 ret_ungc_val = 8997664 args = {12593010, 15002881, 15002881, 11721042, 11721090} #40 0x000000000058b71d in Fload (file=18663777, noerror=8473480, nomessage=11721090, nosuffix=<value optimized out>, must_suffix=<value optimized out>) at lread.c:1183 val = <value optimized out> stream = <value optimized out> fd = 5 count = 20 found = 15002881 efound = <value optimized out> hist_file_name = 15002881 newer = 0 compiled = 17487280 handler = <value optimized out> safe_p = 17767648 tmp = {18737654, 13154870} version = 0 #41 0x0000000000565073 in Ffuncall (nargs=<value optimized out>, args=<value optimized out>) at eval.c:2997 fun = <value optimized out> original_fun = <value optimized out> funcar = <value optimized out> numargs = 5 val = <value optimized out> backtrace = { next = 0x7fffffffd3d0, function = 0x7fffffffd250, args = 0x7fffffffd258, nargs = 3, evalargs = 0 '\000', debug_on_exit = 0 '\000' } internal_args = 0x7fffffffd1a0 i = 5 #42 0x000000000059ecd2 in Fbyte_code (bytestr=<value optimized out>, vector=<value optimized out>, maxdepth=<value optimized out>) at bytecode.c:679 count = 5 op = <value optimized out> stack = { pc = 0xa88814 "\210*\202\300\003\016L띃!\002\347\016N\206\f\002\f\211A\024@!\036S\346\016S!\036T\352\016T\314ى$\210*\202\300\003\016L욃J\002\331\026Q\016N\206\065\002\f\211A\024@\211\026F;\204@\002\332\355!\210\356\347\016F!!\210\202\300\003\016LX\002\360\331!\210\202\300\003\016L\361\232\203f\002\362\363!\210\202\300\003\321\364\016L\"\203w\002\365\016L!\026B\202\300\003\321\366\016L\"\203\224\002\365\325\326\016L\"!\026B\365\325\367\016L\"!\026A\202\300\003\334\016M\016H\"\211\026F\203\252\002\016FA@\f\233\024\202\300\003\334\016M\016K\"\211\026F\203\300\002\016FA@\f\233\024"..., top = 0x7fffffffd268, bottom = 0x7fffffffd250, byte_string = 9032857, byte_string_start = 0xa8861f "\306 \210\b\203\021", constants = 9032893, next = 0x7fffffffd490 } top = 0x7fffffffd250 result = <value optimized out> #43 0x00000000005672ef in funcall_lambda (fun=9032797, nargs=<value optimized out>, arg_vector=<value optimized out>) at eval.c:3165 val = <value optimized out> syms_left = 11721042 next = 13750050 i = 1 optional = 0 rest = 0 #44 0x0000000000564f03 in Ffuncall (nargs=<value optimized out>, args=0x89d458) at eval.c:3040 fun = 140737479340288 original_fun = 13756226 funcar = 8997664 numargs = 1 val = <value optimized out> backtrace = { next = 0x7fffffffd5a0, function = 0x7fffffffd430, args = 0x7fffffffd438, nargs = 1, evalargs = 0 '\000', debug_on_exit = 0 '\000' } internal_args = 0x7fffffffd438 i = <value optimized out> #45 0x000000000059ecd2 in Fbyte_code (bytestr=<value optimized out>, vector=<value optimized out>, maxdepth=<value optimized out>) at bytecode.c:679 count = 4 op = <value optimized out> stack = { pc = 0xa8b2dc "\210\016N\203s\006\201", <incomplete sequence \346>, top = 0x7fffffffd438, bottom = 0x7fffffffd430, byte_string = 9005745, byte_string_start = 0xa8ac75 "\306 \020\307\021\n\023\307\024\310\311!\211\035\307=\204\064", constants = 9005781, next = 0x7fffffffd650 } top = 0x7fffffffd430 result = <value optimized out> #46 0x00000000005672ef in funcall_lambda (fun=9005701, nargs=<value optimized out>, arg_vector=<value optimized out>) at eval.c:3165 val = <value optimized out> syms_left = 11721042 next = 12575218 i = 0 optional = 0 rest = 2 #47 0x0000000000564f03 in Ffuncall (nargs=<value optimized out>, args=0x896a80) at eval.c:3040 fun = 140737479340288 original_fun = 12575218 funcar = 8997664 numargs = 0 val = <value optimized out> backtrace = { next = 0x7fffffffd810, function = 0x7fffffffd600, args = 0x7fffffffd608, nargs = 0, evalargs = 0 '\000', debug_on_exit = 0 '\000' } internal_args = 0x7fffffffd608 i = <value optimized out> #48 0x000000000059ecd2 in Fbyte_code (bytestr=<value optimized out>, vector=<value optimized out>, maxdepth=<value optimized out>) at bytecode.c:679 count = 2 op = <value optimized out> stack = { pc = 0xa8ba98 "\210*\340\341\342\"\210\343\321\344\"\211\036$;\203\251", top = 0x7fffffffd600, bottom = 0x7fffffffd600, byte_string = 9000737, byte_string_start = 0xa8ba0a "\b\203\b", constants = 9000773, next = 0x0 } top = 0x7fffffffd600 result = <value optimized out> #49 0x00000000005672ef in funcall_lambda (fun=9000693, nargs=<value optimized out>, arg_vector=<value optimized out>) at eval.c:3165 val = <value optimized out> syms_left = 11721042 next = 0 i = 0 optional = 32767 rest = 0 #50 0x0000000000567454 in apply_lambda (fun=9000693, args=11721042, eval_flag=<value optimized out>) at eval.c:3092 args_left = 11721042 i = <value optimized out> tem = <value optimized out> #51 0x0000000000566b53 in Feval (form=9000688) at eval.c:2408 fun = 140737479340288 val = <value optimized out> original_fun = 13749474 original_args = 11721042 funcar = 8997664 backtrace = { next = 0x0, function = 0x7fffffffd838, args = 0x7fffffffd740, nargs = 0, evalargs = 0 '\000', debug_on_exit = 0 '\000' } #52 0x000000000056437d in internal_condition_case (bfun=<value optimized out>, handlers=<value optimized out>, hfun=<value optimized out>) at eval.c:1458 val = 8997664 c = { tag = 11721042, val = 11721042, next = 0x7fffffffda10, gcpro = 0x0, jmp = {{ __jmpbuf = {13365184, 3949921905019383304, 13365216, 140737488346744, 1, 1, -3949921426383376888, 3949920965887585800}, __mask_was_saved = 0, __saved_mask = { __val = {140737353880784, 140737353835656, 4294967295, 4238812, 1, 8460504, 0, 1, 1, 0, 140737351959490, 140733193388033, 0, 140737488345816, 140737251616176, 226670640} } }}, backlist = 0x0, handlerlist = 0x0, lisp_eval_depth = 0, pdlcount = 2, poll_suppress_count = 1, interrupt_input_blocked = 0, byte_stack = 0x0 } h = { handler = 11773138, var = 11721042, chosen_clause = 11721042, tag = 0x7fffffffd8a0, next = 0x0 } #53 0x00000000004f9e06 in top_level_1 (ignore=<value optimized out>) at keyboard.c:1355 No locals. #54 0x00000000005644a8 in internal_catch (tag=<value optimized out>, func=<value optimized out>, arg=<value optimized out>) at eval.c:1202 c = { tag = 11769202, val = 11721042, next = 0x0, gcpro = 0x0, jmp = {{ __jmpbuf = {13365184, 3949921905019383304, 13365216, 140737488346744, 1, 1, -3949921426333045240, 3949920965646937608}, __mask_was_saved = 0, __saved_mask = { __val = {0, 0, 0, 0, 112, 140737255104152, 352, 140737255104152, 140737255104168, 30064771072, 344, 94489280656, 30064771072, 384, 94489280612, 11993394} } }}, backlist = 0x0, handlerlist = 0x0, lisp_eval_depth = 0, pdlcount = 2, poll_suppress_count = 1, interrupt_input_blocked = 0, byte_stack = 0x0 } #55 0x00000000004f9e7b in command_loop () at keyboard.c:1310 No locals. #56 0x00000000004fa278 in recursive_edit_1 () at keyboard.c:940 val = <value optimized out> #57 0x00000000004fa3b7 in Frecursive_edit () at keyboard.c:1002 buffer = 11721042 #58 0x00000000004ed995 in main (argc=0, argv=0x7fffffffdf98) at emacs.c:1764 dummy = 0 stack_bottom_variable = 0 '\000' do_initial_setlocale = <value optimized out> skip_args = 1 rlim = { rlim_cur = 8720000, rlim_max = 18446744073709551615 } no_loadup = 0 junk = 0x0 dname_arg = 0x0 ch_to_dir = 0x0 Lisp Backtrace: "apply" (0xffffbcf8) "json-read-string" (0xffffbe30) "progn" (0xffffc000) "unwind-protect" (0xffffc0f0) "save-current-buffer" (0xffffc1f0) "with-current-buffer" (0xffffc2c0) "let" (0xffffc410) "with-temp-buffer" (0xffffc4e0) "let" (0xffffc630) "progn" (0xffffc710) "unwind-protect" (0xffffc800) "save-current-buffer" (0xffffc900) "with-current-buffer" (0xffffc9d0) "let" (0xffffcb20) "with-temp-buffer" (0xffffcbf0) "eval-buffer" (0xffffcdd8) "load-with-code-conversion" (0xffffcf98) "load" (0xffffd258) "command-line-1" (0xffffd438) "command-line" (0xffffd608) "normal-top-level" (0xffffd740) ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: bug#6214: 23.1; json-read-string crashes emacs with long string 2010-08-12 21:58 ` Michal Sojka @ 2010-08-13 16:37 ` Chong Yidong 2010-08-14 7:39 ` Michal Sojka 0 siblings, 1 reply; 13+ messages in thread From: Chong Yidong @ 2010-08-13 16:37 UTC (permalink / raw) To: Michal Sojka; +Cc: 6214, Notmuch mailing list Michal Sojka <sojkam1@fel.cvut.cz> writes: > It seems the bug is still in the current Emacs HEAD > (http://repo.or.cz/w/emacs.git/commit/08d1bfbda3ef4a7038556f6c56bec1a37b4721f0). > I can reproduce it with the lisp code sent by Carl, but the backtrace is > different. My backtrace is attached. I can't reproduce it with the BZR repository. Maybe the git mirror you are using is not up to date. Without any further information from you about your Emacs build (information that would have been available if you had used `M-x report-emacs-bug'), it is impossible to say. ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: bug#6214: 23.1; json-read-string crashes emacs with long string 2010-08-13 16:37 ` Chong Yidong @ 2010-08-14 7:39 ` Michal Sojka 2010-08-14 21:30 ` Chong Yidong 0 siblings, 1 reply; 13+ messages in thread From: Michal Sojka @ 2010-08-14 7:39 UTC (permalink / raw) To: Chong Yidong; +Cc: 6214, Notmuch mailing list On Fri, 13 Aug 2010, Chong Yidong wrote: > Michal Sojka <sojkam1@fel.cvut.cz> writes: > > > It seems the bug is still in the current Emacs HEAD > > (http://repo.or.cz/w/emacs.git/commit/08d1bfbda3ef4a7038556f6c56bec1a37b4721f0). > > I can reproduce it with the lisp code sent by Carl, but the backtrace is > > different. My backtrace is attached. > > I can't reproduce it with the BZR repository. Maybe the git mirror you > are using is not up to date. Without any further information from you > about your Emacs build (information that would have been available if > you had used `M-x report-emacs-bug'), it is impossible to say. I cloned bzr repo (trunk:101071) and I can reproduce the bug (./emacs --batch -l ~/q/json-emacs-bug.el). Backtrace is the same as in my previous mail and report-emacs-bug information is bellow. Let me know if you need additional info. Thanks -Michal In GNU Emacs 24.0.50.1 (x86_64-unknown-linux-gnu, GTK+ Version 2.20.1) of 2010-08-14 on steelpick Windowing system distributor `The X.Org Foundation', version 11.0.10707000 Important settings: value of $LC_ALL: nil value of $LC_COLLATE: nil value of $LC_CTYPE: nil value of $LC_MESSAGES: en_US.UTF-8 value of $LC_MONETARY: nil value of $LC_NUMERIC: nil value of $LC_TIME: nil value of $LANG: en_US.utf8 value of $XMODIFIERS: nil locale-coding-system: utf-8-unix default enable-multibyte-characters: t Major mode: Fundamental Minor modes in effect: tooltip-mode: t mouse-wheel-mode: t menu-bar-mode: t file-name-shadow-mode: t global-font-lock-mode: t blink-cursor-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t line-number-mode: t transient-mark-mode: t Recent input: M-x r e p o r t SPC e m a SPC SPC <return> Recent messages: For information about GNU Emacs and the GNU system, type C-h C-a. Load-path shadows: None found. Features: (shadow sort gnus-util mail-extr message sendmail regexp-opt rfc822 mml easymenu mml-sec mm-decode mm-bodies mm-encode mail-parse rfc2231 rfc2047 rfc2045 ietf-drums mm-util mail-prsvr mailabbrev mail-utils gmm-utils mailheader emacsbug package warnings tooltip ediff-hook vc-hooks lisp-float-type mwheel x-win x-dnd tool-bar dnd fontset image fringe lisp-mode register page menu-bar rfn-eshadow timer select scroll-bar mldrag mouse jit-lock font-lock syntax facemenu font-core frame cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean japanese hebrew greek romanian slovak czech european ethiopic indian cyrillic chinese case-table epa-hook jka-cmpr-hook help simple abbrev loaddefs button minibuffer faces cus-face files text-properties overlay md5 base64 format env code-pages mule custom widget hashtable-print-readable backquote make-network-process dbusbind dynamic-setting system-font-setting font-render-setting move-toolbar gtk x-toolkit x multi-tty emacs) ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: bug#6214: 23.1; json-read-string crashes emacs with long string 2010-08-14 7:39 ` Michal Sojka @ 2010-08-14 21:30 ` Chong Yidong 2010-08-15 7:37 ` Michal Sojka 0 siblings, 1 reply; 13+ messages in thread From: Chong Yidong @ 2010-08-14 21:30 UTC (permalink / raw) To: Michal Sojka; +Cc: 6214, Notmuch mailing list Michal Sojka <sojkam1@fel.cvut.cz> writes: > I cloned bzr repo (trunk:101071) and I can reproduce the bug (./emacs > --batch -l ~/q/json-emacs-bug.el). Backtrace is the same as in my > previous mail and report-emacs-bug information is bellow. Let me know if > you need additional info. First, please check if this equivalent and simpler recipe also reproduces the problem, to make sure this is the same bug: emacs --batch -q --eval "(apply 'string (make-list 1122176 ?a)))" If so, please recompile without optimizations: CFLAGS="-g" ./configure make and see if you can obtain a cleaner backtrace. ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: bug#6214: 23.1; json-read-string crashes emacs with long string 2010-08-14 21:30 ` Chong Yidong @ 2010-08-15 7:37 ` Michal Sojka 2010-08-16 17:40 ` Chong Yidong 0 siblings, 1 reply; 13+ messages in thread From: Michal Sojka @ 2010-08-15 7:37 UTC (permalink / raw) To: Chong Yidong; +Cc: 6214, Notmuch mailing list On Sat, 14 Aug 2010, Chong Yidong wrote: > First, please check if this equivalent and simpler recipe also > reproduces the problem, to make sure this is the same bug: > > emacs --batch -q --eval "(apply 'string (make-list 1122176 ?a)))" Yes, the problem is still here. > If so, please recompile without optimizations: > > CFLAGS="-g" ./configure > make > > and see if you can obtain a cleaner backtrace. Program received signal SIGSEGV, Segmentation fault. 0x00000000005f81fc in Fapply (nargs=2, args=0x7fffffffc670) at eval.c:2492 2492 memcpy (funcall_args, args, nargs * sizeof (Lisp_Object)); #0 0x00000000005f81fc in Fapply (nargs=2, args=0x7fffffffc670) at eval.c:2492 i = 0 numargs = 1122176 spread_arg = 38164022 funcall_args = 0x7fffff76c9d0 fun = 9260085 gcpro1 = { next = 0x2465636, var = 0x95cb41, nvars = 1122177 } #1 0x00000000005f7ade in Feval (form=19244870) at eval.c:2321 vals = 0x7fffffffc670 argnum = 2 numargs = 8 args_left = 12507474 i = 2 maxargs = -14728 argvals = {19244854, 18642001, 0, 6, 6, 25769803776, 16350976, 12420200} fun = 12011021 val = 24 original_fun = 12677650 original_args = 19244918 funcar = 19244870 backtrace = { next = 0x7fffffffc800, function = 0x7fffffffc770, args = 0x7fffffffc670, nargs = 2, evalargs = 1 '\001', debug_on_exit = 0 '\000' } gcpro1 = { next = 0x0, var = 0x11c7471, nvars = 39 } gcpro2 = { next = 0x0, var = 0x7fffffffd530, nvars = -14512 } gcpro3 = { next = 0x125a416, var = 0x7fffffffc670, nvars = 2 } #2 0x00000000005f8ead in Ffuncall (nargs=2, args=0x7fffffffc880) at eval.c:2983 fun = 12010973 original_fun = 12677602 funcar = 9817142 numargs = 1 lisp_numargs = 6302634 val = 19244870 backtrace = { next = 0x7fffffffcc80, function = 0x7fffffffc880, args = 0x7fffffffc888, nargs = 1, evalargs = 0 '\000', debug_on_exit = 0 '\000' } internal_args = 0x7fffffffc888 i = 0 #3 0x0000000000645887 in Fbyte_code (bytestr=9815377, vector=9815413, maxdepth=40) at bytecode.c:679 count = 5 op = 1 vectorp = 0x95c580 bytestr_length = 1187 stack = { pc = 0xb48b63 "\210\202\300\003\016L坃\311\001\346\347\016N\206\241\001\f\211A\024@!!\026F\016E\203\274\001\016E\016F\016EAB\241\210\016EA\026E\202\300\003\016F\016RB\211\026R\026E\202\300\003\016L蝃\372\001\347\016N\206\333\001\f\211A\024@!\036S\346\016S!\036T\351\016T!\203\357\001\016T\026S\352\016S\314\331#\210*\202\300\003\016L띃!\002\347\016N\206\f\002\f\211A\024@!\036S\346\016S!\036T\352\016T\314ى$\210*\202\300\003\016L욃J\002\331\026Q\016N\206\065\002\f\211A\024@\211\026F;\204@\002\332\355!\210\356\347\016F!!\210\202\300\003\016LX\002", <incomplete sequence \360>..., top = 0x7fffffffc888, bottom = 0x7fffffffc880, byte_string = 9815377, byte_string_start = 0xb489d9 "\306 \210\b\203\021", constants = 9815413, next = 0x7fffffffcd70 } top = 0x7fffffffc880 result = 140737488341184 #4 0x00000000005f9701 in funcall_lambda (fun=9815317, nargs=1, arg_vector=0x7fffffffcd08) at eval.c:3165 val = 12535520 syms_left = 12507474 next = 14517122 count = 4 i = 1 optional = 0 rest = 0 #5 0x00000000005f90bb in Ffuncall (nargs=2, args=0x7fffffffcd00) at eval.c:3029 fun = 9815317 original_fun = 14191698 funcar = 12535520 numargs = 1 lisp_numargs = 6152191 val = 19245862 backtrace = { next = 0x7fffffffd0f0, function = 0x7fffffffcd00, args = 0x7fffffffcd08, nargs = 1, evalargs = 0 '\000', debug_on_exit = 0 '\000' } internal_args = 0x125ab36 i = 0 #6 0x0000000000645887 in Fbyte_code (bytestr=9788449, vector=9788485, maxdepth=28) at bytecode.c:679 count = 4 op = 1 vectorp = 0x955c50 bytestr_length = 1723 stack = { pc = 0xb4b681 "\210\016N\203^\006\201", <incomplete sequence \343>, top = 0x7fffffffcd08, bottom = 0x7fffffffcd00, byte_string = 9788449, byte_string_start = 0xb4b02f "\306 \020\307\021\n\023\307\024\310\311!\211\035\307=\204\064", constants = 9788485, next = 0x7fffffffd1d0 } top = 0x7fffffffcd00 result = 13467377 #7 0x00000000005f9701 in funcall_lambda (fun=9788405, nargs=0, arg_vector=0x7fffffffd178) at eval.c:3165 val = 12535520 syms_left = 12507474 next = 13258642 count = 4 i = 0 optional = 0 rest = 0 #8 0x00000000005f90bb in Ffuncall (nargs=1, args=0x7fffffffd170) at eval.c:3029 fun = 9788405 original_fun = 13569954 funcar = 13569906 numargs = 0 lisp_numargs = 6152191 val = 13467377 backtrace = { next = 0x7fffffffd6c0, function = 0x7fffffffd170, args = 0x7fffffffd178, nargs = 0, evalargs = 0 '\000', debug_on_exit = 0 '\000' } internal_args = 0xcd7ef1 i = 0 #9 0x0000000000645887 in Fbyte_code (bytestr=9783473, vector=9783509, maxdepth=24) at bytecode.c:679 count = 2 op = 0 vectorp = 0x9548e0 bytestr_length = 220 stack = { pc = 0xb4be2e "\210*\340\341\342\"\210\343\321\344\"\211\036$;\203\251", top = 0x7fffffffd170, bottom = 0x7fffffffd170, byte_string = 9783473, byte_string_start = 0xb4bda0 "\b\203\b", constants = 9783509, next = 0x0 } top = 0x7fffffffd170 result = 4294967295 #10 0x00000000005f9701 in funcall_lambda (fun=9783429, nargs=0, arg_vector=0x7fffffffd530) at eval.c:3165 val = 1 syms_left = 12507474 next = 140733193388033 count = 2 i = 0 optional = 0 rest = 0 #11 0x00000000005f932f in apply_lambda (fun=9783429, args=12507474, eval_flag=1) at eval.c:3092 args_left = 12507474 numargs = 0 arg_vector = 0x7fffffffd530 gcpro1 = { next = 0x7ffff1e40970, var = 0x7ffff7fc14d0, nvars = 0 } gcpro2 = { next = 0x83b, var = 0x1000, nvars = 8 } gcpro3 = { next = 0x1, var = 0x81a4, nvars = 0 } i = 0 tem = 5 #12 0x00000000005f7dea in Feval (form=12978838) at eval.c:2390 fun = 9783429 val = 140737488345192 original_fun = 14516546 original_args = 12507474 funcar = 140737354130560 backtrace = { next = 0x0, function = 0x7fffffffd6f0, args = 0x7fffffffd530, nargs = 0, evalargs = 0 '\000', debug_on_exit = 0 '\000' } gcpro1 = { next = 0x7ffff7fb6488, var = 0x7ffff7fc14d0, nvars = -134225624 } gcpro2 = { next = 0x7fffffffd810, var = 0x7ffff1e34c28, nvars = -236739152 } gcpro3 = { next = 0x0, var = 0x7fff00000017, nvars = 44108294 } #13 0x00000000005599d1 in top_level_2 () at keyboard.c:1347 No locals. #14 0x00000000005f5f8c in internal_condition_case (bfun=0x5599be <top_level_2>, handlers=12559570, hfun=0x5595a8 <cmd_error>) at eval.c:1458 val = 5609939 c = { tag = 12507474, val = 12507474, next = 0x7fffffffd930, gcpro = 0x0, jmp = {{ __jmpbuf = {5, 7988929332933021680, 4279008, 140737488346960, 0, 0, 7988929332880592880, -7988928721167724560}, __mask_was_saved = 0, __saved_mask = { __val = {4294967295, 140737488345248, 1, 9246952, 0, 0, 0, 0, 140737351959490, 1, 0, 0, 140737251616176, 12936662, 5, 140737488345664} } }}, backlist = 0x0, handlerlist = 0x0, lisp_eval_depth = 0, pdlcount = 2, poll_suppress_count = 1, interrupt_input_blocked = 0, byte_stack = 0x0 } h = { handler = 12559570, var = 12507474, chosen_clause = 140737488345104, tag = 0x7fffffffd7c0, next = 0x0 } #15 0x0000000000559a0b in top_level_1 (ignore=12507474) at keyboard.c:1355 No locals. #16 0x00000000005f592e in internal_catch (tag=12555634, func=0x5599d3 <top_level_1>, arg=12507474) at eval.c:1202 c = { tag = 12555634, val = 12507474, next = 0x0, gcpro = 0x0, jmp = {{ __jmpbuf = {5, 7988929332987547632, 4279008, 140737488346960, 0, 0, 7988929332960284656, -7988928721370886160}, __mask_was_saved = 0, __saved_mask = { __val = {6153582, 140737255104152, 4301629832, 0, 12507474, 12779824, 140737488345720, 60129542288, 12535520, 12033184, 6152158, 140737488345680, 12507474, 4279008, 140737488346960, 140737488345696} } }}, backlist = 0x0, handlerlist = 0x0, lisp_eval_depth = 0, pdlcount = 2, poll_suppress_count = 1, interrupt_input_blocked = 0, byte_stack = 0x0 } #17 0x0000000000559939 in command_loop () at keyboard.c:1310 No locals. #18 0x00000000005590df in recursive_edit_1 () at keyboard.c:940 count = 1 val = 5608104 #19 0x0000000000559292 in Frecursive_edit () at keyboard.c:1002 count = 0 buffer = 12507474 #20 0x00000000005575cc in main (argc=5, argv=0x7fffffffdf58) at emacs.c:1764 dummy = 140737251592752 stack_bottom_variable = 0 '\000' do_initial_setlocale = 1 skip_args = 1 rlim = { rlim_cur = 8720000, rlim_max = 18446744073709551615 } no_loadup = 0 junk = 0x0 dname_arg = 0x0 ch_to_dir = 0x45 <Address 0x45 out of bounds> Lisp Backtrace: "apply" (0xffffc670) "eval" (0xffffc888) "command-line-1" (0xffffcd08) "command-line" (0xffffd178) "normal-top-level" (0xffffd530) ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: bug#6214: 23.1; json-read-string crashes emacs with long string 2010-08-15 7:37 ` Michal Sojka @ 2010-08-16 17:40 ` Chong Yidong 2010-08-16 20:39 ` Michal Sojka 0 siblings, 1 reply; 13+ messages in thread From: Chong Yidong @ 2010-08-16 17:40 UTC (permalink / raw) To: Michal Sojka; +Cc: 6214, Notmuch mailing list Thanks, that is a useful backtrace. Could you apply this patch and see if it fixes the problem? === modified file 'src/eval.c' *** src/eval.c 2010-08-06 19:07:16 +0000 --- src/eval.c 2010-08-16 17:37:22 +0000 *************** *** 2430,2437 **** register int i, numargs; register Lisp_Object spread_arg; register Lisp_Object *funcall_args; ! Lisp_Object fun; struct gcpro gcpro1; fun = args [0]; funcall_args = 0; --- 2430,2438 ---- register int i, numargs; register Lisp_Object spread_arg; register Lisp_Object *funcall_args; ! Lisp_Object fun, retval; struct gcpro gcpro1; + USE_SAFE_ALLOCA; fun = args [0]; funcall_args = 0; *************** *** 2470,2477 **** { /* Avoid making funcall cons up a yet another new vector of arguments by explicitly supplying nil's for optional values */ ! funcall_args = (Lisp_Object *) alloca ((1 + XSUBR (fun)->max_args) ! * sizeof (Lisp_Object)); for (i = numargs; i < XSUBR (fun)->max_args;) funcall_args[++i] = Qnil; GCPRO1 (*funcall_args); --- 2471,2478 ---- { /* Avoid making funcall cons up a yet another new vector of arguments by explicitly supplying nil's for optional values */ ! SAFE_ALLOCA (funcall_args, Lisp_Object *, ((1 + XSUBR (fun)->max_args) ! * sizeof (Lisp_Object))); for (i = numargs; i < XSUBR (fun)->max_args;) funcall_args[++i] = Qnil; GCPRO1 (*funcall_args); *************** *** 2483,2490 **** function itself as well as its arguments. */ if (!funcall_args) { ! funcall_args = (Lisp_Object *) alloca ((1 + numargs) ! * sizeof (Lisp_Object)); GCPRO1 (*funcall_args); gcpro1.nvars = 1 + numargs; } --- 2484,2491 ---- function itself as well as its arguments. */ if (!funcall_args) { ! SAFE_ALLOCA (funcall_args, Lisp_Object *, ((1 + numargs) ! * sizeof (Lisp_Object))); GCPRO1 (*funcall_args); gcpro1.nvars = 1 + numargs; } *************** *** 2500,2506 **** } /* By convention, the caller needs to gcpro Ffuncall's args. */ ! RETURN_UNGCPRO (Ffuncall (gcpro1.nvars, funcall_args)); } \f /* Run hook variables in various ways. */ --- 2501,2511 ---- } /* By convention, the caller needs to gcpro Ffuncall's args. */ ! retval = Ffuncall (gcpro1.nvars, funcall_args); ! UNGCPRO; ! SAFE_FREE (); ! ! return retval; } \f /* Run hook variables in various ways. */ ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: bug#6214: 23.1; json-read-string crashes emacs with long string 2010-08-16 17:40 ` Chong Yidong @ 2010-08-16 20:39 ` Michal Sojka 2010-08-17 15:10 ` Chong Yidong 0 siblings, 1 reply; 13+ messages in thread From: Michal Sojka @ 2010-08-16 20:39 UTC (permalink / raw) To: Chong Yidong; +Cc: 6214, Notmuch mailing list On Mon, 16 Aug 2010, Chong Yidong wrote: > Thanks, that is a useful backtrace. Could you apply this patch and see > if it fixes the problem? Great! The patch fixes the problem. Now I can view 20 MB email in notmuch. Thanks, Michal ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: bug#6214: 23.1; json-read-string crashes emacs with long string 2010-08-16 20:39 ` Michal Sojka @ 2010-08-17 15:10 ` Chong Yidong 2010-08-17 16:27 ` Chong Yidong 0 siblings, 1 reply; 13+ messages in thread From: Chong Yidong @ 2010-08-17 15:10 UTC (permalink / raw) To: Stefan Monnier; +Cc: 6214, Notmuch mailing list Michal Sojka <sojkam1@fel.cvut.cz> writes: > On Mon, 16 Aug 2010, Chong Yidong wrote: >> Thanks, that is a useful backtrace. Could you apply this patch and see >> if it fixes the problem? > > Great! The patch fixes the problem. Now I can view 20 MB email in > notmuch. Hmm, there is a problem, though. If we attempt to avoid a stack overflow in `apply' by using the heap rather than the stack to store large numbers of arguments, those arguments are invisible to the stack-marking gargbage collector. One workaround is to temporarily disable garbage collection if using the heap. Stefan, any ideas? ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: bug#6214: 23.1; json-read-string crashes emacs with long string 2010-08-17 15:10 ` Chong Yidong @ 2010-08-17 16:27 ` Chong Yidong 2010-08-17 20:57 ` Andreas Schwab 0 siblings, 1 reply; 13+ messages in thread From: Chong Yidong @ 2010-08-17 16:27 UTC (permalink / raw) To: Stefan Monnier; +Cc: 6214, Notmuch mailing list Chong Yidong <cyd@stupidchicken.com> writes: > Hmm, there is a problem, though. If we attempt to avoid a stack > overflow in `apply' by using the heap rather than the stack to store > large numbers of arguments, those arguments are invisible to the > stack-marking gargbage collector. Never mind, I got confused. SAFE_ALLOCA uses record_unwind_protect, so it's gc safe. ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: bug#6214: 23.1; json-read-string crashes emacs with long string 2010-08-17 16:27 ` Chong Yidong @ 2010-08-17 20:57 ` Andreas Schwab 2010-08-17 21:46 ` Chong Yidong 0 siblings, 1 reply; 13+ messages in thread From: Andreas Schwab @ 2010-08-17 20:57 UTC (permalink / raw) To: Chong Yidong; +Cc: 6214, Notmuch mailing list, Stefan Monnier Chong Yidong <cyd@stupidchicken.com> writes: > Never mind, I got confused. SAFE_ALLOCA uses record_unwind_protect, so > it's gc safe. No, it isn't. SAFE_ALLOCA only protects the memory block, you need to use SAVE_ALLOCA_LISP to protect also its contents. Andreas. -- Andreas Schwab, schwab@linux-m68k.org GPG Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 "And now for something completely different." ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: bug#6214: 23.1; json-read-string crashes emacs with long string 2010-08-17 20:57 ` Andreas Schwab @ 2010-08-17 21:46 ` Chong Yidong 0 siblings, 0 replies; 13+ messages in thread From: Chong Yidong @ 2010-08-17 21:46 UTC (permalink / raw) To: Andreas Schwab; +Cc: 6214, Notmuch mailing list, Stefan Monnier Andreas Schwab <schwab@linux-m68k.org> writes: > Chong Yidong <cyd@stupidchicken.com> writes: > >> Never mind, I got confused. SAFE_ALLOCA uses record_unwind_protect, so >> it's gc safe. > > No, it isn't. SAFE_ALLOCA only protects the memory block, you need to > use SAVE_ALLOCA_LISP to protect also its contents. Ah, OK. Thanks. ^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2010-08-17 21:47 UTC | newest] Thread overview: 13+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2010-05-18 16:08 23.1; json-read-string crashes emacs with long string Carl Worth 2010-05-18 18:07 ` bug#6214: " Chong Yidong 2010-08-12 21:58 ` Michal Sojka 2010-08-13 16:37 ` Chong Yidong 2010-08-14 7:39 ` Michal Sojka 2010-08-14 21:30 ` Chong Yidong 2010-08-15 7:37 ` Michal Sojka 2010-08-16 17:40 ` Chong Yidong 2010-08-16 20:39 ` Michal Sojka 2010-08-17 15:10 ` Chong Yidong 2010-08-17 16:27 ` Chong Yidong 2010-08-17 20:57 ` Andreas Schwab 2010-08-17 21:46 ` Chong Yidong
Code repositories for project(s) associated with this public inbox https://yhetil.org/notmuch.git/ This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).