unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#23259: 25.1.50; Xerror: "BadLength" on extreme zoom causing emacs to segfault
@ 2016-04-10 10:49 Matthew Leach
  2016-04-10 15:01 ` Eli Zaretskii
  0 siblings, 1 reply; 6+ messages in thread
From: Matthew Leach @ 2016-04-10 10:49 UTC (permalink / raw)
  To: 23259

[-- Attachment #1: Type: text/plain, Size: 5535 bytes --]

Recipe:

emacs -Q
open a file, emacs/src/process.c, say.
C-x C-=
and keep pressing
C-=

Emacs will grind to a halt a little but will eventually segfault when
the zoom is extreme enough.

Attached is the backtrace.  It looks as though X has thrown an error,
maybe we need to limit the amount of zoom that Emacs allows?

In GNU Emacs 25.1.50.1 (x86_64-unknown-linux-gnu, GTK+ Version 3.18.9)
 of 2016-03-24 built on spline
Repository revision: 39577d07124ee16895b9c6aab7e2c6e7d41cc715
Windowing system distributor 'The X.Org Foundation', version 11.0.11803000
Configured using:
 'configure --prefix=/usr/local'

Configured features:
XPM JPEG TIFF GIF PNG RSVG SOUND GPM DBUS GSETTINGS NOTIFY ACL GNUTLS
LIBXML2 FREETYPE XFT ZLIB TOOLKIT_SCROLL_BARS GTK3 X11

Important settings:
  value of $LANG: en_GB.UTF8
  locale-coding-system: utf-8-unix

Major mode: Group

Minor modes in effect:
  text-scale-mode: t
  gnus-topic-mode: t
  gnus-undo-mode: t
  diff-auto-refine-mode: t
  show-paren-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  buffer-read-only: t
  line-number-mode: t
  transient-mark-mode: t

Recent messages:
Checking new news...done
Checking new news...
Reading active file via nndraft...done
Checking new news...done
Checking new news...
Reading active file via nndraft...done
Checking new news...done
Checking new news...
Reading active file via nndraft...done
Checking new news...done

Load-path shadows:
/home/matthew/.emacs.d/elpa/emms-20160304.920/tq hides /usr/local/share/emacs/25.1.50/lisp/emacs-lisp/tq

Features:
(shadow emacsbug ielm shr-color color shr svg dom mm-archive face-remap
nnir smiley gnus-cite mail-extr gnus-async gnus-bcklg qp gnus-ml
gnus-topic nndraft nnmh utf-7 nnfolder bbdb-gnus bbdb-mua bbdb-com crm
network-stream puny nsm starttls gnus-agent gnus-srvr gnus-score
score-mode nnvirtual gnus-msg gnus-art mm-uu mml2015 mm-view mml-smime
smime dig gnus-cache gnus-sum bbdb-message sendmail bbdb bbdb-site
timezone gnus-demon nntp gnus-group gnus-undo gnus-article-treat-patch
diff-mode gnus-start gnus-cloud nnimap nnmail mail-source tls gnutls
utf7 netrc nnoo parse-time gnus-spec gnus-int gnus-range message rfc822
mml mml-sec epa derived epg mm-decode mm-bodies mm-encode mail-parse
rfc2231 mailabbrev gmm-utils mailheader gnus-win gnus nnheader subr-x
gnus-util rmail rmail-loaddefs rfc2047 rfc2045 ietf-drums mail-utils
mm-util mail-prsvr wid-edit conf-toplev conf-sp smartparens dash
conf-coffee conf-windmove windmove conf-whitespace conf-slime slime-repl
slime-parse slime compile etags xref project arc-mode archive-mode
noutline outline pp hyperspec browse-url conf-faces hl-sexp thingatpt
conf-eshell em-term term disp-table ehelp em-smart pcomplete comint
ansi-color ring esh-var esh-io esh-cmd esh-opt esh-ext esh-proc esh-arg
esh-groups eshell esh-module esh-mode esh-util conf-erc conf-emms
emms-librefm-stream xml emms-librefm-scrobbler emms-playlist-limit
emms-volume easy-mmode emms-volume-amixer emms-i18n emms-history
emms-score emms-stream-info emms-metaplaylist-mode emms-bookmarks
emms-cue emms-mode-line-icon emms-browser sort emms-playlist-sort
emms-last-played emms-player-xine emms-player-mpd tq emms-lyrics
emms-url url url-proxy url-privacy url-expand url-methods url-history
url-cookie url-domsuf url-util mailcap emms-streams emms-show-all
emms-tag-editor format-spec emms-mark emms-cache emms-info-ogginfo
emms-info-mp3info emms-playlist-mode emms-player-vlc advice
emms-source-playlist emms-source-file locate dired dired-loaddefs
emms-player-mplayer emms-playing-time emms-player-simple emms-info
later-do emms-setup emms-mode-line emms emms-compat conf-elisp
conf-packages conf-dir conf-dired conf-c-mode conf-auctex conf-asm
conf-ace-jump conf-personal ido seq edmacro kmacro paren preview-latex
tex-site auto-loads finder-inf slime-autoloads url-auth info package
epg-config url-handlers url-parse auth-source cl-seq eieio byte-opt
bytecomp byte-compile cl-extra help-mode easymenu cconv eieio-core
cl-macs gv eieio-loaddefs cl-loaddefs pcase cl-lib password-cache
url-vars time-date mule-util tooltip eldoc electric uniquify ediff-hook
vc-hooks lisp-float-type mwheel term/x-win x-win term/common-win x-dnd
tool-bar dnd fontset image regexp-opt fringe tabulated-list newcomment
elisp-mode lisp-mode prog-mode register page menu-bar rfn-eshadow timer
select scroll-bar mouse jit-lock font-lock syntax facemenu font-core
term/tty-colors frame cl-generic cham georgian utf-8-lang misc-lang
vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms cp51932
hebrew greek romanian slovak czech european ethiopic indian cyrillic
chinese charscript case-table epa-hook jka-cmpr-hook help simple abbrev
obarray minibuffer cl-preloaded nadvice loaddefs button faces cus-face
macroexp files text-properties overlay sha1 md5 base64 format env
code-pages mule custom widget hashtable-print-readable backquote
dbusbind inotify dynamic-setting system-font-setting font-render-setting
move-toolbar gtk x-toolkit x multi-tty make-network-process emacs)

Memory information:
((conses 16 280541 38221)
 (symbols 48 48084 0)
 (miscs 40 175 424)
 (strings 32 84243 9005)
 (string-bytes 1 2667208)
 (vectors 16 37227)
 (vector-slots 8 744155 16170)
 (floats 8 683 853)
 (intervals 56 690 22)
 (buffers 976 38)
 (heap 1024 68673 3320))

-- 
Matt


[-- Attachment #2: gdb.txt --]
[-- Type: text/plain, Size: 7417 bytes --]

#0  terminate_due_to_signal (sig=sig@entry=6, backtrace_limit=backtrace_limit@entry=40) at emacs.c:369
No locals.
#1  0x00000000005022f3 in emacs_abort () at sysdep.c:2255
No locals.
#2  0x00000000004bbc21 in x_connection_closed (dpy=dpy@entry=0x14bc000, error_message=<optimized out>, 
    error_message@entry=0x7fffffffd960 "X protocol error: BadLength (poly request too large or internal Xlib length error) on protocol request 139", ioerror=ioerror@entry=false) at xterm.c:9462
        tail = <optimized out>
#3  0x00000000004c0115 in x_error_quitter (display=0x14bc000, event=0x7fffffffdb20, event=0x7fffffffdb20) at xterm.c:9553
        buf = "BadLength (poly request too large or internal Xlib length error)", '\000' <repeats 191 times>
        buf1 = "X protocol error: BadLength (poly request too large or internal Xlib length error) on protocol request 139", '\000' <repeats 158 times>...
#4  0x00000000004c019b in x_error_handler (display=0x14bc000, event=0x7fffffffdb20) at xterm.c:9523
No locals.
#5  0x00007ffff490a87d in _XError () from /usr/lib/libX11.so.6
No symbol table info available.
#6  0x00007ffff49077c7 in ?? () from /usr/lib/libX11.so.6
No symbol table info available.
#7  0x00007ffff4907885 in ?? () from /usr/lib/libX11.so.6
No symbol table info available.
#8  0x00007ffff4908235 in _XEventsQueued () from /usr/lib/libX11.so.6
No symbol table info available.
#9  0x00007ffff48f9b87 in XPending () from /usr/lib/libX11.so.6
No symbol table info available.
#10 0x00007ffff674f59e in ?? () from /usr/lib/libgdk-3.so.0
No symbol table info available.
#11 0x00007ffff507668d in g_main_context_prepare () from /usr/lib/libglib-2.0.so.0
No symbol table info available.
#12 0x00007ffff507702b in ?? () from /usr/lib/libglib-2.0.so.0
No symbol table info available.
#13 0x00007ffff50771b7 in g_main_context_pending () from /usr/lib/libglib-2.0.so.0
No symbol table info available.
#14 0x00007ffff6be959d in gtk_events_pending () from /usr/lib/libgtk-3.so.0
No symbol table info available.
#15 0x00000000004bcb6b in XTread_socket (terminal=<optimized out>, hold_quit=0x7fffffffde10) at xterm.c:8772
        count = 0
        dpyinfo = 0x1559c00
#16 0x00000000004f0af9 in gobble_input () at keyboard.c:6801
        nr = <optimized out>
        hold_quit = {
          kind = NO_EVENT, 
          part = scroll_bar_nowhere, 
          code = 0, 
          modifiers = 0, 
          x = 0, 
          y = 0, 
          timestamp = 0, 
          frame_or_window = 0, 
          arg = 0
        }
        next = 0x0
        nread = 0
        err = false
        t = 0x11a7cd0
#17 0x00000000004f04c5 in handle_async_input () at keyboard.c:7053
        nread = <optimized out>
#18 process_pending_signals () at keyboard.c:7067
No locals.
#19 0x000000000055ad45 in Ffuncall (nargs=nargs@entry=1, args=args@entry=0x7fffffffdf38) at eval.c:2639
        fun = <optimized out>
        original_fun = <optimized out>
        numargs = 0
        val = <optimized out>
        internal_args = <optimized out>
        count = <optimized out>
#20 0x000000000055af38 in call0 (fn=8803984) at eval.c:2552
No locals.
#21 0x00000000004ec656 in timer_start_idle () at keyboard.c:4241
No locals.
#22 0x00000000004f53fb in timer_start_idle () at keyboard.c:4047
No locals.
#23 read_char (commandflag=commandflag@entry=1, map=map@entry=40159507, prev_event=0, 
    used_mouse_menu=used_mouse_menu@entry=0x7fffffffe5bb, end_time=end_time@entry=0x0) at keyboard.c:2599
        c = 0
        jmpcount = 2
        local_getcjmp = {{
            __jmpbuf = {0, -1876234902778123125, 28329072, 23142480, 140737488348816, 40159507, 1876237390707846283, 
              -1876236781231903605}, 
            __mask_was_saved = 0, 
            __saved_mask = {
              __val = {29009957, 0, 1, 0 <repeats 13 times>}
            }
          }}
        save_jump = {{
            __jmpbuf = {0, 0, 0, 0, 0, 0, 0, 0}, 
            __mask_was_saved = 0, 
            __saved_mask = {
              __val = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5943704, 2, 16339680, 30, 5541974, 17312880}
            }
          }}
        tem = <optimized out>
        save = <optimized out>
        previous_echo_area_message = 0
        also_record = 0
        reread = false
        recorded = false
        polling_stopped_here = false
        orig_kboard = 0x1612050
#24 0x00000000004f640a in read_key_sequence (keybuf=keybuf@entry=0x7fffffffe690, prompt=prompt@entry=0, 
    dont_downcase_last=dont_downcase_last@entry=false, can_return_switch_frame=can_return_switch_frame@entry=true, 
    fix_current_buffer=fix_current_buffer@entry=true, prevent_redisplay=prevent_redisplay@entry=false, bufsize=30) at keyboard.c:9054
        interrupted_kboard = 0x1612050
        interrupted_frame = 0x1218e90
        key = <optimized out>
        used_mouse_menu = false
        echo_local_start = 0
        last_real_key_start = <optimized out>
        keys_local_start = <optimized out>
        new_binding = <optimized out>
        t = <optimized out>
        echo_start = 0
        keys_start = 0
        current_binding = 40159507
        first_event = 0
        first_unbound = 31
        mock_input = 0
        fkey = {
          parent = 16686083, 
          map = 16686083, 
          start = 0, 
          end = 0
        }
        keytran = {
          parent = 12516931, 
          map = 12516931, 
          start = 0, 
          end = 0
        }
        indec = {
          parent = 16686099, 
          map = 16686099, 
          start = 0, 
          end = 0
        }
        shift_translated = false
        delayed_switch_frame = 0
        original_uppercase = 0
        original_uppercase_position = -1
        dummyflag = false
        fake_prefixed_keys = 0
#25 0x00000000004f7fe6 in command_loop_1 () at keyboard.c:1357
        cmd = <optimized out>
        keybuf = {268435702, 268435702, 9903877, 0, 0, 5660497, 9903872, 28656, 0, 12278528, 0, 0, 0, 4410541, 0, 5542814, 0, 0, 0, 
          28656, 28656, 0, 12723443, 4002, 140737488349664, 5544553, 28656, 64, 0, 5610273}
        i = <optimized out>
        prev_modiff = 1428
        prev_buffer = 0x1baa820
#26 0x0000000000559602 in internal_condition_case (bfun=bfun@entry=0x4f7df0 <command_loop_1>, handlers=handlers@entry=19296, 
    hfun=hfun@entry=0x4ee8b0 <cmd_error>) at eval.c:1310
        val = <optimized out>
        c = <optimized out>
#27 0x00000000004e9fbc in command_loop_2 (ignore=ignore@entry=0) at keyboard.c:1099
        val = 271
#28 0x00000000005595a3 in internal_catch (tag=tag@entry=46128, func=func@entry=0x4e9fa0 <command_loop_2>, arg=arg@entry=0)
    at eval.c:1075
        val = <optimized out>
        c = <optimized out>
#29 0x00000000004e9f79 in command_loop () at keyboard.c:1078
No locals.
#30 0x00000000004ee49b in recursive_edit_1 () at keyboard.c:684
        val = <optimized out>
#31 0x00000000004ee7e8 in Frecursive_edit () at keyboard.c:755
        buffer = <optimized out>
#32 0x0000000000417433 in main (argc=1, argv=0x7fffffffe9e8) at emacs.c:1646
        dummy = 0
        stack_bottom_variable = 0 '\000'
        do_initial_setlocale = <optimized out>
        dumping = <optimized out>
        skip_args = 0
        rlim = {
          rlim_cur = 8720000, 
          rlim_max = 18446744073709551615
        }
        no_loadup = false
        junk = 0x0
        dname_arg = 0x0
        ch_to_dir = 0x0
        original_pwd = <optimized out>

^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#23259: 25.1.50; Xerror: "BadLength" on extreme zoom causing emacs to segfault
  2016-04-10 10:49 bug#23259: 25.1.50; Xerror: "BadLength" on extreme zoom causing emacs to segfault Matthew Leach
@ 2016-04-10 15:01 ` Eli Zaretskii
  2016-04-10 15:33   ` Matthew Leach
  0 siblings, 1 reply; 6+ messages in thread
From: Eli Zaretskii @ 2016-04-10 15:01 UTC (permalink / raw)
  To: Matthew Leach; +Cc: 23259

> From: Matthew Leach <matthew@mattleach.net>
> Date: Sun, 10 Apr 2016 11:49:12 +0100
> 
> emacs -Q
> open a file, emacs/src/process.c, say.
> C-x C-=
> and keep pressing
> C-=
> 
> Emacs will grind to a halt a little but will eventually segfault when
> the zoom is extreme enough.
> 
> Attached is the backtrace.  It looks as though X has thrown an error,
> maybe we need to limit the amount of zoom that Emacs allows?

Probably.  However, the interesting question is: what values to use as
limits?

Also, this backtrace is not useful, since the X errors are by default
asynchronous.  Could you please run Emacs in synchronous X mode (see
etc/DEBUG for how), and present the backtrace then?  Also, please
tell:

  . what is the maximum value of the scale factor you see on the mode
    line before Emacs crashes

  . what is the value returned by display-pixel-width

  . what is the values returned by frame-char-width and
    frame-char-height

I'll try to prepare a patch using the above data.

Thanks.





^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#23259: 25.1.50; Xerror: "BadLength" on extreme zoom causing emacs to segfault
  2016-04-10 15:01 ` Eli Zaretskii
@ 2016-04-10 15:33   ` Matthew Leach
  2016-04-10 16:24     ` Eli Zaretskii
  0 siblings, 1 reply; 6+ messages in thread
From: Matthew Leach @ 2016-04-10 15:33 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 23259

[-- Attachment #1: Type: text/plain, Size: 1402 bytes --]

Hi Eli,

Eli Zaretskii <eliz@gnu.org> writes:

>> From: Matthew Leach <matthew@mattleach.net>
>> Date: Sun, 10 Apr 2016 11:49:12 +0100
>> 
>> emacs -Q
>> open a file, emacs/src/process.c, say.
>> C-x C-=
>> and keep pressing
>> C-=
>> 
>> Emacs will grind to a halt a little but will eventually segfault when
>> the zoom is extreme enough.
>> 
>> Attached is the backtrace.  It looks as though X has thrown an error,
>> maybe we need to limit the amount of zoom that Emacs allows?
>
> Probably.  However, the interesting question is: what values to use as
> limits?

Maybe limit the zoom before X would crash?  Presumably X has an upper
bound on how large it can render things since it can yield a BadLength
error.  However, I've never studied X before.

> Also, this backtrace is not useful, since the X errors are by default
> asynchronous.  Could you please run Emacs in synchronous X mode (see
> etc/DEBUG for how), and present the backtrace then?  

Sure, please see attached.

> Also, please tell:
>
>   . what is the maximum value of the scale factor you see on the mode
>     line before Emacs crashes

I can get to about +34 before it crashes.

>   . what is the value returned by display-pixel-width

(display-pixel-width) => 1366

>   . what is the values returned by frame-char-width and
>     frame-char-height

(frame-char-width) => 9
(frame-char-height) => 18

Hope this helps.
-- 
Matt

[-- Attachment #2: gdb.txt --]
[-- Type: text/plain, Size: 11117 bytes --]

Breakpoint 3 at 0x51dec7: file xterm.c, line 9544.
Starting program: /home/matthew/Development/emacs/src/emacs -xrm "emacs.synchronous: true"
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/usr/lib/libthread_db.so.1".
[New Thread 0x7fffe8938700 (LWP 25309)]
[New Thread 0x7fffe3b8f700 (LWP 25310)]
[New Thread 0x7fffe3181700 (LWP 25311)]

Thread 1 "emacs" hit Breakpoint 3, x_error_quitter (display=0x1579d40, event=0x7fffffff9aa0) at xterm.c:9544
9544	  if (event->error_code == BadName)
#0  x_error_quitter (display=0x1579d40, event=0x7fffffff9aa0) at xterm.c:9544
        buf = "\200\231\377\377\377\177", '\000' <repeats 18 times>, "\220\257W\001", '\000' <repeats 12 times>, "$\031\002\361\377\177\000\000\220\333n\002", '\000' <repeats 12 times>, " \000\000\000\000\000\000\000o\341J\364\377\177\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000X\300W\001\000\000\000\000\000\000\000\000\001\000\000\000 \300W\001\000\000\000\000\000\212\"\274\235\207Q\364\004\260W\001\000\000\000\000\220\257W\001", '\000' <repeats 12 times>, "\250\257W\001", '\000' <repeats 12 times>, "\001\000\000\000\000\000\000\000 \232\377\377\377\177\000\000Q\275J\364\377\177\000\000\006\000\000\000\001\000\001\000"...
        buf1 = "\314\n\000\000\000\000\000\000S\000\000\000\000\000\000\000[\231\000\000\377\177\000\000\020\230\377\377\377\177\000\000\315\n\000\000\000\000\000\000\255\000\000\000\000\000\000\000\020\066\000\000\000\000\000\000Ѐ\377\377\377\177\000\000\315\n\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\030\001\000\000\000\000\000\003\000\000\000\377\177\000\000\020\000\000\000\000\000\000\000P", '\000' <repeats 15 times>, "\003\000\000\000\060", '\000' <repeats 19 times>, "[\000\000\000n\000\000\000O\332J\364\377\177\000\000\300\333n\002\000\000\000\000w\000\000\000|", '\000' <repeats 12 times>, "K4\361\377\177\000\000\020\000\000\000\000\000\000\000\001\001"...
#1  0x000000000051dea7 in x_error_handler (display=0x1579d40, event=0x7fffffff9aa0) at xterm.c:9523
No locals.
#2  0x00007ffff490a87d in _XError () from /usr/lib/libX11.so.6
No symbol table info available.
#3  0x00007ffff49077c7 in ?? () from /usr/lib/libX11.so.6
No symbol table info available.
#4  0x00007ffff4907885 in ?? () from /usr/lib/libX11.so.6
No symbol table info available.
#5  0x00007ffff4908830 in _XReply () from /usr/lib/libX11.so.6
No symbol table info available.
#6  0x00007ffff490411d in XSync () from /usr/lib/libX11.so.6
No symbol table info available.
#7  0x00007ffff49041bb in ?? () from /usr/lib/libX11.so.6
No symbol table info available.
#8  0x00007ffff429a151 in XRenderAddGlyphs () from /usr/lib/libXrender.so.1
No symbol table info available.
#9  0x00007ffff408e9e2 in XftFontLoadGlyphs () from /usr/lib/libXft.so.2
No symbol table info available.
#10 0x00007ffff4090bb3 in XftGlyphRender () from /usr/lib/libXft.so.2
No symbol table info available.
#11 0x00007ffff408a1cc in XftDrawGlyphs () from /usr/lib/libXft.so.2
No symbol table info available.
#12 0x000000000066df26 in xftfont_draw (s=0x7fffffffc5a0, from=0, to=1, x=8, y=6865, with_background=true) at xftfont.c:636
        f = 0x12d8680
        face = 0x26cab00
        xftfont_info = 0x26db8b8
        xftface_info = 0x26caad0
        xft_draw = 0x1e1df80
        code = 0x7fffffffc370
        fg = {
          pixel = 11674146, 
          color = {
            red = 45746, 
            green = 8738, 
            blue = 8738, 
            alpha = 65535
          }
        }
        bg = {
          pixel = 16777215, 
          color = {
            red = 65535, 
            green = 65535, 
            blue = 65535, 
            alpha = 65535
          }
        }
        len = 1
        i = 1
#13 0x000000000051044b in x_draw_glyph_string_foreground (s=0x7fffffffc5a0) at xterm.c:1775
        font = 0x26db8b8
        boff = 0
        y = 6865
        i = 0
        x = 8
#14 0x000000000051473f in x_draw_glyph_string (s=0x7fffffffc5a0) at xterm.c:3528
        relief_drawn_p = false
#15 0x00000000004806c9 in draw_glyphs (w=0x12d9690, x=4461, row=0x228bdf0, area=TEXT_AREA, start=0, end=1, hl=DRAW_NORMAL_TEXT, overlaps=0) at xdisp.c:25706
        head = 0x7fffffffc5a0
        tail = 0x7fffffffc5a0
        s = 0x7fffffffc5a0
        clip_head = 0x0
        clip_tail = 0x0
        i = 1
        j = 0
        x_reached = 4461
        last_x = 1358
        area_left = 8
        f = 0x12d8680
        sa_avail = 16382
        sa_count = 5
        sa_must_free = false
#16 0x00000000004871ff in x_write_glyphs (w=0x12d9690, updated_row=0x228bdf0, start=0x2291000, updated_area=TEXT_AREA, len=1) at xdisp.c:27675
        x = 0
        hpos = 0
        chpos = 0
#17 0x000000000041d635 in update_text_area (w=0x12d9690, updated_row=0x228bdf0, vpos=0) at dispnew.c:3612
        current_row = 0x2378570
        desired_row = 0x228bdf0
        rif = 0x9010c0 <x_redisplay_interface>
        changed_p = false
#18 0x000000000041dfff in update_window_line (w=0x12d9690, vpos=0, mouse_face_overwritten_p=0x7fffffffcb2f) at dispnew.c:3855
        current_row = 0x2378570
        desired_row = 0x228bdf0
        rif = 0x9010c0 <x_redisplay_interface>
        changed_p = false
#19 0x000000000041d197 in update_window (w=0x12d9690, force_p=true) at dispnew.c:3477
        vpos = 0
        i = 4
        end = 0x228f5f0
        mode_line_row = 0x228f5f0
        header_line_row = 0x0
        changed_p = false
        mouse_face_overwritten_p = false
        row = 0x228bdf0
        yb = 732
        n_updated = 0
        desired_matrix = 0x168a7b0
        paused_p = false
        preempt_count = 9
        rif = 0x9010c0 <x_redisplay_interface>
#20 0x000000000041c88a in update_window_tree (w=0x12d9690, force_p=true) at dispnew.c:3219
        paused_p = false
#21 0x000000000041c4b5 in update_frame (f=0x12d8680, force_p=true, inhibit_hairy_id_p=false) at dispnew.c:3108
        paused_p = false
        root_window = 0x12d9690
#22 0x0000000000458ad2 in redisplay_internal () at xdisp.c:14010
        gcscrollbars = true
        f_redisplay_flag = false
        f = 0x12d8680
        w = 0x12d9690
        sw = 0x12d9690
        fr = 0x12d8680
        pending = false
        must_finish = true
        match_p = true
        tlbufpos = {
          charpos = 0, 
          bytepos = 1
        }
        tlendpos = {
          charpos = 237464, 
          bytepos = 237464
        }
        number_of_visible_frames = 1
        count = 2
        sf = 0x12d8680
        polling_stopped_here = true
        tail = 17498227
        frame = 19760773
        consider_all_windows_p = true
        update_miniwindow_p = true
#23 0x0000000000456b34 in redisplay () at xdisp.c:13204
No locals.
#24 0x0000000000556e38 in read_char (commandflag=1, map=40660771, prev_event=0, used_mouse_menu=0x7fffffffe36f, end_time=0x0) at keyboard.c:2469
        echo_current = false
        c = 0
        jmpcount = 13028656
        local_getcjmp = {{
            __jmpbuf = {5552513, 15899701, 140737488347520, 6101750, 17843168, 18673408, 0, 140737488347520}, 
            __mask_was_saved = 5552513, 
            __saved_mask = {
              __val = {17843168, 13028656, 6102329, 0, 140737488347568, 5552513, 18673408, 13028656, 5685754, 0, 140737488347616, 5552513, 40660755, 140737488347712, 6227505, 0}
            }
          }}
        save_jump = {{
            __jmpbuf = {0, 0, 0, 0, 0, 0, 0, 25769803776}, 
            __mask_was_saved = 15899696, 
            __saved_mask = {
              __val = {140737488347352, 5556855, 25769803776, 15899701, 0, 15899696, 15899696, 5557072, 29712, 140737488347536, 6647043, 0, 0, 13028656, 6, 0}
            }
          }}
        tem = 40660771
        save = 0
        previous_echo_area_message = 0
        also_record = 0
        reread = false
        recorded = false
        polling_stopped_here = false
        orig_kboard = 0x167bf10
#25 0x00000000005640a6 in read_key_sequence (keybuf=0x7fffffffe520, bufsize=30, prompt=0, dont_downcase_last=false, can_return_switch_frame=true, fix_current_buffer=true, prevent_redisplay=false) at keyboard.c:9054
        interrupted_kboard = 0x167bf10
        interrupted_frame = 0x12d8680
        key = 27648
        used_mouse_menu = false
        echo_local_start = 0
        last_real_key_start = 0
        keys_local_start = 0
        new_binding = 140737488348384
        count = 2
        t = 0
        echo_start = 0
        keys_start = 0
        current_binding = 40660771
        first_event = 0
        first_unbound = 31
        mock_input = 0
        fkey = {
          parent = 17484467, 
          map = 17484467, 
          start = 0, 
          end = 0
        }
        keytran = {
          parent = 13295171, 
          map = 13295171, 
          start = 0, 
          end = 0
        }
        indec = {
          parent = 17484483, 
          map = 17484483, 
          start = 0, 
          end = 0
        }
        shift_translated = false
        delayed_switch_frame = 0
        original_uppercase = 5552513
        original_uppercase_position = -1
        dummyflag = false
        starting_buffer = 0xf29c30
        fake_prefixed_keys = 0
#26 0x000000000055455d in command_loop_1 () at keyboard.c:1357
        cmd = 40651341
        keybuf = {268435702, 268435702, 140737488348512, 6102489, 12866576, 0, 5556720, 0, 140737488348608, 6104765, 0, 28656, 0, 28656, 13028656, 6099123, 0, 140737488348608, 5552513, 0, 140737488348704, 6227505, 13504947, 
          2, 13028656, 6226506, 0, 140737488348688, 5552513, 0}
        i = 1
        prev_modiff = 1424
        prev_buffer = 0xf29c30
        already_adjusted = false
#27 0x00000000005ebd00 in internal_condition_case (bfun=0x554153 <command_loop_1>, handlers=19296, hfun=0x55393d <cmd_error>) at eval.c:1310
        val = 5552513
        c = 0x155d810
#28 0x0000000000553e5a in command_loop_2 (ignore=0) at keyboard.c:1099
        val = 0
#29 0x00000000005eb620 in internal_catch (tag=46128, func=0x553e31 <command_loop_2>, arg=0) at eval.c:1075
        val = 5552513
        c = 0x155d6e0
#30 0x0000000000553dfc in command_loop () at keyboard.c:1078
No locals.
#31 0x0000000000553505 in recursive_edit_1 () at keyboard.c:684
        count = 1
        val = 140737488349088
#32 0x0000000000553699 in Frecursive_edit () at keyboard.c:755
        count = 0
        buffer = 0
#33 0x000000000055153f in main (argc=3, argv=0x7fffffffe9b8) at emacs.c:1617
        dummy = 0
        stack_bottom_variable = 0 '\000'
        do_initial_setlocale = true
        dumping = false
        skip_args = 0
        rlim = {
          rlim_cur = 8720000, 
          rlim_max = 18446744073709551615
        }
        no_loadup = false
        junk = 0x0
        dname_arg = 0x0
        ch_to_dir = 0x0
        original_pwd = 0x0

Lisp Backtrace:
"redisplay_internal (C function)" (0x0)

^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#23259: 25.1.50; Xerror: "BadLength" on extreme zoom causing emacs to segfault
  2016-04-10 15:33   ` Matthew Leach
@ 2016-04-10 16:24     ` Eli Zaretskii
  2016-04-10 16:36       ` Matthew Leach
  0 siblings, 1 reply; 6+ messages in thread
From: Eli Zaretskii @ 2016-04-10 16:24 UTC (permalink / raw)
  To: Matthew Leach; +Cc: 23259

> From: Matthew Leach <matthew@mattleach.net>
> Cc: 23259@debbugs.gnu.org
> Date: Sun, 10 Apr 2016 16:33:17 +0100
> 
> Maybe limit the zoom before X would crash?  Presumably X has an upper
> bound on how large it can render things since it can yield a BadLength
> error.  However, I've never studied X before.

I think we can use the display dimensions instead: it makes little
sense to make the font larger than that.

> >   . what is the maximum value of the scale factor you see on the mode
> >     line before Emacs crashes
> 
> I can get to about +34 before it crashes.
> 
> >   . what is the value returned by display-pixel-width
> 
> (display-pixel-width) => 1366
> 
> >   . what is the values returned by frame-char-width and
> >     frame-char-height
> 
> (frame-char-width) => 9
> (frame-char-height) => 18

Thanks.  Please try the patch below.  It should also avoid similar
crashes when you repeatedly press C-- to decrease the font.

--- lisp/face-remap.el~0	2016-01-03 06:46:29.000000000 +0200
+++ lisp/face-remap.el	2016-04-10 16:03:57.601223100 +0300
@@ -256,6 +256,14 @@
 						text-scale-mode-amount))))
   (force-window-update (current-buffer)))
 
+(defun text-scale-min-amount ()
+  "Return the minimum amount of text-scaling we allow."
+  (log (/ 1.0 (frame-char-height)) text-scale-mode-step))
+
+(defun text-scale-max-amount ()
+  "Return the maximum amount of text-scaling we allow."
+  (log (/ (min (display-pixel-width) #xffff) (frame-char-width)) text-scale-mode-step))
+
 ;;;###autoload
 (defun text-scale-set (level)
   "Set the scale factor of the default face in the current buffer to LEVEL.
@@ -266,7 +274,8 @@
 `text-scale-mode-step' (a negative number decreases the height by
 the same amount)."
   (interactive "p")
-  (setq text-scale-mode-amount level)
+  (setq text-scale-mode-amount
+        (max (min level (text-scale-max-amount)) (text-scale-min-amount)))
   (text-scale-mode (if (zerop text-scale-mode-amount) -1 1)))
 
 ;;;###autoload
@@ -279,8 +288,13 @@
 height by the same amount).  As a special case, an argument of 0
 will remove any scaling currently active."
   (interactive "p")
-  (setq text-scale-mode-amount
-	(if (= inc 0) 0 (+ (if text-scale-mode text-scale-mode-amount 0) inc)))
+  (let* ((current-value (if text-scale-mode text-scale-mode-amount 0))
+         (new-value (if (= inc 0) 0 (+ current-value inc))))
+    (if (or (> new-value (text-scale-max-amount))
+            (< new-value (text-scale-min-amount)))
+        (user-error "Cannot %s the default face height more than it already is"
+                    (if (> inc 0) "increase" "decrease")))
+    (setq text-scale-mode-amount new-value))
   (text-scale-mode (if (zerop text-scale-mode-amount) -1 1)))
 
 ;;;###autoload





^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#23259: 25.1.50; Xerror: "BadLength" on extreme zoom causing emacs to segfault
  2016-04-10 16:24     ` Eli Zaretskii
@ 2016-04-10 16:36       ` Matthew Leach
  2016-04-10 16:52         ` Eli Zaretskii
  0 siblings, 1 reply; 6+ messages in thread
From: Matthew Leach @ 2016-04-10 16:36 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 23259

Hi Eli,

Eli Zaretskii <eliz@gnu.org> writes:

[...]

> Thanks.  Please try the patch below.  It should also avoid similar
> crashes when you repeatedly press C-- to decrease the font.

Great - that fixes this for me.

Thanks,
-- 
Matt





^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#23259: 25.1.50; Xerror: "BadLength" on extreme zoom causing emacs to segfault
  2016-04-10 16:36       ` Matthew Leach
@ 2016-04-10 16:52         ` Eli Zaretskii
  0 siblings, 0 replies; 6+ messages in thread
From: Eli Zaretskii @ 2016-04-10 16:52 UTC (permalink / raw)
  To: Matthew Leach; +Cc: 23259-done

> From: Matthew Leach <matthew@mattleach.net>
> Cc: 23259@debbugs.gnu.org
> Date: Sun, 10 Apr 2016 17:36:22 +0100
> 
> > Thanks.  Please try the patch below.  It should also avoid similar
> > crashes when you repeatedly press C-- to decrease the font.
> 
> Great - that fixes this for me.

Thanks, pushed.





^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2016-04-10 16:52 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-04-10 10:49 bug#23259: 25.1.50; Xerror: "BadLength" on extreme zoom causing emacs to segfault Matthew Leach
2016-04-10 15:01 ` Eli Zaretskii
2016-04-10 15:33   ` Matthew Leach
2016-04-10 16:24     ` Eli Zaretskii
2016-04-10 16:36       ` Matthew Leach
2016-04-10 16:52         ` Eli Zaretskii

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.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).