unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#24365: 24.4; [PATCH] url-http-options fails when connection refused
@ 2016-09-04  8:15 Mark Schreiber
  2017-12-06 10:47 ` Noam Postavsky
  0 siblings, 1 reply; 2+ messages in thread
From: Mark Schreiber @ 2016-09-04  8:15 UTC (permalink / raw)
  To: 24365

url-http-options fails when a web server refuses its connection.

Evaluating (url-http-options "http://127.0.0.1:33333/") results in the
following error:

Debugger entered--Lisp error: (wrong-type-argument number-or-marker-p nil)
  url-http-options("http://127.0.0.1:33333/")
  eval((url-http-options "http://127.0.0.1:33333/") nil)
  elisp--eval-last-sexp(nil)
  eval-last-sexp(nil)
  funcall-interactively(eval-last-sexp nil)
  call-interactively(eval-last-sexp nil nil)
  command-execute(eval-last-sexp)

In my case, this caused the third-party package org-caldav to fail with
this error when M-x org-caldav-sync was invoked and given an incorrect
org-caldav-url.

I believe that the correct behavior would be to have url-http-options
return nil, which is the behavior of that function when it receives an
HTTP error response.

The issue is still present in master.  The following patch against
master causes url-http-options to return nil in the above case.
---
url-http-options would fail internally when passed an URL to a
web server refusing the connection.  Change its behavior to return nil,
as would occur if an HTTP error code were received.

* lisp/url/url-http.el (url-http-options)

Copyright-paperwork-exempt: yes
---
 lisp/url/url-http.el | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/lisp/url/url-http.el b/lisp/url/url-http.el
index 927d0bb..e55b645 100644
--- a/lisp/url/url-http.el
+++ b/lisp/url/url-http.el
@@ -1512,10 +1512,11 @@ url-http-options
   (let* ((url-request-method "OPTIONS")
 	 (url-request-data nil)
 	 (buffer (url-retrieve-synchronously url))
+         (response-status (when buffer (url-http-symbol-value-in-buffer
+                                        'url-http-response-status buffer 0)))
 	 (header nil)
 	 (options nil))
-    (when (and buffer (= 2 (/ (url-http-symbol-value-in-buffer
-			       'url-http-response-status buffer 0) 100)))
+    (when (and response-status (= 2 (/ response-status 100)))
       ;; Only parse the options if we got a 2xx response code!
       (with-current-buffer buffer
 	(save-restriction
-- 
2.1.4






^ permalink raw reply related	[flat|nested] 2+ messages in thread

* bug#24365: 24.4; [PATCH] url-http-options fails when connection refused
  2016-09-04  8:15 bug#24365: 24.4; [PATCH] url-http-options fails when connection refused Mark Schreiber
@ 2017-12-06 10:47 ` Noam Postavsky
  0 siblings, 0 replies; 2+ messages in thread
From: Noam Postavsky @ 2017-12-06 10:47 UTC (permalink / raw)
  To: Mark Schreiber; +Cc: 24365

found 24365 25.3
quit

Mark Schreiber <mark7@alumni.cmu.edu> writes:

> url-http-options fails when a web server refuses its connection.
>
> Evaluating (url-http-options "http://127.0.0.1:33333/") results in the
> following error:
>
> Debugger entered--Lisp error: (wrong-type-argument number-or-marker-p nil)
>   url-http-options("http://127.0.0.1:33333/")

In emacs-26, I get a "Connection refused" error, which seems reasonable.

Debugger entered--Lisp error: (file-error "make client process failed" "Connection refused" :name "127.0.0.1" :buffer #<buffer  *url-http-temp*> :host "127.0.0.1" :service 33333 :nowait nil :tls-parameters nil)
  make-network-process(:name "127.0.0.1" :buffer #<buffer  *url-http-temp*> :host "127.0.0.1" :service 33333 :nowait nil :tls-parameters nil)
  open-network-stream("127.0.0.1" #<buffer  *url-http-temp*> "127.0.0.1" 33333 :type plain :nowait nil)
  url-open-stream("127.0.0.1" #<buffer  *url-http-temp*> "127.0.0.1" 33333 nil)
  url-http-find-free-connection("127.0.0.1" 33333 nil)
  url-http(#s(url :type "http" :user nil :password nil :host "127.0.0.1" :portspec 33333 :filename "/" :target nil :attributes nil :fullness t :silent nil :use-cookies t :asynchronous nil) #f(compiled-function (&rest ignored) #<bytecode 0x5a532d>) (nil))
  url-retrieve-internal("http://127.0.0.1:33333/" #f(compiled-function (&rest ignored) #<bytecode 0x5a532d>) (nil) nil nil)
  url-retrieve("http://127.0.0.1:33333/" #f(compiled-function (&rest ignored) #<bytecode 0x5a532d>) nil nil nil)
  url-retrieve-synchronously("http://127.0.0.1:33333/")
  url-http-options("http://127.0.0.1:33333/")

> In my case, this caused the third-party package org-caldav to fail with
> this error when M-x org-caldav-sync was invoked and given an incorrect
> org-caldav-url.
>
> I believe that the correct behavior would be to have url-http-options
> return nil, which is the behavior of that function when it receives an
> HTTP error response.

The error which is thrown in emacs-26 would make it clear that you need
to correct the url, so I think we should leave it as is.





^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2017-12-06 10:47 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-09-04  8:15 bug#24365: 24.4; [PATCH] url-http-options fails when connection refused Mark Schreiber
2017-12-06 10:47 ` Noam Postavsky

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).