26.2 把旧 BUG 激活了

BUG 报告在这里:#23225 - 25.1.50; url-retrieve-synchronously having trouble with some https URLs - GNU bug report logs

GNU bug report logs - #23225
25.1.50; url-retrieve-synchronously having trouble with some https URLs

Previous Next

Package: emacs;

Reported by: joaotavora gmail.com (João Távora)

Date: Tue, 5 Apr 2016 18:31:01 UTC

以下是我的测试:

#+BEGIN_SRC sh :results output :async
elisp="\
(progn
  (require 'gnutls)
  (add-to-list 'gnutls-trustfiles \"/usr/local/etc/libressl/cert.pem\")
  (with-current-buffer
      (url-retrieve-synchronously
       \"https://codeload.github.com/emacs-china/org-mode/zip/release_9.1.5\")
    (princ (format \"[%s.%s] buffer-size: %s\n\" emacs-major-version emacs-minor-version (buffer-size)))))"

/Applications/Emacs-25.2.app/Contents/MacOS/Emacs    --batch --eval "$elisp"
/Applications/Emacs-25.3.1.app/Contents/MacOS/Emacs  --batch --eval "$elisp"
/Applications/Emacs-26.1.app/Contents/MacOS/Emacs    --batch --eval "$elisp"
/Applications/Emacs-26.2.app/Contents/MacOS/Emacs    --batch --eval "$elisp"
/Applications/Emacs-Nightly.app/Contents/MacOS/Emacs --batch --eval "$elisp"
#+END_SRC

#+RESULTS:
: [25.2] buffer-size: 2757877
: [25.3] buffer-size: 2757877
: [26.1] buffer-size: 2757877
: [26.2] buffer-size: 0
: [27.0] buffer-size: 2757877

(我手上没有报告中提到的 25.1.50,应该是 rc 之前的每夜版本)

不了解 TLS、SSL,不知道是否需要特别的条件触发。我的 26.2 访问这个 URL 没问题:

(with-current-buffer
    (url-retrieve-synchronously
     "https://codeload.github.com/emacs-china/org-mode/zip/release_9.1.5")
  (buffer-size))
;; => 2757898

(emacs-version)
;; =>
"GNU Emacs 26.2 (build 1, x86_64-apple-darwin18.5.0, Carbon Version 158 AppKit 1671.4)
 of 2019-04-20"

我这边去掉 gnutls 相关配置也是同样的结果,26.2 的 buffer size 依然为 0。

我是从 Emacs For Mac OS X: Releases, Pretests & Nightlies 下载的二进制文件,网站上也提供 build 当时的源代码快照,我用相同的源代码编译试试看结果如何。

问题可能 Emacs For Mac OS X: Releases, Pretests & Nightlies 当时所采用 libgnutls 版本有关,我在 linux 服务器上,用同一份代码,分别 ./configure./configure --with-gnutls=no 编译测试,均无问题。


UPDATE

我在 macOS 下也自行编译了 Emacs 26.2,还真是有问题:

⋊> [~/s/b/emacs-26.2] ./src/emacs \
                           --batch \
                           -f toggle-debug-on-error \
                           --eval \
                       "(with-current-buffer
                           (url-retrieve-synchronously
                            \"https://codeload.github.com/emacs-china/org-mode/zip/release_9.1.5\")
                         (princ (format \"buffer-size: %s\" (buffer-size))))"
Debug on Error enabled globally
Contacting host: codeload.github.com:443
buffer-size: 0

有问题但不报错,让人无从分析。

和forge-pull出错的那个问题一样吗?

不确定。

url-retrieve-synchronously 读不到内容,同样都表现为 “missing header",但背后的原因有可能不同。

我这边应该是 Gnu TLS 出了问题。

果然,也是这个问题!

应该是同一个问题,现在ghub,forge使用都有问题。

编译选项不选择gnutls就可以了,多谢楼主分享!

gnutls 是默认选项,要显式地禁止才可以