Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package emacs for openSUSE:Factory checked 
in at 2026-08-22 21:34:46
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/emacs (Old)
 and      /work/SRC/openSUSE:Factory/.emacs.new.1258 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "emacs"

Sat Aug 22 21:34:46 2026 rev:221 rq:1372858 version:30.2

Changes:
--------
--- /work/SRC/openSUSE:Factory/emacs/emacs.changes      2026-08-09 
21:34:08.763738856 +0200
+++ /work/SRC/openSUSE:Factory/.emacs.new.1258/emacs.changes    2026-08-22 
21:36:22.842706361 +0200
@@ -1,0 +2,14 @@
+Fri Aug 21 09:40:20 UTC 2026 - Dr. Werner Fink <[email protected]>
+
+- Add patch 04_all_shorthands.patch and 03_all_ruby-flymake.patch
+  * First patch fixes bsc#1275941 with
+    VUL-0: emacs: code execution upon opening arbitrary file
+  * Second patch makes ruby support work with ruby 3.4.5
+
+-------------------------------------------------------------------
+Fri Aug 21 08:38:38 UTC 2026 - Dr. Werner Fink <[email protected]>
+
+- Add patch emacs-30.2-bsc1275927.patch to Fix bug 1275927:
+  VUL-0: emacs: zero-click local command execution via TRAMP
+
+-------------------------------------------------------------------

New:
----
  03_all_ruby-flymake.patch
  04_all_shorthands.patch
  emacs-30.2-bsc1275927.patch

----------(New B)----------
  New:
- Add patch 04_all_shorthands.patch and 03_all_ruby-flymake.patch
  * First patch fixes bsc#1275941 with
  New:
- Add patch 04_all_shorthands.patch and 03_all_ruby-flymake.patch
  * First patch fixes bsc#1275941 with
  New:
- Add patch emacs-30.2-bsc1275927.patch to Fix bug 1275927:
  VUL-0: emacs: zero-click local command execution via TRAMP
----------(New E)----------

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ emacs.spec ++++++
--- /var/tmp/diff_new_pack.bO2w65/_old  2026-08-22 21:36:24.358760466 +0200
+++ /var/tmp/diff_new_pack.bO2w65/_new  2026-08-22 21:36:24.362760609 +0200
@@ -253,6 +253,7 @@
 Patch27:        emacs-30.1-seccomp.patch
 Patch49:        0009-pdumper-set-DUMP_RELOC_ALIGNMENT_BITS-1-for-m68k.patch
 Patch50:        emacs-30.2-pgtk-visual-bell-boo1271643.patch
+Patch51:        emacs-30.2-bsc1275927.patch
 Patch52:        0012-Add-inhibit-native-compilation.patch
 Patch53:        0013-Rename-to-inhibit-automatic-native-compilation.patch
 Patch55:        0015-Change-native-comp-async-jobs-number-default-to-1.patch
@@ -260,6 +261,8 @@
 Patch57:        emacs-30.2-fix-zoom.patch
 Patch58:        emacs-30.2-tree-sitter-0.26.8.patch
 Patch59:        emacs-30.2-boo1262611.patch
+Patch60:        03_all_ruby-flymake.patch
+Patch61:        04_all_shorthands.patch
 
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 %{expand: %%global include_info %(test -s /usr/share/info/info.info* && echo 0 
|| echo 1)}
@@ -434,6 +437,7 @@
 %setup -q -b 2
 %patch -P49 -p1
 %patch -P50 -p0
+%patch -P51 -p0
 %patch -P52 -p1
 %patch -P53 -p1
 %patch -P55 -p1
@@ -441,6 +445,8 @@
 %patch -P57 -p1
 %patch -P58 -p1
 %patch -P59 -p1
+%patch -P60 -p1
+%patch -P61 -p1
 %patch -P1  -p0 -b .xauth
 %if %{with memmmap}
 %patch -P2  -p0 -b .glibc

++++++ 03_all_ruby-flymake.patch ++++++
Fix test failure with ruby 4.0
https://bugs.gentoo.org/979386
https://debbugs.gnu.org/79257

Patch backported from emacs-31 branch:

commit 54bd2264d3347895aacc926b33c6f1bb5af5fa0d
Author: john muhl <[email protected]>
Date:   Sun, 24 Aug 2025 11:29:43 -0500

    Fix 'ruby-flymake-simple' for Ruby 3.4 (Bug#79257)

commit 6b0b70233a2a29d3d4ea83b0ea07b337271c0d5f
Author: john muhl <[email protected]>
Date:   Wed, 27 Aug 2025 00:04:56 +0300

    ; ruby-flymake-simple: Only match relative file name (bug#79257)

commit 088c53175429c4cfd8be4c3c24438494ce205a23
Author: Dmitry Gutov <[email protected]>
Date:   Thu, 28 Aug 2025 03:16:35 +0300

    ruby-flymake-simple: Refine further

--- emacs-30.2/lisp/progmodes/ruby-mode.el
+++ emacs-30.2/lisp/progmodes/ruby-mode.el
@@ -2517,7 +2517,7 @@
      (goto-char (point-min))
      (cl-loop
       while (search-forward-regexp
-             "^\\(?:.*.rb\\|-\\):\\([0-9]+\\): \\(.*\\)$"
+             "^\\(?:[^:|]+: \\)?\\(?:.*\\.rb\\|-\\):\\([0-9]+\\): \\(.*\\)$"
              nil t)
       for msg = (match-string 2)
       for (beg . end) = (flymake-diag-region

++++++ 04_all_shorthands.patch ++++++
Nullify "read-symbol-shorthands" around risky "intern" calls
Patch backported from emacs-31 branch
https://bugs.gentoo.org/980616
https://debbugs.gnu.org/80574

commit 8466eb44991707d128110bdc549fad14c8e1d61e
Author: Eshel Yaron <[email protected]>
Date:   Wed, 5 Aug 2026 19:58:32 +0200

    Mitigate arbitrary code execution vulnerability

--- emacs-30.2/lisp/progmodes/cc-fonts.el
+++ emacs-30.2/lisp/progmodes/cc-fonts.el
@@ -2566,9 +2566,13 @@
   (let* ((doc-keywords (c-get-doc-comment-style))
         (list (nconc (c--mapcan
                       (lambda (doc-style)
-                        (let ((sym (intern
-                                    (concat (symbol-name doc-style)
-                                            "-font-lock-keywords"))))
+                        (let ((sym
+                               ;; Guard `intern' from potentially
+                               ;; malicious shorthands.
+                               (let (read-symbol-shorthands)
+                                 (intern
+                                  (concat (symbol-name doc-style)
+                                          "-font-lock-keywords")))))
                           (cond ((fboundp sym)
                                  (funcall sym))
                                 ((boundp sym)
--- emacs-30.2/lisp/vc/vc-hooks.el
+++ emacs-30.2/lisp/vc/vc-hooks.el
@@ -234,7 +234,10 @@
   "Return BACKEND-specific implementation of FUN.
 If there is no such implementation, return the default implementation;
 if that doesn't exist either, return nil."
-  (let ((f (vc-make-backend-sym backend fun)))
+  ;; Nullify `read-symbol-shorthands' to guard the `intern' calls below
+  ;; and in `vc-make-backend-sym' from potentially malicious shorthands.
+  (let* ((read-symbol-shorthands nil)
+         (f (vc-make-backend-sym backend fun)))
     (if (fboundp f) f
       ;; Load vc-BACKEND.el if needed.
       (require (intern (concat "vc-" (downcase (symbol-name backend)))))

++++++ emacs-24.3-iconic.patch ++++++
--- /var/tmp/diff_new_pack.bO2w65/_old  2026-08-22 21:36:24.488765106 +0200
+++ /var/tmp/diff_new_pack.bO2w65/_new  2026-08-22 21:36:24.491765213 +0200
@@ -4,7 +4,7 @@
 
 --- lisp/startup.el
 +++ lisp/startup.el    2016-09-19 09:15:26.871345783 +0000
-@@ -2657,6 +2657,9 @@ nil default-directory" name)
+@@ -2661,6 +2661,9 @@ nil default-directory" name)
                      ((equal argi "-no-splash")
                       (setq inhibit-startup-screen t))
  

++++++ emacs-30.2-bsc1275927.patch ++++++
Bug 1275927 - VUL-0: emacs: zero-click local command execution via TRAMP

---
 lisp/net/tramp-gvfs.el   |   36 ++++++++++++++++++++----------------
 lisp/net/tramp-rclone.el |    4 ++--
 lisp/net/tramp-smb.el    |    6 +++---
 lisp/net/tramp.el        |   16 ++++++++++++----
 4 files changed, 37 insertions(+), 25 deletions(-)

--- lisp/net/tramp-gvfs.el
+++ lisp/net/tramp-gvfs.el      2026-08-21 00:00:00.000000000 +0000
@@ -1241,7 +1241,7 @@ file names."
          (when (string-match
                 (rx bos "/" (+ (not "/")) (group "/.." (? "/"))) localname)
            (setq localname (replace-match "/" t t localname 1)))
-       (when (string-match (rx bol "/.." (? "/")) localname)
+       (when (string-match (rx bos "/.." (? "/")) localname)
          (setq localname (replace-match "/" t t localname))))
       ;; There might be a double slash.  Remove this.
       (while (string-match "//" localname)
@@ -1335,8 +1335,8 @@ If FILE-SYSTEM is non-nil, return file s
   (with-parsed-tramp-file-name filename nil
     (setq localname (file-name-unquote localname))
     (if (or (and (string-match-p
-                 (rx bol (| "afp" (: "dav" (? "s")) "smb") eol) method)
-                (string-match-p (rx bol (? "/") (+ (not "/")) eol) localname))
+                 (rx bos (| "afp" (: "dav" (? "s")) "smb") eos) method)
+                (string-match-p (rx bos (? "/") (+ (not "/")) eos) localname))
            (string-equal localname "/"))
        (tramp-gvfs-get-root-attributes filename)
       (assoc
@@ -1370,7 +1370,11 @@ If FILE-SYSTEM is non-nil, return file s
                (lambda (x)
                  (unibyte-string (string-to-number (match-string 1 x) 16)))
                res-symlink-target)
-              'utf-8)))
+              'utf-8))
+       ;; If the resulting localname looks remote, we must quote it
+       ;; for security reasons.
+       (when (tramp-tramp-file-p res-symlink-target)
+         (setq res-symlink-target (file-name-quote res-symlink-target 'top))))
       ;; ... number links
       (setq res-numlinks
            (string-to-number
@@ -1773,14 +1777,14 @@ ID-FORMAT valid values are `string' and
   "Retrieve file name from D-Bus OBJECT-PATH."
   (dbus-unescape-from-identifier
    (replace-regexp-in-string
-    (rx bol (* nonl) "/" (group (+ (not "/"))) eol) "\\1" object-path)))
+    (rx bos (* nonl) "/" (group (+ (not "/"))) eos) "\\1" object-path)))
 
 (defun tramp-gvfs-url-host (url)
   "Return the host name part of URL, a string.
 We cannot use `url-host', because `url-generic-parse-url' returns
 a downcased host name only."
   (and (stringp url)
-       (string-match (rx bol (+ alnum) "://" (group (+ (not (any "/:"))))) url)
+       (string-match (rx bos (+ alnum) "://" (group (+ (not (any "/:"))))) url)
        (match-string 1 url)))
 
 ;; This is used in GNU ELPA package tramp-locproc.el.
@@ -1934,7 +1938,7 @@ Their full names are \"org.gtk.vfs.Mount
                   (cadr (assoc "ssl" (cadr mount-spec)))))
             (uri (tramp-gvfs-dbus-byte-array-to-string
                   (cadr (assoc "uri" (cadr mount-spec))))))
-       (when (string-match (rx bol (group (| "afp" "smb"))) method)
+       (when (string-match (rx bos (group (| "afp" "smb"))) method)
          (setq method (match-string 1 method)))
        (when (and (string-equal "dav" method) (string-equal "true" ssl))
          (setq method "davs"))
@@ -2034,7 +2038,7 @@ Their full names are \"org.gtk.vfs.Mount
                      (or
                       (cadr (assoc "share" (cadr mount-spec)))
                       (cadr (assoc "volume" (cadr mount-spec)))))))
-        (when (string-match (rx bol (group (| "afp" "smb"))) method)
+        (when (string-match (rx bos (group (| "afp" "smb"))) method)
           (setq method (match-string 1 method)))
         (when (and (string-equal "dav" method) (string-equal "true" ssl))
           (setq method "davs"))
@@ -2067,7 +2071,7 @@ Their full names are \"org.gtk.vfs.Mount
                (string-equal host (tramp-file-name-host vec))
                (string-equal port (tramp-file-name-port vec))
                (string-match-p
-                (rx bol "/" (literal (or share "")))
+                (rx bos "/" (literal (or share "")))
                 (tramp-file-name-unquote-localname vec)))
           ;; Set mountpoint and location.
           (tramp-set-file-property vec "/" "fuse-mountpoint" fuse-mountpoint)
@@ -2093,7 +2097,7 @@ Their full names are \"org.gtk.vfs.Mount
 (defun tramp-gvfs-mount-spec-entry (key value)
   "Construct a mount-spec entry to be used in a mount_spec.
 It was \"a(say)\", but has changed to \"a{sv})\"."
-  (if (string-match-p (rx bol "(aya{sv})") tramp-gvfs-mountlocation-signature)
+  (if (string-match-p (rx bos "(aya{sv})") tramp-gvfs-mountlocation-signature)
       (list :dict-entry key
            (list :variant (tramp-gvfs-dbus-string-to-byte-array value)))
     (list :struct key (tramp-gvfs-dbus-string-to-byte-array value))))
@@ -2112,9 +2116,9 @@ It was \"a(say)\", but has changed to \"
                   (tramp-media-device-port media) (tramp-file-name-port vec)))
         (localname (tramp-file-name-unquote-localname vec))
         (share (when (string-match
-                      (rx bol (? "/") (group (+ (not "/")))) localname)
+                      (rx bos (? "/") (group (+ (not "/")))) localname)
                  (match-string 1 localname)))
-        (ssl (if (string-match-p (rx bol (| "davs" "nextcloud")) method)
+        (ssl (if (string-match-p (rx bos (| "davs" "nextcloud")) method)
                  "true" "false"))
         (mount-spec
           `(:array
@@ -2123,7 +2127,7 @@ It was \"a(say)\", but has changed to \"
                 (list (tramp-gvfs-mount-spec-entry "type" "smb-share")
                       (tramp-gvfs-mount-spec-entry "server" host)
                       (tramp-gvfs-mount-spec-entry "share" share)))
-               ((string-match-p (rx bol (| "davs" "nextcloud")) method)
+               ((string-match-p (rx bos (| "davs" "nextcloud")) method)
                 (list (tramp-gvfs-mount-spec-entry "type" "dav")
                       (tramp-gvfs-mount-spec-entry "host" host)
                       (tramp-gvfs-mount-spec-entry "ssl" ssl)))
@@ -2137,7 +2141,7 @@ It was \"a(say)\", but has changed to \"
                ((string-equal "nextcloud" method)
                 (list (tramp-gvfs-mount-spec-entry "type" "owncloud")
                       (tramp-gvfs-mount-spec-entry "host" host)))
-               ((string-match-p (rx bol "http") method)
+               ((string-match-p (rx bos "http") method)
                 (list (tramp-gvfs-mount-spec-entry "type" "http")
                       (tramp-gvfs-mount-spec-entry
                       "uri"
@@ -2154,8 +2158,8 @@ It was \"a(say)\", but has changed to \"
             ,@(when port
                 (list (tramp-gvfs-mount-spec-entry "port" port)))))
         (mount-pref
-          (if (and (string-match-p (rx bol "dav") method)
-                   (string-match (rx bol (? "/") (+ (not "/"))) localname))
+          (if (and (string-match-p (rx bos "dav") method)
+                   (string-match (rx bos (? "/") (+ (not "/"))) localname))
               (match-string 0 localname)
            (tramp-gvfs-get-remote-prefix vec))))
 
--- lisp/net/tramp-rclone.el
+++ lisp/net/tramp-rclone.el    2026-08-21 00:00:00.000000000 +0000
@@ -191,7 +191,7 @@ arguments to pass to the OPERATION."
   (with-tramp-connection-property nil "rclone-device-names"
     (tramp-compat-seq-keep
      (lambda (line)
-       (when (string-match (rx bol (group (+ (not blank))) ":" eol) line)
+       (when (string-match (rx bos (group (+ (not blank))) ":" eos) line)
         `(nil ,(match-string 1 line))))
      (tramp-process-lines nil tramp-rclone-program "listremotes"))))
 
@@ -365,7 +365,7 @@ file names."
          (tramp-rclone-maybe-open-connection v)
          ;; TODO: This shall be handled by `expand-file-name'.
          (setq localname
-               (replace-regexp-in-string (rx bol ".") "" (or localname "")))
+               (replace-regexp-in-string (rx bos ".") "" (or localname "")))
          (format "%s%s" (tramp-fuse-mounted-p v) localname)))
     ;; It is a local file name.
     filename))
--- lisp/net/tramp-smb.el
+++ lisp/net/tramp-smb.el       2026-08-21 08:09:15.897189933 +0000
@@ -1550,7 +1550,7 @@ VEC or USER, or if there is no home dire
   "Return the share name of LOCALNAME."
   (save-match-data
     (let ((localname (tramp-file-name-unquote-localname vec)))
-      (when (string-match (rx bol (? "/") (group (+ (not "/"))) "/") localname)
+      (when (string-match (rx bos (? "/") (group (+ (not "/"))) "/") localname)
        (match-string 1 localname)))))
 
 (defun tramp-smb-get-localname (vec)
@@ -1561,7 +1561,7 @@ If VEC has no cifs capabilities, exchang
       (setq
        localname
        (if (string-match
-           (rx bol (? "/") (+ (not "/")) (group "/" (* nonl))) localname)
+           (rx bos (? "/") (+ (not "/")) (group "/" (* nonl))) localname)
           ;; There is a share, separated by "/".
           (if (not (tramp-smb-get-cifs-capabilities vec))
               (mapconcat
@@ -1569,7 +1569,7 @@ If VEC has no cifs capabilities, exchang
                (match-string 1 localname) "")
             (match-string 1 localname))
         ;; There is just a share.
-        (if (string-match (rx bol (? "/") (group (+ (not "/"))) eol) localname)
+        (if (string-match (rx bos (? "/") (group (+ (not "/"))) eol) localname)
             (match-string 1 localname)
           "")))
 
--- lisp/net/tramp.el
+++ lisp/net/tramp.el   2026-08-21 08:13:13.304957552 +0000
@@ -973,11 +973,11 @@ Used in `tramp-make-tramp-file-name'.")
 
 (defun tramp-build-prefix-regexp ()
   "Return `tramp-prefix-regexp'."
-  (rx bol (literal (tramp-build-prefix-format))))
+  (rx bos (literal (tramp-build-prefix-format))))
 
 (defvar tramp-prefix-regexp nil ; Initialized when defining `tramp-syntax'!
   "Regexp matching the very beginning of Tramp file names.
-Should always start with \"^\".  Derived from `tramp-prefix-format'.")
+Should always start with \"\\\\=`\".  Derived from `tramp-prefix-format'.")
 
 (defconst tramp-method-regexp-alist
   `((default . ,(rx (| (literal tramp-default-method-marker) (>= 2 alnum))))
@@ -1019,7 +1019,10 @@ Used in `tramp-make-tramp-file-name'.")
   "Regexp matching delimiter between method and user or host names.
 Derived from `tramp-postfix-method-format'.")
 
-(defconst tramp-user-regexp (rx (+ (not (any "/:|" blank))))
+(defconst tramp-user-regexp
+  (rx (| (+ (not (any "/\\^$?*:;|[]{}()<>`'\"" blank)))
+        ;; Environment variable.
+        (: "$" (+ (any "_" alnum)))))
   "Regexp matching user names.")
 
 (defconst tramp-prefix-domain-format "%"
@@ -1801,6 +1804,8 @@ default values are used."
            (hop       (match-string (nth 5 tramp-file-name-structure) name))
            domain port v)
        (when user
+         (while (string-match (rx bos "$" (group (+ (any "_" alnum))) eos) 
user)
+           (setq user (getenv (match-string 1 user))))
          (when (string-match tramp-user-with-domain-regexp user)
            (setq domain (match-string 2 user)
                  user (match-string 1 user))))
@@ -2491,9 +2496,9 @@ Fall back to normal file name handler if
        ;; `file-remote-p' is called for everything, even for symbolic
        ;; links which look remote.  We don't want to get an error.
        (non-essential (or non-essential (eq operation 'file-remote-p))))
+    (setq filename (tramp-replace-environment-variables filename))
     (if (tramp-tramp-file-p filename)
        (save-match-data
-          (setq filename (tramp-replace-environment-variables filename))
           (with-parsed-tramp-file-name filename nil
             (let ((current-connection tramp-current-connection)
                  (foreign
@@ -6537,6 +6542,9 @@ to cache the result.  Return the modifie
                               (caar attr))
                              (decode-coding-string
                               (match-string 1 (caar attr)) 'utf-8))))
+              ;; Quote remote-like symlink.
+              (when (and (stringp (car attr)) (tramp-tramp-file-p (car attr)))
+                (setcar attr (file-name-quote (car attr) 'top)))
               ;; Set file's gid change bit.
               (setcar
                (nthcdr 9 attr)

Reply via email to