Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

wrong type argument stringp #27

Closed
eicossa opened this issue Sep 19, 2017 · 6 comments
Closed

wrong type argument stringp #27

eicossa opened this issue Sep 19, 2017 · 6 comments

Comments

@eicossa
Copy link

eicossa commented Sep 19, 2017

Just typed "M-x mediawiki-site Wikipedia"
And I get the following debugger trace

Debugger entered--Lisp error: (wrong-type-argument stringp default)
string-match("[ \n]+\\'" default)

string-trim(default)

(concat (string-trim (if (functionp url-user-agent) (funcall url-user-agent) url-user-agent)) " mediawiki.el " mediawiki-version " \n")

(let ((url-user-agent (concat (string-trim (if (functionp url-user-agent) (funcall url-user-agent) url-user-agent)) " mediawiki.el " mediawiki-version " \n"))) (cond ((boundp (quote url-be-asynchronous)) (if callback (setq url-be-asynchronous t) (setq url-be-asynchronous nil)) (url-retrieve url t) (if (not url-be-asynchronous) (progn (let ((result ...)) result)))) (t (if callback (url-retrieve url post-process (list buffer callback cbargs)) (save-current-buffer (set-buffer (url-retrieve-synchronously url)) (funcall post-process buffer))))))

url-compat-retrieve("https://en.wikipedia.org/w/api.php" url-http-response-post-process nil nil nil) (let* ((url-request-extra-headers (if headers headers (if url-request-extra-headers (progn url-request-extra-headers)))) (boundary (int-to-string (random))) (cs (quote utf-8)) (content-type (if multipart (concat "multipart/form-data, boundary=" boundary) (format "application/x-www-form-urlencoded; charset=%s" cs))) (url-request-method "POST") (url-request-coding-system cs) (url-request-data (if multipart (mm-url-encode-multipart-form-data parameters boundary) (mm-url-encode-www-form-urlencoded (delq nil parameters))))) (mapc (function (lambda (pair) (let ((key (car pair)) (val (cdr pair))) (if (assoc key url-request-extra-headers) (setcdr (assoc key url-request-extra-headers) val) (add-to-list (quote url-request-extra-headers) (cons key val)))))) (list (cons "Connection" "close") (cons "Content-Type" content-type))) (url-compat-retrieve url url-http-post-post-process buffer callback cbargs))

url-http-post("https://en.wikipedia.org/w/api.php" (("meta" . "tokens") ("type" . "login") ("format" . "xml") ("action" . "query")))

(let* ((raw (url-http-post (mediawiki-make-api-url sitename) (append args (list (cons "format" "xml") (cons "action" action))))) (result (assoc (quote api) (let ((temp-buffer (generate-new-buffer " *temp*"))) (save-current-buffer (set-buffer temp-buffer) (unwind-protect (progn ... ...) (and ... ...))))))) (if result nil (error "There was an error parsing the result of the API call")) (mediawiki-raise result (quote warnings) (function (lambda (label info) (message "Warning (%s) %s" label info)))) (mediawiki-raise result (quote info) (function (lambda (label info) (message "(%s) %s" label info)))) (mediawiki-raise result (quote error) (function (lambda (label info) (error "(%s) %s" label info)))) (if (cdr (cdr result)) (let ((action-res (assq (intern action) (cdr (cdr result))))) (if action-res nil (error "Didn't see action name in the result list")) action-res) t))

mediawiki-api-call("Wikipedia" "query" (("meta" . "tokens") ("type" . "login"))) (cdr (mediawiki-api-call sitename "query" (list (cons "meta" "tokens") (cons "type" type)))) (cdr (cdr (mediawiki-api-call sitename "query" (list (cons "meta" "tokens") (cons "type" type))))) (car (cdr (cdr (mediawiki-api-call sitename "query" (list (cons "meta" "tokens") (cons "type" type)))))) (cdr (car (cdr (cdr (mediawiki-api-call sitename "query" (list (cons "meta" "tokens") (cons "type" type))))))) (car (cdr (car (cdr (cdr (mediawiki-api-call sitename "query" (list (cons "meta" "tokens") (cons "type" type)))))))) (car (car (cdr (car (cdr (cdr (mediawiki-api-call sitename "query" (list ... ...)))))))) (cdr (car (car (cdr (car (cdr (cdr (mediawiki-api-call sitename "query" ...))))))))

mediawiki-site-get-token("Wikipedia" "login") (let ((--cl-token-- (mediawiki-site-get-token (symbol-value (quote --cl-sitename--)) "login"))) (progn (defvar --cl-args--) (let ((--cl-args-- (list (cons "lgname" (symbol-value ...)) (cons "lgpassword" (symbol-value ...)) (if (symbol-value ...) (progn ...)) (if (symbol-value ...) (progn ...))))) (progn (defvar --cl-result--) (let ((--cl-result-- (car ...))) (progn (if (string= ... "NeedToken") (progn ...)) (if (string= "Success" ...) (progn ...)))))))) (progn (defvar --cl-token--) (let ((--cl-token-- (mediawiki-site-get-token (symbol-value (quote --cl-sitename--)) "login"))) (progn (defvar --cl-args--) (let ((--cl-args-- (list (cons "lgname" ...) (cons "lgpassword" ...) (if ... ...) (if ... ...)))) (progn (defvar --cl-result--) (let ((--cl-result-- ...)) (progn (if ... ...) (if ... ...)))))))) (let ((--cl-sitename-- sitename)) (progn (defvar --cl-token--) (let ((--cl-token-- (mediawiki-site-get-token (symbol-value (quote --cl-sitename--)) "login"))) (progn (defvar --cl-args--) (let ((--cl-args-- (list ... ... ... ...))) (progn (defvar --cl-result--) (let (...) (progn ... ...)))))))) (progn (defvar --cl-sitename--) (let ((--cl-sitename-- sitename)) (progn (defvar --cl-token--) (let ((--cl-token-- (mediawiki-site-get-token (symbol-value ...) "login"))) (progn (defvar --cl-args--) (let ((--cl-args-- ...)) (progn (defvar --cl-result--) (let ... ...)))))))) (let ((--cl-dom-- (if (symbol-value (quote --cl-dom-loaded--)) (progn (if (string= "" (symbol-value ...)) (read-string "LDAP Domain: ") (symbol-value (quote --cl-dom-loaded--))))))) (progn (defvar --cl-sitename--) (let ((--cl-sitename-- sitename)) (progn (defvar --cl-token--) (let ((--cl-token-- (mediawiki-site-get-token ... "login"))) (progn (defvar --cl-args--) (let (...) (progn ... ...)))))))) (progn (defvar --cl-dom--) (let ((--cl-dom-- (if (symbol-value (quote --cl-dom-loaded--)) (progn (if (string= "" ...) (read-string "LDAP Domain: ") (symbol-value ...)))))) (progn (defvar --cl-sitename--) (let ((--cl-sitename-- sitename)) (progn (defvar --cl-token--) (let ((--cl-token-- ...)) (progn (defvar --cl-args--) (let ... ...)))))))) (let ((--cl-dom-loaded-- (mediawiki-site-domain sitename))) (progn (defvar --cl-dom--) (let ((--cl-dom-- (if (symbol-value (quote --cl-dom-loaded--)) (progn (if ... ... ...))))) (progn (defvar --cl-sitename--) (let ((--cl-sitename-- sitename)) (progn (defvar --cl-token--) (let (...) (progn ... ...)))))))) (progn (defvar --cl-dom-loaded--) (let ((--cl-dom-loaded-- (mediawiki-site-domain sitename))) (progn (defvar --cl-dom--) (let ((--cl-dom-- (if (symbol-value ...) (progn ...)))) (progn (defvar --cl-sitename--) (let ((--cl-sitename-- sitename)) (progn (defvar --cl-token--) (let ... ...))))))))
(let ((--cl-pass-- (or (mediawiki-site-password sitename) password (read-passwd "Password: ")))) (progn (defvar --cl-dom-loaded--) (let ((--cl-dom-loaded-- (mediawiki-site-domain sitename))) (progn (defvar --cl-dom--) (let ((--cl-dom-- (if ... ...))) (progn (defvar --cl-sitename--) (let (...) (progn ... ...)))))))) (progn (defvar --cl-pass--) (let ((--cl-pass-- (or (mediawiki-site-password sitename) password (read-passwd "Password: ")))) (progn (defvar --cl-dom-loaded--) (let ((--cl-dom-loaded-- (mediawiki-site-domain sitename))) (progn (defvar --cl-dom--) (let ((--cl-dom-- ...)) (progn (defvar --cl-sitename--) (let ... ...))))))))
(let ((--cl-user-- (or (mediawiki-site-username sitename) username (read-string "Username: ")))) (progn (defvar --cl-pass--) (let ((--cl-pass-- (or (mediawiki-site-password sitename) password (read-passwd "Password: ")))) (progn (defvar --cl-dom-loaded--) (let ((--cl-dom-loaded-- (mediawiki-site-domain sitename))) (progn (defvar --cl-dom--) (let (...) (progn ... ...)))))))) (progn (defvar --cl-user--) (let ((--cl-user-- (or (mediawiki-site-username sitename) username (read-string "Username: ")))) (progn (defvar --cl-pass--) (let ((--cl-pass-- (or (mediawiki-site-password sitename) password (read-passwd "Password: ")))) (progn (defvar --cl-dom-loaded--) (let ((--cl-dom-loaded-- ...)) (progn (defvar --cl-dom--) (let ... ...))))))))

mediawiki-do-login("Wikipedia") (setq mediawiki-site (mediawiki-do-login site)) (progn (setq mediawiki-site (mediawiki-do-login site))) (if (or (eq nil mediawiki-site) (not (string-equal site mediawiki-site))) (progn (setq mediawiki-site (mediawiki-do-login site))))

mediawiki-site() funcall-interactively(mediawiki-site) call-interactively(mediawiki-site record nil)

command-execute(mediawiki-site record)
execute-extended-command(nil "mediawiki-site" "mediawiki-si") funcall-interactively(execute-extended-command nil "mediawiki-site" "mediawiki-si") call-interactively(execute-extended-command nil nil)

command-execute(execute-extended-command)

@holocronweaver
Copy link

holocronweaver commented Jul 4, 2018

I get a similar trace in Emacs 26.1.

(wrong-type-argument stringp default)
  string-match("[ \011\n\015]+\\'" default)
  url-compat-retrieve("https://192.168.1.250/holocron/api.php" url-http-response-post-process nil nil nil)
  url-http-post("https://192.168.1.250/holocron/api.php" (("meta" . "tokens") ("type" . "login") ("format" . "xml") ("action" . "query")))
  mediawiki-api-call("HolocronLocal" "query" (("meta" . "tokens") ("type" . "login")))
  mediawiki-site-get-token("HolocronLocal" "login")
  mediawiki-do-login("HolocronLocal")
  mediawiki-site()
  funcall-interactively(mediawiki-site)
  call-interactively(mediawiki-site record nil)
  command-execute(mediawiki-site record)
  helm-M-x(nil #("mediawiki-site" 0 14 (match-part "mediawiki-site")))
  funcall-interactively(helm-M-x nil #("mediawiki-site" 0 14 (match-part "mediawiki-site")))
  call-interactively(helm-M-x nil nil)
  command-execute(helm-M-x)

Edit: Looking around mediewiki.el, I was unable to find a call to string-match with a parmeter called default. Seems the stack trace is missing part of the stack.

@ecraven
Copy link

ecraven commented Aug 3, 2018

This happened to me because url-user-agent was set to default and somehow broke. Just doing something like
(setq url-user-agent "FOO")
makes things work for me.

@holocronweaver
Copy link

Solution by @ecraven worked for me! Was able to open a site with mediawiki-site, edit, and save my changes! Horray!

@JosephKiranBabu
Copy link

The solution provided by @ecraven helped me reach Wikipedia but not my self-hosted MediaWiki instance. It fails with the following error:

XML: Missing System ID

@emdash-ie
Copy link

Setting url-user-agent to an empty string allowed me to access both Wikipedia and my own MediaWiki instance.

MediaWiki expects it to be either a string or a function of no argument that returns a string (in url-compat-retrieve it calls it if it’s a function, otherwise it assumes it’s a string). This used to be true, but was changed in 2016 (this commit). Now url-user-agent has four possibilities, and defaults to the symbol 'default, giving this error.

A simple update (as far as I can see) would be for mediawiki to ignore the variable if it’s neither a function nor a string.

@hexmode
Copy link
Owner

hexmode commented Jul 7, 2020

This is fixed.

@hexmode hexmode closed this as completed Jul 7, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

6 participants