themes – ¿Por qué los temas personalizados no suelen estar compilados por bytes?

Pregunta:

Tres evidencias sugieren que los temas personalizados no deben compilarse por bytes:

  1. Todos los temas integrados en etc/themes especifican no-byte-compile: t .
  2. La función custom-available-themes solo considera archivos .el y no .elc .
  3. La función load-theme puede cargar archivos .elc en custom-theme-load-path , pero solo lo hace si no hay .el archivo .el correspondiente.

Los nodos manuales (elisp) Custom Themes , (emacs) Custom Themes y (emacs) Creating Custom Themes no mencionan la compilación de bytes, entonces, ¿por qué no se hace? ¿Por qué las funciones custom-available-themes y load-path tan restrictivas? ¿Los temas personalizados de compilación de bytes presentan algún problema o desventaja?

Respuesta:

Los nodos manuales (elisp) Custom Themes , (emacs) Custom Themes y (emacs) Creating Custom Themes no mencionan la compilación de bytes, entonces, ¿por qué no se hace?

En el momento de redactar este documento, los manuales no mencionan explícitamente la compilación de bytes. No obstante, los temas personalizados se describen varias veces en todas las secciones a las que se hace referencia como que comprenden archivos fuente Elisp, en lugar de archivos compilados por bytes.

¿Por qué las funciones custom-available-themes y load-path tan restrictivas? ¿Los temas personalizados de compilación de bytes presentan algún problema o desventaja?

En resumen, la compilación de bytes de un tema personalizado confunde cualquier código que pueda contener y, por lo tanto, socava las defensas mencionadas en las siguientes secciones contra la carga inadvertida de código arbitrario y posiblemente malicioso.

(emacs) Custom Themes Quoth (emacs) Custom Themes :

   When you first enable a Custom theme, Emacs displays the contents of
the theme file and asks if you really want to load it.  Because loading
a Custom theme can execute arbitrary Lisp code, you should only say yes
if you know that the theme is safe; in that case, Emacs offers to
remember in the future that the theme is safe (this is done by saving
the theme file’s SHA-256 hash to the variable ‘custom-safe-themes’; if
you want to treat all themes as safe, change its value to ‘t’).  Themes
that come with Emacs (in the ‘etc/themes’ directory) are exempt from
this check, and are always considered safe.

(elisp) Custom Themes Quoth (elisp) Custom Themes :

   In theory, a theme file can also contain other Lisp forms, which
would be evaluated when loading the theme, but that is bad form.  To
protect against loading themes containing malicious code, Emacs displays
the source file and asks for confirmation from the user before loading
any non-built-in theme for the first time.

Quoth Stefan Monnier (con permiso expreso ):

¿Es esta "aversión" a la compilación de bytes de temas personalizados intencionada?

Creo que se debe a la idea de que los usuarios pueden descargar archivos de temas de lugares aleatorios sin darse cuenta de que contiene código Lisp arbitrario (al contrario de los paquetes normales de Emacs donde consideramos que los usuarios deben saber que contiene código Lisp arbitrario). Por lo tanto, solicitamos a los usuarios que confirmen que creen que el archivo de tema es seguro y que no se puede esperar que los usuarios evalúen la seguridad de un archivo .elc, por lo que insistimos en usar el archivo .el, que el usuario puede inspeccionar sin casi la misma cantidad de tiempo. mucho dolor.

A tal efecto, se ha sugerido una enmienda al manual de Elisp.

Actualizar

A partir de julio de 2018, Emacs 27 ya no se niega a cargar temas compilados por bytes que se consideran seguros. Esto se discutió en el siguiente hilo emacs-devel :

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım