[emacs/f15] Upstream pre-release
Karel Klíč
kklic at fedoraproject.org
Fri Jan 20 14:11:48 UTC 2012
commit 106e46a21aa75a7233e54c8aa27a5b4517e277c4
Author: Karel Klic <kklic at redhat.com>
Date: Fri Jan 20 16:12:05 2012 +0100
Upstream pre-release
emacs-23.1-xdg.patch | 49 ---
emacs-23.2-hideshow-comment.patch | 17 -
emacs-ede-cve-2012-0035.patch | 862 ++++++++++++++++---------------------
emacs-wm-state-hidden.patch | 173 --------
emacs.spec | 38 +-
5 files changed, 395 insertions(+), 744 deletions(-)
---
diff --git a/emacs-ede-cve-2012-0035.patch b/emacs-ede-cve-2012-0035.patch
index df39d54..9fe81a8 100644
--- a/emacs-ede-cve-2012-0035.patch
+++ b/emacs-ede-cve-2012-0035.patch
@@ -1,483 +1,379 @@
-diff -r -c emacs-23.3-old/lisp/cedet/ede/auto.el emacs-23.3/lisp/cedet/ede/auto.el
-*** emacs-23.3-old/lisp/cedet/ede/auto.el 2011-01-09 01:45:14.000000000 +0800
---- emacs-23.3/lisp/cedet/ede/auto.el 2012-01-09 13:20:12.410502713 +0800
-***************
-*** 58,63 ****
---- 58,70 ----
- :initform t
- :documentation
- "Non-nil if this is an option when a user creates a project.")
-+ (safe-p :initarg :safe-p
-+ :initform t
-+ :documentation
-+ "Non-nil if the project load files are \"safe\".
-+ An unsafe project is one that loads project variables via Emacs
-+ Lisp code. A safe project is one that loads project variables by
-+ scanning files without loading Lisp code from them.")
- )
- "Class representing minimal knowledge set to run preliminary EDE functions.
- When more advanced functionality is needed from a project type, that projects
-***************
-*** 69,81 ****
- :name "Make" :file 'ede/proj
- :proj-file "Project.ede"
- :load-type 'ede-proj-load
-! :class-sym 'ede-proj-project)
- (ede-project-autoload "edeproject-automake"
- :name "Automake" :file 'ede/proj
- :proj-file "Project.ede"
- :initializers '(:makefile-type Makefile.am)
- :load-type 'ede-proj-load
-! :class-sym 'ede-proj-project)
- (ede-project-autoload "automake"
- :name "automake" :file 'ede/project-am
- :proj-file "Makefile.am"
---- 76,90 ----
- :name "Make" :file 'ede/proj
- :proj-file "Project.ede"
- :load-type 'ede-proj-load
-! :class-sym 'ede-proj-project
-! :safe-p nil)
- (ede-project-autoload "edeproject-automake"
- :name "Automake" :file 'ede/proj
- :proj-file "Project.ede"
- :initializers '(:makefile-type Makefile.am)
- :load-type 'ede-proj-load
-! :class-sym 'ede-proj-project
-! :safe-p nil)
- (ede-project-autoload "automake"
- :name "automake" :file 'ede/project-am
- :proj-file "Makefile.am"
-***************
-*** 84,89 ****
---- 93,100 ----
- :new-p nil))
- "List of vectors defining how to determine what type of projects exist.")
-
-+ (put 'ede-project-class-files 'risky-local-variable t)
-+
- ;;; EDE project-autoload methods
- ;;
- (defmethod ede-project-root ((this ede-project-autoload))
-***************
-*** 122,127 ****
---- 133,151 ----
- (when (and f (file-exists-p f))
- f)))
-
-+ (defmethod ede-auto-load-project ((this ede-project-autoload) dir)
-+ "Load in the project associated with THIS project autoload description.
-+ THIS project description should be valid for DIR, where the project will
-+ be loaded."
-+ ;; Last line of defense: don't load unsafe projects.
-+ (when (not (or (oref this :safe-p)
-+ (ede-directory-safe-p dir)))
-+ (error "Attempt to load an unsafe project (bug elsewhere in EDE)"))
-+ ;; Things are good - so load the project.
-+ (let ((o (funcall (oref this load-type) dir)))
-+ (when (not o)
-+ (error "Project type error: :load-type failed to create a project"))
-+ (ede-add-project-to-global-list o)))
-
- (provide 'ede/auto)
-
-diff -r -c emacs-23.3-old/lisp/cedet/ede/simple.el emacs-23.3/lisp/cedet/ede/simple.el
-*** emacs-23.3-old/lisp/cedet/ede/simple.el 2011-01-09 01:45:14.000000000 +0800
---- emacs-23.3/lisp/cedet/ede/simple.el 2012-01-09 13:17:20.010502312 +0800
-***************
-*** 50,56 ****
- :name "Simple" :file 'ede/simple
- :proj-file 'ede-simple-projectfile-for-dir
- :load-type 'ede-simple-load
-! :class-sym 'ede-simple-project)
- t)
-
- (defcustom ede-simple-save-directory "~/.ede"
---- 50,57 ----
- :name "Simple" :file 'ede/simple
- :proj-file 'ede-simple-projectfile-for-dir
- :load-type 'ede-simple-load
-! :class-sym 'ede-simple-project
-! :safe-p nil)
- t)
-
- (defcustom ede-simple-save-directory "~/.ede"
-diff -r -c emacs-23.3-old/lisp/cedet/ede.el emacs-23.3/lisp/cedet/ede.el
-*** emacs-23.3-old/lisp/cedet/ede.el 2011-01-09 01:45:14.000000000 +0800
---- emacs-23.3/lisp/cedet/ede.el 2012-01-09 13:24:44.854503349 +0800
-***************
-*** 94,99 ****
---- 94,135 ----
- :group 'ede
- :type 'sexp) ; make this be a list of options some day
-
-+ (defcustom ede-project-directories nil
-+ "Directories in which EDE may search for project files.
-+ If the value is t, EDE may search in any directory.
-+
-+ If the value is a function, EDE calls that function with one
-+ argument, the directory name; the function should return t iff
-+ EDE should look for project files in the directory.
-+
-+ Otherwise, the value should be a list of fully-expanded directory
-+ names. EDE searches for project files only in those directories.
-+ If you invoke the commands \\[ede] or \\[ede-new] on a directory
-+ that is not listed, Emacs will offer to add it to the list.
-+
-+ Any other value disables searching for EDE project files."
-+ :group 'ede
-+ :type '(choice (const :tag "Any directory" t)
-+ (repeat :tag "List of directories"
-+ (directory))
-+ (function :tag "Predicate"))
-+ :version "23.4"
-+ :risky t)
-+
-+ (defun ede-directory-safe-p (dir)
-+ "Return non-nil if DIR is a safe directory to load projects from.
-+ Projects that do not load a project definition as Emacs Lisp code
-+ are safe, and can be loaded automatically. Other project types,
-+ such as those created with Project.ede files, are safe only if
-+ specified by `ede-project-directories'."
-+ (setq dir (directory-file-name (expand-file-name dir)))
-+ ;; Load only if allowed by `ede-project-directories'.
-+ (or (eq ede-project-directories t)
-+ (and (functionp ede-project-directories)
-+ (funcall ede-project-directories dir))
-+ (and (listp ede-project-directories)
-+ (member dir ede-project-directories))))
-+
-
- ;;; Management variables
-
-***************
-*** 419,442 ****
- Sets buffer local variables for EDE."
- (let* ((ROOT nil)
- (proj (ede-directory-get-open-project default-directory
-! 'ROOT)))
- (when (or proj ROOT
-! (ede-directory-project-p default-directory t))
-
-! (when (not proj)
-! ;; @todo - this could be wasteful.
-! (setq proj (ede-load-project-file default-directory 'ROOT)))
-
-! (setq ede-object (ede-buffer-object (current-buffer)
- 'ede-object-project))
-
-! (setq ede-object-root-project
-! (or ROOT (ede-project-root ede-object-project)))
-
-! (if (and (not ede-object) ede-object-project)
-! (ede-auto-add-to-target))
-
-! (ede-apply-target-options))))
-
- (defun ede-reset-all-buffers (onoff)
- "Reset all the buffers due to change in EDE.
---- 455,496 ----
- Sets buffer local variables for EDE."
- (let* ((ROOT nil)
- (proj (ede-directory-get-open-project default-directory
-! 'ROOT))
-! (projauto nil))
-!
- (when (or proj ROOT
-! ;; If there is no open project, look up the project
-! ;; autoloader to see if we should initialize.
-! (setq projauto (ede-directory-project-p default-directory t)))
-!
-! (when (and (not proj) projauto)
-!
-! ;; No project was loaded, but we have a project description
-! ;; object. This means that we can check if it is a safe
-! ;; project to load before requesting it to be loaded.
-!
-! (when (or (oref projauto safe-p)
-! ;; The project style is not safe, so check if it is
-! ;; in `ede-project-directories'.
-! (let ((top (ede-toplevel-project default-directory)))
-! (ede-directory-safe-p top)))
-
-! ;; The project is safe, so load it in.
-! (setq proj (ede-load-project-file default-directory 'ROOT))))
-
-! ;; Only initialize EDE state in this buffer if we found a project.
-! (when proj
-!
-! (setq ede-object (ede-buffer-object (current-buffer)
- 'ede-object-project))
-
-! (setq ede-object-root-project
-! (or ROOT (ede-project-root ede-object-project)))
-
-! (if (and (not ede-object) ede-object-project)
-! (ede-auto-add-to-target))
-
-! (ede-apply-target-options)))))
-
- (defun ede-reset-all-buffers (onoff)
- "Reset all the buffers due to change in EDE.
-***************
-*** 555,567 ****
-
- ;;; Interactive method invocations
- ;;
-! (defun ede (file)
-! "Start up EDE on something.
-! Argument FILE is the file or directory to load a project from."
-! (interactive "fProject File: ")
-! (if (not (file-exists-p file))
-! (ede-new file)
-! (ede-load-project-file (file-name-directory file))))
-
- (defun ede-new (type &optional name)
- "Create a new project starting of project type TYPE.
---- 609,681 ----
-
- ;;; Interactive method invocations
- ;;
-! (defun ede (dir)
-! "Start up EDE for directory DIR.
-! If DIR has an existing project file, load it.
-! Otherwise, create a new project for DIR."
-! (interactive
-! ;; When choosing a directory to turn on, and we see some directory here,
-! ;; provide that as the default.
-! (let* ((top (ede-toplevel-project default-directory))
-! (promptdflt (or top default-directory)))
-! (list (read-directory-name "Project directory: "
-! promptdflt promptdflt t))))
-! (unless (file-directory-p dir)
-! (error "%s is not a directory" dir))
-! (when (ede-directory-get-open-project dir)
-! (error "%s already has an open project associated with it" dir))
-!
-! ;; Check if the directory has been added to the list of safe
-! ;; directories. It can also add the directory to the safe list if
-! ;; the user chooses.
-! (if (ede-check-project-directory dir)
-! (progn
-! ;; If there is a project in DIR, load it, otherwise do
-! ;; nothing.
-! (ede-load-project-file dir)
-!
-! ;; Check if we loaded anything on the previous line.
-! (if (ede-current-project dir)
-!
-! ;; We successfully opened an existing project. Some open
-! ;; buffers may also be referring to this project.
-! ;; Resetting all the buffers will get them to also point
-! ;; at this new open project.
-! (ede-reset-all-buffers 1)
-!
-! ;; ELSE
-! ;; There was no project, so switch to `ede-new' which is how
-! ;; a user can select a new kind of project to create.
-! (let ((default-directory (expand-file-name dir)))
-! (call-interactively 'ede-new))))
-!
-! ;; If the proposed directory isn't safe, then say so.
-! (error "%s is not an allowed project directory in `ede-project-directories'"
-! dir)))
-!
-! (defun ede-check-project-directory (dir)
-! "Check if DIR should be in `ede-project-directories'.
-! If it is not, try asking the user if it should be added; if so,
-! add it and save `ede-project-directories' via Customize.
-! Return nil iff DIR should not be in `ede-project-directories'."
-! (setq dir (directory-file-name (expand-file-name dir))) ; strip trailing /
-! (or (eq ede-project-directories t)
-! (and (functionp ede-project-directories)
-! (funcall ede-project-directories dir))
-! ;; If `ede-project-directories' is a list, maybe add it.
-! (when (listp ede-project-directories)
-! (or (member dir ede-project-directories)
-! (when (y-or-n-p (format "`%s' is not listed in `ede-project-directories'.
-! Add it to the list of allowed project directories? "
-! dir))
-! (push dir ede-project-directories)
-! ;; If possible, save `ede-project-directories'.
-! (if (or custom-file user-init-file)
-! (let ((coding-system-for-read nil))
-! (customize-save-variable
-! 'ede-project-directories
-! ede-project-directories)))
-! t)))))
-
- (defun ede-new (type &optional name)
- "Create a new project starting of project type TYPE.
-***************
-*** 596,601 ****
---- 710,720 ----
- (error "Cannot create project in non-existent directory %s" default-directory))
- (when (not (file-writable-p default-directory))
- (error "No write permissions for %s" default-directory))
-+ (unless (ede-check-project-directory default-directory)
-+ (error "%s is not an allowed project directory in `ede-project-directories'"
-+ default-directory))
-+ ;; Make sure the project directory is loadable in the future.
-+ (ede-check-project-directory default-directory)
- ;; Create the project
- (let* ((obj (object-assoc type 'name ede-project-class-files))
- (nobj (let ((f (oref obj file))
-***************
-*** 629,634 ****
---- 748,757 ----
- (ede-add-subproject pp nobj)
- (ede-commit-project pp)))
- (ede-commit-project nobj))
-+ ;; Once the project is created, load it again. This used to happen
-+ ;; lazily, but with project loading occurring less often and with
-+ ;; security in mind, this is now the safe time to reload.
-+ (ede-load-project-file default-directory)
- ;; Have the menu appear
- (setq ede-minor-mode t)
- ;; Allert the user
-***************
-*** 651,661 ****
- (defun ede-rescan-toplevel ()
- "Rescan all project files."
- (interactive)
-! (let ((toppath (ede-toplevel-project default-directory))
-! (ede-deep-rescan t))
-! (project-rescan (ede-load-project-file toppath))
-! (ede-reset-all-buffers 1)
-! ))
-
- (defun ede-new-target (&rest args)
- "Create a new target specific to this type of project file.
---- 774,789 ----
- (defun ede-rescan-toplevel ()
- "Rescan all project files."
- (interactive)
-! (if (not (ede-directory-get-open-project default-directory))
-! ;; This directory isn't open. Can't rescan.
-! (error "Attempt to rescan a project that isn't open")
-!
-! ;; Continue
-! (let ((toppath (ede-toplevel-project default-directory))
-! (ede-deep-rescan t))
-!
-! (project-rescan (ede-load-project-file toppath))
-! (ede-reset-all-buffers 1))))
-
- (defun ede-new-target (&rest args)
- "Create a new target specific to this type of project file.
-***************
-*** 891,897 ****
- ;; Do the load
- ;;(message "EDE LOAD : %S" file)
- (let* ((file dir)
-! (path (expand-file-name (file-name-directory file)))
- (pfc (ede-directory-project-p path))
- (toppath nil)
- (o nil))
---- 1019,1025 ----
- ;; Do the load
- ;;(message "EDE LOAD : %S" file)
- (let* ((file dir)
-! (path (file-name-as-directory (expand-file-name dir)))
- (pfc (ede-directory-project-p path))
- (toppath nil)
- (o nil))
-***************
-*** 920,932 ****
- ;; See if it's been loaded before
- (setq o (object-assoc (ede-dir-to-projectfile pfc toppath) 'file
- ede-projects))
-! (if (not o)
-! ;; If not, get it now.
-! (let ((ede-constructing pfc))
-! (setq o (funcall (oref pfc load-type) toppath))
-! (when (not o)
-! (error "Project type error: :load-type failed to create a project"))
-! (ede-add-project-to-global-list o)))
-
- ;; Return the found root project.
- (when rootreturn (set rootreturn o))
---- 1048,1058 ----
- ;; See if it's been loaded before
- (setq o (object-assoc (ede-dir-to-projectfile pfc toppath) 'file
- ede-projects))
-!
-! ;; If not open yet, load it.
-! (unless o
-! (let ((ede-constructing pfc))
-! (setq o (ede-auto-load-project pfc toppath))))
-
- ;; Return the found root project.
- (when rootreturn (set rootreturn o))
-***************
-*** 980,992 ****
- (and root
- (ede-find-subproject-for-directory root updir))
- ;; Try the all structure based search.
-! (ede-directory-get-open-project updir)
-! ;; Load up the project file as a last resort.
-! ;; Last resort since it uses file-truename, and other
-! ;; slow features.
-! (and (ede-directory-project-p updir)
-! (ede-load-project-file
-! (file-name-as-directory updir))))))))))
-
- (defun ede-current-project (&optional dir)
- "Return the current project file.
---- 1106,1112 ----
- (and root
- (ede-find-subproject-for-directory root updir))
- ;; Try the all structure based search.
-! (ede-directory-get-open-project updir))))))))
-
- (defun ede-current-project (&optional dir)
- "Return the current project file.
-***************
-*** 1000,1010 ****
- ;; No current project.
- (when (not ans)
- (let* ((ldir (or dir default-directory)))
-! (setq ans (ede-directory-get-open-project ldir))
-! (or ans
-! ;; No open project, if this dir pass project-p, then load.
-! (when (ede-directory-project-p ldir)
-! (setq ans (ede-load-project-file ldir))))))
- ;; Return what we found.
- ans))
-
---- 1120,1126 ----
- ;; No current project.
- (when (not ans)
- (let* ((ldir (or dir default-directory)))
-! (setq ans (ede-directory-get-open-project ldir))))
- ;; Return what we found.
- ans))
-
-***************
-*** 1059,1070 ****
- "Return the project which is the parent of TARGET.
- It is recommended you track the project a different way as this function
- could become slow in time."
-! ;; @todo - use ede-object-project as a starting point.
-! (let ((ans nil) (projs ede-projects))
-! (while (and (not ans) projs)
-! (setq ans (ede-target-in-project-p (car projs) target)
-! projs (cdr projs)))
-! ans))
-
- (defmethod ede-find-target ((proj ede-project) buffer)
- "Fetch the target in PROJ belonging to BUFFER or nil."
---- 1175,1187 ----
- "Return the project which is the parent of TARGET.
- It is recommended you track the project a different way as this function
- could become slow in time."
-! (or ede-object-project
-! ;; If not cached, derive it from the current directory of the target.
-! (let ((ans nil) (projs ede-projects))
-! (while (and (not ans) projs)
-! (setq ans (ede-target-in-project-p (car projs) target)
-! projs (cdr projs)))
-! ans)))
-
- (defmethod ede-find-target ((proj ede-project) buffer)
- "Fetch the target in PROJ belonging to BUFFER or nil."
+diff -up emacs-24.0.92/lisp/cedet/ede/auto.el.ede-cve-2012-0035 emacs-24.0.92/lisp/cedet/ede/auto.el
+--- emacs-24.0.92/lisp/cedet/ede/auto.el.ede-cve-2012-0035 2011-11-15 06:00:11.000000000 +0100
++++ emacs-24.0.92/lisp/cedet/ede/auto.el 2012-01-19 18:03:08.533397558 +0100
+@@ -58,6 +58,13 @@ associated with a single object class, b
+ :initform t
+ :documentation
+ "Non-nil if this is an option when a user creates a project.")
++ (safe-p :initarg :safe-p
++ :initform t
++ :documentation
++ "Non-nil if the project load files are \"safe\".
++An unsafe project is one that loads project variables via Emacs
++Lisp code. A safe project is one that loads project variables by
++scanning files without loading Lisp code from them.")
+ )
+ "Class representing minimal knowledge set to run preliminary EDE functions.
+ When more advanced functionality is needed from a project type, that projects
+@@ -69,13 +76,15 @@ type is required and the load function u
+ :name "Make" :file 'ede/proj
+ :proj-file "Project.ede"
+ :load-type 'ede-proj-load
+- :class-sym 'ede-proj-project)
++ :class-sym 'ede-proj-project
++ :safe-p nil)
+ (ede-project-autoload "edeproject-automake"
+ :name "Automake" :file 'ede/proj
+ :proj-file "Project.ede"
+ :initializers '(:makefile-type Makefile.am)
+ :load-type 'ede-proj-load
+- :class-sym 'ede-proj-project)
++ :class-sym 'ede-proj-project
++ :safe-p nil)
+ (ede-project-autoload "automake"
+ :name "automake" :file 'ede/project-am
+ :proj-file "Makefile.am"
+@@ -84,6 +93,8 @@ type is required and the load function u
+ :new-p nil))
+ "List of vectors defining how to determine what type of projects exist.")
+
++(put 'ede-project-class-files 'risky-local-variable t)
++
+ ;;; EDE project-autoload methods
+ ;;
+ (defmethod ede-project-root ((this ede-project-autoload))
+@@ -122,6 +133,19 @@ Return nil if the project file does not
+ (when (and f (file-exists-p f))
+ f)))
+
++(defmethod ede-auto-load-project ((this ede-project-autoload) dir)
++ "Load in the project associated with THIS project autoload description.
++THIS project description should be valid for DIR, where the project will
++be loaded."
++ ;; Last line of defense: don't load unsafe projects.
++ (when (not (or (oref this :safe-p)
++ (ede-directory-safe-p dir)))
++ (error "Attempt to load an unsafe project (bug elsewhere in EDE)"))
++ ;; Things are good - so load the project.
++ (let ((o (funcall (oref this load-type) dir)))
++ (when (not o)
++ (error "Project type error: :load-type failed to create a project"))
++ (ede-add-project-to-global-list o)))
+
+ (provide 'ede/auto)
+
+diff -up emacs-24.0.92/lisp/cedet/ede.el.ede-cve-2012-0035 emacs-24.0.92/lisp/cedet/ede.el
+--- emacs-24.0.92/lisp/cedet/ede.el.ede-cve-2012-0035 2011-11-20 07:34:43.000000000 +0100
++++ emacs-24.0.92/lisp/cedet/ede.el 2012-01-19 18:05:41.523484918 +0100
+@@ -94,6 +94,42 @@ target willing to take the file. 'never
+ :group 'ede
+ :type 'sexp) ; make this be a list of options some day
+
++(defcustom ede-project-directories nil
++ "Directories in which EDE may search for project files.
++If the value is t, EDE may search in any directory.
++
++If the value is a function, EDE calls that function with one
++argument, the directory name; the function should return t iff
++EDE should look for project files in the directory.
++
++Otherwise, the value should be a list of fully-expanded directory
++names. EDE searches for project files only in those directories.
++If you invoke the commands \\[ede] or \\[ede-new] on a directory
++that is not listed, Emacs will offer to add it to the list.
++
++Any other value disables searching for EDE project files."
++ :group 'ede
++ :type '(choice (const :tag "Any directory" t)
++ (repeat :tag "List of directories"
++ (directory))
++ (function :tag "Predicate"))
++ :version "23.4"
++ :risky t)
++
++(defun ede-directory-safe-p (dir)
++ "Return non-nil if DIR is a safe directory to load projects from.
++Projects that do not load a project definition as Emacs Lisp code
++are safe, and can be loaded automatically. Other project types,
++such as those created with Project.ede files, are safe only if
++specified by `ede-project-directories'."
++ (setq dir (directory-file-name (expand-file-name dir)))
++ ;; Load only if allowed by `ede-project-directories'.
++ (or (eq ede-project-directories t)
++ (and (functionp ede-project-directories)
++ (funcall ede-project-directories dir))
++ (and (listp ede-project-directories)
++ (member dir ede-project-directories))))
++
+
+ ;;; Management variables
+
+@@ -420,24 +456,42 @@ provided `global-ede-mode' is enabled."
+ Sets buffer local variables for EDE."
+ (let* ((ROOT nil)
+ (proj (ede-directory-get-open-project default-directory
+- 'ROOT)))
++ 'ROOT))
++ (projauto nil))
++
+ (when (or proj ROOT
+- (ede-directory-project-p default-directory t))
++ ;; If there is no open project, look up the project
++ ;; autoloader to see if we should initialize.
++ (setq projauto (ede-directory-project-p default-directory t)))
++
++ (when (and (not proj) projauto)
++
++ ;; No project was loaded, but we have a project description
++ ;; object. This means that we can check if it is a safe
++ ;; project to load before requesting it to be loaded.
++
++ (when (or (oref projauto safe-p)
++ ;; The project style is not safe, so check if it is
++ ;; in `ede-project-directories'.
++ (let ((top (ede-toplevel-project default-directory)))
++ (ede-directory-safe-p top)))
+
+- (when (not proj)
+- ;; @todo - this could be wasteful.
+- (setq proj (ede-load-project-file default-directory 'ROOT)))
++ ;; The project is safe, so load it in.
++ (setq proj (ede-load-project-file default-directory 'ROOT))))
+
+- (setq ede-object (ede-buffer-object (current-buffer)
++ ;; Only initialize EDE state in this buffer if we found a project.
++ (when proj
++
++ (setq ede-object (ede-buffer-object (current-buffer)
+ 'ede-object-project))
+
+- (setq ede-object-root-project
+- (or ROOT (ede-project-root ede-object-project)))
++ (setq ede-object-root-project
++ (or ROOT (ede-project-root ede-object-project)))
+
+- (if (and (not ede-object) ede-object-project)
+- (ede-auto-add-to-target))
++ (if (and (not ede-object) ede-object-project)
++ (ede-auto-add-to-target))
+
+- (ede-apply-target-options))))
++ (ede-apply-target-options)))))
+
+ (defun ede-reset-all-buffers (onoff)
+ "Reset all the buffers due to change in EDE.
+@@ -557,13 +611,73 @@ of objects with the `ede-want-file-p' me
+
+ ;;; Interactive method invocations
+ ;;
+-(defun ede (file)
+- "Start up EDE on something.
+-Argument FILE is the file or directory to load a project from."
+- (interactive "fProject File: ")
+- (if (not (file-exists-p file))
+- (ede-new file)
+- (ede-load-project-file (file-name-directory file))))
++(defun ede (dir)
++ "Start up EDE for directory DIR.
++If DIR has an existing project file, load it.
++Otherwise, create a new project for DIR."
++ (interactive
++ ;; When choosing a directory to turn on, and we see some directory here,
++ ;; provide that as the default.
++ (let* ((top (ede-toplevel-project default-directory))
++ (promptdflt (or top default-directory)))
++ (list (read-directory-name "Project directory: "
++ promptdflt promptdflt t))))
++ (unless (file-directory-p dir)
++ (error "%s is not a directory" dir))
++ (when (ede-directory-get-open-project dir)
++ (error "%s already has an open project associated with it" dir))
++
++ ;; Check if the directory has been added to the list of safe
++ ;; directories. It can also add the directory to the safe list if
++ ;; the user chooses.
++ (if (ede-check-project-directory dir)
++ (progn
++ ;; If there is a project in DIR, load it, otherwise do
++ ;; nothing.
++ (ede-load-project-file dir)
++
++ ;; Check if we loaded anything on the previous line.
++ (if (ede-current-project dir)
++
++ ;; We successfully opened an existing project. Some open
++ ;; buffers may also be referring to this project.
++ ;; Resetting all the buffers will get them to also point
++ ;; at this new open project.
++ (ede-reset-all-buffers 1)
++
++ ;; ELSE
++ ;; There was no project, so switch to `ede-new' which is how
++ ;; a user can select a new kind of project to create.
++ (let ((default-directory (expand-file-name dir)))
++ (call-interactively 'ede-new))))
++
++ ;; If the proposed directory isn't safe, then say so.
++ (error "%s is not an allowed project directory in `ede-project-directories'"
++ dir)))
++
++(defun ede-check-project-directory (dir)
++ "Check if DIR should be in `ede-project-directories'.
++If it is not, try asking the user if it should be added; if so,
++add it and save `ede-project-directories' via Customize.
++Return nil iff DIR should not be in `ede-project-directories'."
++ (setq dir (directory-file-name (expand-file-name dir))) ; strip trailing /
++ (or (eq ede-project-directories t)
++ (and (functionp ede-project-directories)
++ (funcall ede-project-directories dir))
++ ;; If `ede-project-directories' is a list, maybe add it.
++ (when (listp ede-project-directories)
++ (or (member dir ede-project-directories)
++ (when (y-or-n-p (format "`%s' is not listed in `ede-project-directories'.
++Add it to the list of allowed project directories? "
++ dir))
++ (push dir ede-project-directories)
++ ;; If possible, save `ede-project-directories'.
++ (if (or custom-file user-init-file)
++ (let ((coding-system-for-read nil))
++ (customize-save-variable
++ 'ede-project-directories
++ ede-project-directories)))
++ t)))))
+
+ (defun ede-new (type &optional name)
+ "Create a new project starting from project type TYPE.
+@@ -598,6 +712,11 @@ Optional argument NAME is the name to gi
+ (error "Cannot create project in non-existent directory %s" default-directory))
+ (when (not (file-writable-p default-directory))
+ (error "No write permissions for %s" default-directory))
++ (unless (ede-check-project-directory default-directory)
++ (error "%s is not an allowed project directory in `ede-project-directories'"
++ default-directory))
++ ;; Make sure the project directory is loadable in the future.
++ (ede-check-project-directory default-directory)
+ ;; Create the project
+ (let* ((obj (object-assoc type 'name ede-project-class-files))
+ (nobj (let ((f (oref obj file))
+@@ -631,6 +750,10 @@ Optional argument NAME is the name to gi
+ (ede-add-subproject pp nobj)
+ (ede-commit-project pp)))
+ (ede-commit-project nobj))
++ ;; Once the project is created, load it again. This used to happen
++ ;; lazily, but with project loading occurring less often and with
++ ;; security in mind, this is now the safe time to reload.
++ (ede-load-project-file default-directory)
+ ;; Have the menu appear
+ (setq ede-minor-mode t)
+ ;; Allert the user
+@@ -653,11 +776,16 @@ ARGS are additional arguments to pass to
+ (defun ede-rescan-toplevel ()
+ "Rescan all project files."
+ (interactive)
+- (let ((toppath (ede-toplevel-project default-directory))
+- (ede-deep-rescan t))
+- (project-rescan (ede-load-project-file toppath))
+- (ede-reset-all-buffers 1)
+- ))
++ (if (not (ede-directory-get-open-project default-directory))
++ ;; This directory isn't open. Can't rescan.
++ (error "Attempt to rescan a project that isn't open")
++
++ ;; Continue
++ (let ((toppath (ede-toplevel-project default-directory))
++ (ede-deep-rescan t))
++
++ (project-rescan (ede-load-project-file toppath))
++ (ede-reset-all-buffers 1))))
+
+ (defun ede-new-target (&rest args)
+ "Create a new target specific to this type of project file.
+@@ -893,7 +1021,7 @@ Optional ROOTRETURN will return the root
+ ;; Do the load
+ ;;(message "EDE LOAD : %S" file)
+ (let* ((file dir)
+- (path (expand-file-name (file-name-directory file)))
++ (path (file-name-as-directory (expand-file-name dir)))
+ (pfc (ede-directory-project-p path))
+ (toppath nil)
+ (o nil))
+@@ -922,13 +1050,11 @@ Optional ROOTRETURN will return the root
+ ;; See if it's been loaded before
+ (setq o (object-assoc (ede-dir-to-projectfile pfc toppath) 'file
+ ede-projects))
+- (if (not o)
+- ;; If not, get it now.
+- (let ((ede-constructing pfc))
+- (setq o (funcall (oref pfc load-type) toppath))
+- (when (not o)
+- (error "Project type error: :load-type failed to create a project"))
+- (ede-add-project-to-global-list o)))
++
++ ;; If not open yet, load it.
++ (unless o
++ (let ((ede-constructing pfc))
++ (setq o (ede-auto-load-project pfc toppath))))
+
+ ;; Return the found root project.
+ (when rootreturn (set rootreturn o))
+@@ -982,13 +1108,7 @@ Optional argument OBJ is an object to fi
+ (and root
+ (ede-find-subproject-for-directory root updir))
+ ;; Try the all structure based search.
+- (ede-directory-get-open-project updir)
+- ;; Load up the project file as a last resort.
+- ;; Last resort since it uses file-truename, and other
+- ;; slow features.
+- (and (ede-directory-project-p updir)
+- (ede-load-project-file
+- (file-name-as-directory updir))))))))))
++ (ede-directory-get-open-project updir))))))))
+
+ (defun ede-current-project (&optional dir)
+ "Return the current project file.
+@@ -1002,11 +1122,7 @@ If optional DIR is provided, get the pro
+ ;; No current project.
+ (when (not ans)
+ (let* ((ldir (or dir default-directory)))
+- (setq ans (ede-directory-get-open-project ldir))
+- (or ans
+- ;; No open project, if this dir pass project-p, then load.
+- (when (ede-directory-project-p ldir)
+- (setq ans (ede-load-project-file ldir))))))
++ (setq ans (ede-directory-get-open-project ldir))))
+ ;; Return what we found.
+ ans))
+
+@@ -1061,12 +1177,13 @@ If TARGET belongs to a subproject, retur
+ "Return the project which is the parent of TARGET.
+ It is recommended you track the project a different way as this function
+ could become slow in time."
+- ;; @todo - use ede-object-project as a starting point.
+- (let ((ans nil) (projs ede-projects))
+- (while (and (not ans) projs)
+- (setq ans (ede-target-in-project-p (car projs) target)
+- projs (cdr projs)))
+- ans))
++ (or ede-object-project
++ ;; If not cached, derive it from the current directory of the target.
++ (let ((ans nil) (projs ede-projects))
++ (while (and (not ans) projs)
++ (setq ans (ede-target-in-project-p (car projs) target)
++ projs (cdr projs)))
++ ans)))
+
+ (defmethod ede-find-target ((proj ede-project) buffer)
+ "Fetch the target in PROJ belonging to BUFFER or nil."
+diff -up emacs-24.0.92/lisp/cedet/ede/simple.el.ede-cve-2012-0035 emacs-24.0.92/lisp/cedet/ede/simple.el
+--- emacs-24.0.92/lisp/cedet/ede/simple.el.ede-cve-2012-0035 2011-10-14 02:40:36.000000000 +0200
++++ emacs-24.0.92/lisp/cedet/ede/simple.el 2012-01-19 18:03:08.533397558 +0100
+@@ -50,7 +50,8 @@
+ :name "Simple" :file 'ede/simple
+ :proj-file 'ede-simple-projectfile-for-dir
+ :load-type 'ede-simple-load
+- :class-sym 'ede-simple-project)
++ :class-sym 'ede-simple-project
++ :safe-p nil)
+ t)
+
+ (defcustom ede-simple-save-directory "~/.ede"
diff --git a/emacs.spec b/emacs.spec
index 1f372aa..38c92ea 100644
--- a/emacs.spec
+++ b/emacs.spec
@@ -2,12 +2,13 @@
Summary: GNU Emacs text editor
Name: emacs
Epoch: 1
-Version: 23.3
-Release: 8%{?dist}
+Version: 24.0.92
+Release: 1%{?dist}
License: GPLv3+
URL: http://www.gnu.org/software/emacs/
Group: Applications/Editors
-Source0: ftp://ftp.gnu.org/gnu/emacs/emacs-%{version}.tar.bz2
+#Source0: ftp://ftp.gnu.org/gnu/emacs/emacs-%{version}.tar.bz2
+Source0: http://alpha.gnu.org/gnu/emacs/pretest/emacs-%{version}.tar.gz
Source1: emacs.desktop
Source2: emacsclient.desktop
Source3: dotemacs.el
@@ -26,23 +27,15 @@ Source20: emacs-terminal.sh
Patch0: glibc-open-macro.patch
Patch1: rpm-spec-mode.patch
Patch3: rpm-spec-mode-utc.patch
-# Upstream implemented the change in revno. 101105
-Patch4: emacs-23.1-xdg.patch
-# Fix rhbz#595546
-# Upstream: http://emacsbugs.donarmstrong.com/cgi/bugreport.cgi?bug=6158
-Patch6: emacs-23.2-hideshow-comment.patch
-# rhbz#711739
-# http://bzr.savannah.gnu.org/lh/emacs/trunk/revision/106247
-Patch7: emacs-wm-state-hidden.patch
# http://lists.gnu.org/archive/html/emacs-devel/2012-01/msg00387.html
Patch8: emacs-ede-cve-2012-0035.patch
BuildRequires: atk-devel, cairo-devel, freetype-devel, fontconfig-devel, dbus-devel, giflib-devel, glibc-devel, gtk2-devel, libpng-devel
BuildRequires: libjpeg-devel, libtiff-devel, libX11-devel, libXau-devel, libXdmcp-devel, libXrender-devel, libXt-devel
-BuildRequires: libXpm-devel, ncurses-devel, xorg-x11-proto-devel, zlib-devel
-BuildRequires: librsvg2-devel, m17n-lib-devel, libotf-devel
+BuildRequires: libXpm-devel, ncurses-devel, xorg-x11-proto-devel, zlib-devel, gnutls-devel
+BuildRequires: librsvg2-devel, m17n-lib-devel, libotf-devel, ImageMagick-devel, libselinux-devel
BuildRequires: autoconf, automake, bzip2, cairo, texinfo, gzip
-BuildRequires: GConf2-devel, alsa-lib-devel
+BuildRequires: GConf2-devel, alsa-lib-devel, libxml2-devel
# Desktop integration
BuildRequires: desktop-file-utils
# Buildrequire both python2 and python3 since below we turn off the
@@ -154,9 +147,6 @@ packages that add functionality to Emacs.
%setup -q
%patch0 -p1 -b .glibc-open-macro
-%patch4 -p1 -b .xdg
-%patch6 -p0 -b .hideshow-comment
-%patch7 -p1 -b .wm-state-hidden
%patch8 -p1 -b .ede-cve-2012-0035
# Install site-lisp files
@@ -181,7 +171,7 @@ rm -f lisp/play/tetris.el lisp/play/tetris.elc
rm -f etc/sex.6 etc/condom.1 etc/celibacy.1 etc/COOKIES etc/future-bug etc/JOKES
%endif
-%define info_files ada-mode auth autotype calc ccmode cl dbus dired-x ebrowse ede ediff edt eieio efaq eintr elisp emacs emacs-mime epa erc eshell eudc flymake forms gnus idlwave info mairix-el message mh-e newsticker nxml-mode org pcl-cvs pgg rcirc reftex remember sasl sc semantic ses sieve smtpmail speedbar tramp url vip viper widget woman
+%define info_files ada-mode auth autotype calc ccmode cl dbus dired-x ebrowse ede ediff edt eieio efaq eintr elisp emacs emacs-mime epa erc ert eshell eudc flymake forms gnus idlwave info mairix-el message mh-e newsticker nxml-mode org pcl-cvs pgg rcirc reftex remember sasl sc semantic ses sieve smtpmail speedbar tramp url vip viper widget woman
if test "$(perl -e 'while (<>) { if (/^INFO_FILES/) { s/.*=//; while (s/\\$//) { s/\\//; $_ .= <>; }; s/\s+/ /g; s/^ //; s/ $//; print; exit; } }' Makefile.in)" != "%info_files"; then
echo Please update info_files >&2
@@ -205,7 +195,9 @@ mkdir build-gtk && cd build-gtk
ln -s ../configure .
%configure --with-dbus --with-gif --with-jpeg --with-png --with-rsvg \
- --with-tiff --with-xft --with-xpm --with-x-toolkit=gtk
+ --with-tiff --with-xft --with-xpm --with-x-toolkit=gtk \
+ --with-wide-int
+
make bootstrap
%{setarch} make %{?_smp_mflags}
cd ..
@@ -272,8 +264,8 @@ echo "(setq source-directory \"%{_datadir}/emacs/%{version}/\")" \
>> %{buildroot}%{site_lisp}/site-start.el
mv %{buildroot}%{_bindir}/{etags,etags.emacs}
-mv %{buildroot}%{_mandir}/man1/{ctags.1,gctags.1}
-mv %{buildroot}%{_mandir}/man1/{etags.1,etags.emacs.1}
+mv %{buildroot}%{_mandir}/man1/{ctags.1.gz,gctags.1.gz}
+mv %{buildroot}%{_mandir}/man1/{etags.1.gz,etags.emacs.1.gz}
mv %{buildroot}%{_bindir}/{ctags,gctags}
# Install site-lisp files
@@ -402,7 +394,6 @@ update-desktop-database &> /dev/null || :
%config(noreplace) %{_sysconfdir}/skel/.emacs
%config(noreplace) %{_sysconfdir}/rpm/macros.emacs
%doc etc/NEWS BUGS README etc/COPYING
-%{_bindir}/b2m
%{_bindir}/ebrowse
%{_bindir}/emacsclient
%{_bindir}/etags.emacs
@@ -434,6 +425,9 @@ update-desktop-database &> /dev/null || :
%dir %{_datadir}/emacs/site-lisp/site-start.d
%changelog
+* Thu Jan 19 2012 Karel Klíč <kklic at redhat.com> - 1:24.0.92-1
+- Upstream pre-release
+
* Thu Jan 12 2012 Karel Klíč <kklic at redhat.com> - 1:23.3-8
- Added patch to handle CVE-2012-0035: CEDET global-ede-mode file loading vulnerability (rhbz#773024)
- Check for _NET_WM_STATE_HIDDEN (rhbz#711739)
More information about the scm-commits
mailing list