Eli Zaretskii [Mon, 9 Jan 2012 09:27:02 +0000 (17:27 +0800)]
Fix use of uninitialized variable (backport from trunk).
* xdisp.c (note_mouse_highlight): Initialize `part', to avoid a
possible random value that matches one of those tested as
condition to clear the mouse face.
Fix glitch in scrolling_window (backport from trunk).
* dispnew.c (scrolling_window): Truncate overlaps in copy
destination of scroll runs so as to avoid assigning disabled bogus
rows and unnecessary graphics copy operations.
Eric M. Ludlam [Mon, 9 Jan 2012 06:12:11 +0000 (14:12 +0800)]
Fix EDE security flaw involving loading arbitrary Lisp from Project.ede.
* lisp/ede.el (ede-project-directories): New option.
(ede-directory-safe-p): Check it.
(ede-initialize-state-current-buffer, ede, ede-new)
(ede-check-project-directory, ede-rescan-toplevel)
(ede-load-project-file, ede-parent-project, ede-current-project):
(ede-target-parent): Avoid loading in a project unless it is safe,
since it may involve malicious code. This security flaw was
pointed out by Hiroshi Oota.
* lisp/ede/auto.el (ede-project-autoload): Add safe-p slot.
(ede-project-class-files): Projects using Project.ede are unsafe.
(ede-auto-load-project): New method.
* lisp/ede/simple.el (ede-project-class-files): Mark as unsafe.
Fix memory leak by y-or-n-p-with-timeout with GUI (Bug#9830).
* xmenu.c (cleanup_widget_value_tree): New function.
(xmenu_show, xdialog_show): Use it in record_unwind_protect instead of
calling free_menubar_widget_value_tree directly (Bug#9830).
Eli Zaretskii [Thu, 9 Jun 2011 09:40:51 +0000 (12:40 +0300)]
Fix bug #8780 with decoding files after using ange-ftp.
lisp/net/ange-ftp.el (ange-ftp-insert-file-contents): Let-bind
buffer-file-type before setting its value, to avoid disastrous
global effects on decoding files for DOS/Windows systems.
Take account of periodic fringe bitmap's dependency on y-position in redrawing.
* dispextern.h (struct glyph_row): New member fringe_bitmap_periodic_p.
* dispnew.c (shift_glyph_matrix, scrolling_window): Mark scrolled row
for fringe update if it has periodic bitmap.
(row_equal_p): Also compare left_fringe_offset, right_fringe_offset,
and fringe_bitmap_periodic_p.
* fringe.c (get_fringe_bitmap_data): New function.
(draw_fringe_bitmap_1, update_window_fringes): Use it.
(update_window_fringes): Record periodicity of fringe bitmap in glyph
row. Mark glyph row for fringe update if periodicity changed.
* xdisp.c (try_window_reusing_current_matrix): Don't mark scrolled row
for fringe update unless it has periodic bitmap.
Take account of fringe background extension in scroll_run_hook.
* w32term.c (w32_draw_fringe_bitmap): Rename local vars `left' and
`width' to `bar_area_x' and `bar_area_width', respectively.
(x_scroll_run): Take account of fringe background extension.
* xterm.c (x_draw_fringe_bitmap) [USE_TOOLKIT_SCROLL_BARS]: Rename
local vars `left' and `width' to `bar_area_x' and
`bar_area_width', respectively.
(x_scroll_run) [USE_TOOLKIT_SCROLL_BARS]: Take account of fringe
background extension.
Eli Zaretskii [Mon, 9 May 2011 09:59:23 +0000 (05:59 -0400)]
Backport revisions 2011-04-24T05:30:24Z!eggert@cs.ucla.edu..2011-04-25T19:40:22Z!eggert@cs.ucla.edu (inclusive) from trunk (bug#8623)
The next log entry shows the actual changes by Paul Eggert.
Fix a problem with aliasing and vector headers.
GCC 4.6.0 optimizes based on type-based alias analysis. For
example, if b is of type struct buffer * and v of type struct
Lisp_Vector *, then gcc -O2 was incorrectly assuming that &b->size
!= &v->size, and therefore "v->size = 1; b->size = 2; return
v->size;" must therefore return 1. This assumption is incorrect
for Emacs, since it type-puns struct Lisp_Vector * with many other
types. To fix this problem, this patch adds a new type struct
vector_header that documents the constraints on layout of vectors
and pseudovectors, and helps optimizing compilers not get fooled
by Emacs's type punning. It also adds the macros XSETTYPED_PVECTYPE
XSETTYPED_PSEUDOVECTOR, TYPED_PSEUDOVECTORP, for similar reasons.
src/lisp.h (XVECTOR_SIZE): New convenience macro. All previous uses of
XVECTOR (foo)->size replaced to use this macro, to avoid the hassle
of writing XVECTOR (foo)->header.size.
src/lisp.h: Say "vectorlike header" rather than "vector header.
(struct vectorlike_header): Rename from struct vector_header.
(XVECTORLIKE_HEADER_SIZE): Renamed from XVECTOR_HEADER_SIZE.
All uses changed.
(XVECTOR_HEADER_SIZE): New macro, for use in XSETPSEUDOVECTOR.
(XSETTYPED_PVECTYPE): New macro, specifying the name of the size
member.
(XSETPVECTYPE): Rewrite in terms of new macro.
(XSETPVECTYPESIZE): New macro, specifying both type and size.
This is a bit clearer, and further avoids the possibility of
undesirable aliasing.
(XSETTYPED_PSEUDOVECTOR): New macro, specifying the size.
(XSETPSEUDOVECTOR): Rewrite in terms of XSETTYPED_PSEUDOVECTOR
and XVECTOR_HEADER_SIZE.
(XSETSUBR): Rewrite in terms of XSETTYPED_PSEUDOVECTOR and XSIZE,
since Lisp_Subr is a special case (no "next" field).
(ASIZE): Rewrite in terms of XVECTOR_SIZE.
(struct vector_header): New type.
(TYPED_PSEUDOVECTORP): New macro, also specifying the C type of the
object, to help avoid aliasing.
(PSEUDOVECTORP): Rewrite in terms of TYPED_PSEUDOVECTORP.
(SUBRP): Likewise, since Lisp_Subr is a special case.
src/lisp.h (struct Lisp_Vector, struct Lisp_Char_Table):
(struct Lisp_Sub_Char_Table, struct Lisp_Bool_Vector):
(struct Lisp_Hash_Table): Combine first two members into a single
struct vector_header member. All uses of "size" and "next" members
changed to be "header.size" and "header.next".
src/buffer.h (struct buffer): Likewise.
src/font.h (struct font_spec, struct font_entity, struct font): Likewise.
src/frame.h (struct frame): Likewise.
src/process.h (struct Lisp_Process): Likewise.
src/termhooks.h (struct terminal): Likewise.
src/window.c (struct save_window_data, struct saved_window): Likewise.
src/window.h (struct window): Likewise.
src/alloc.c (allocate_buffer, Fmake_bool_vector, allocate_pseudovector):
Use XSETPVECTYPESIZE, not XSETPVECTYPE, to avoid aliasing problems.
src/buffer.c (init_buffer_once): Likewise.
src/lread.c (defsubr): Use XSETTYPED_PVECTYPE, since Lisp_Subr is a
special case.
src/process.c (Fformat_network_address): Use local var for size,
for brevity.
src/fns.c (vector): Remove; this old hack is no longer needed.
src/bytecode.c (exec_byte_code): Don't use XVECTOR before CHECK_VECTOR.
Stefan Monnier [Fri, 6 May 2011 14:32:26 +0000 (11:32 -0300)]
* lispref/modes.texi (Region to Refontify): Rename from "Region to Fontify".
(Multiline Font Lock):
* lispref/vol2.texi (Top):
* lispref/vol1.texi (Top):
* lispref/elisp.texi (Top): Update menu accordingly.
Eli Zaretskii [Fri, 29 Apr 2011 14:23:44 +0000 (17:23 +0300)]
Allow the Windows build to use upto 2GB of heap.
src/w32heap.c (allocate_heap) [USE_LISP_UNION_TYPE || USE_LSB_TAG]:
New version that can reserve upto 2GB of heap space.
etc/NEWS: Mention the new feature.
Michael Albinus [Mon, 25 Apr 2011 17:58:27 +0000 (19:58 +0200)]
* net/tramp.el (tramp-process-actions): Add POS argument. Delete
region between POS and (pos).
(tramp-do-copy-or-rename-file-out-of-band): Use `nil' position in
`tramp-process-actions' call.
(tramp-maybe-open-connection): Call `tramp-process-actions' with pos.
* net/tramp-smb.el (tramp-smb-maybe-open-connection): Use `nil'
position in `tramp-process-actions' call.