mhayashi1120 / Emacs-langtool

LanguageTool for Emacs
GNU General Public License v3.0
377 stars 31 forks source link

Can't check text that contains percent characters (%) #73

Open cabo opened 3 months ago

cabo commented 3 months ago

When checking text (langtool-check) that contains one or more percent characters (%), I get:

Error: Could not decode query. Query length: 63296 Request method: POST

Tested with languagetool-server from LanguageTool 6.0 via HTTP (obviously). Server-side log:

2024-06-13 21:00:42.266 +0200 INFO  org.languagetool.server.LanguageToolHttpHandler Handling POST /v2/check
2024-06-13 21:00:42.278 +0200 INFO  org.languagetool.server.LanguageToolHttpHandler An error has occurred: 'Could not decode query. Query length: 63296 Request method: POST', sending HTTP code 400. Access from 127.0.0.1, HTTP user agent: null, User agent param: null, Referrer: null, language: null, h: 1, r: 77, time: 9m: ALL, l: DEFAULT, Stacktrace follows:org.languagetool.server.BadRequestException: Could not decode query. Query length: 63296 Request method: POST
    at org.languagetool.server.LanguageToolHttpHandler.getParameterMap(LanguageToolHttpHandler.java:454)
    at org.languagetool.server.LanguageToolHttpHandler.getRequestQuery(LanguageToolHttpHandler.java:401)
...

Apparently, something is amiss with percent-encoding.

langtool 20230222.326 installed

cabo commented 2 months ago

Hacking lisp/url-util.el to say


(defconst url-path-allowed-chars
  (let ((vec (copy-sequence url-host-allowed-chars)))
    (aset vec ?/ t)
    (aset vec ?: t)
    (aset vec ?@ t)
    (aset vec ?% nil)
    vec)
  "Allowed-character byte mask for the path segment of a URI.
These characters are specified in RFC 3986, Appendix A.")

(the (aset vec ?% nil) is new) fixes this for me. Are you maybe using url-build-query-string in an unexpected way?