Subject: 25.0.50; "Args out of range" with help-window-select t

From: Nicolas Richard <[email-masked]>
Date: Thu, 04 Jun 2015 21:47:08 +0200

From
./emacs -Q

Eval:
(progn
  (setq help-window-select t
        debug-on-error t)
  (split-window)
  (switch-to-buffer "*Messages*")
  (message (make-string 9999 ?x)))

Hit: C-h f if RET

I get:
Debugger entered--Lisp error: (args-out-of-range 20077)

(no backtrace is shown).

We can however get a gdb backtrace (I put a breakpoint in Fsignal, but
it breaks more often than needed, so I say "continue" a few times in
order to get the following) :

#2  0x081ec7fe in xsignal1 (error_symbol=4392, arg=40270) at eval.c:1596
No locals.
#3  0x0824bd80 in get_char_property_and_overlay (position=40270, prop=8640, object=140654805, overlay=0xbfffeec0) at textprop.c:636
        noverlays = 22
        overlay_vec = 0x20
        obuf = 0x853b698
        sa_avail = 22
        sa_count = -1073746264
        sa_must_free = 8
        w = 0x8696cd0
#4  0x08163623 in adjust_point_for_property (last_pt=22, modified=true) at keyboard.c:1704
        beg = 139541880
        end = -1073746216
        val = 135666171
        overlay = 0
        tmp = -1073746216
        check_composition = false
        check_display = true
        check_invisible = true
        orig_pt = 10067
#5  0x081633b4 in command_loop_1 () at keyboard.c:1636
        cmd = 1695712
        keybuf = {34, 410, 0, 139555992, 0, 1, -1073745932, 143526584, 139555992, 0, 0, 0, -1073746040, 136237958, 2, 141273859, 3, 59, -1220163913, 
          141710811, 0, 2, 135640074, 141710811, -1073746008, 135668881, 141710811, 0, 0, -1073746008}
        i = 2
        prev_modiff = 10542
        prev_buffer = 0x853b698
        already_adjusted = false
#6  0x081ebfe8 in internal_condition_case (bfun=0x8162727 <command_loop_1>, handlers=9288, hfun=0x8161f3d <cmd_error>) at eval.c:1348
        val = -1073745960
        c = 0x88f54f0
#7  0x08162449 in command_loop_2 (ignore=0) at keyboard.c:1139
        val = 0
#8  0x081eb8f2 in internal_catch (tag=23016, func=0x816241e <command_loop_2>, arg=0) at eval.c:1108
        val = 23016
        c = 0x88e0ac0
#9  0x081623e3 in command_loop () at keyboard.c:1118
No locals.
#10 0x08161b9c in recursive_edit_1 () at keyboard.c:728
        count = 1
        val = 136247918
#11 0x08161d0e in Frecursive_edit () at keyboard.c:799
        count = 0
        buffer = 0
#12 0x0815fcfa in main (argc=10, argv=0xbffff1f4) at emacs.c:1626
        dummy = -1073745664
        stack_bottom_variable = 8 '\b'
        do_initial_setlocale = true
        dumping = false
        skip_args = 0
        rlim = {rlim_cur = 8388608, rlim_max = 18446744073709551615}
        no_loadup = false
        junk = 0x0
        dname_arg = 0x0
        ch_to_dir = 0x0
        original_pwd = 0x0

Looking at recent history shows that adjust_point_for_property was
touched recently :

Commit 18338b1dff981b17426048dfa20a4c6e6e12c5aa
Author:     Eli Zaretskii <[email-masked]>
AuthorDate: Tue May 19 18:39:25 2015 +0300
Commit:     Eli Zaretskii <[email-masked]>
CommitDate: Tue May 19 18:39:25 2015 +0300

    Fix display of overlapping window-specific overlays
    
    * src/keyboard.c (adjust_point_for_property): When adjusting point
    due to display strings, ignore overlays that are specific to
    windows other than the currently selected one.
    
    * src/xdisp.c (handle_single_display_spec): If the display
    property comes from an overlay, arrange for buffer iteration to
    resume only after the end of that overlay.  (Bug#20607)

I understand that
  get_char_property_and_overlay
      (make_number (PT), Qdisplay, selected_window,
       &overlay))
should not refer to PT but to "PT in selected_window", but I don't know
how to do that.

-- 
Nico.