Page MenuHomePhabricator

Parsoid error pages use excessive HTML entity encoding
Closed, ResolvedPublic

Description

Steps to reproduce:

  • set up Vagrant with the restbase role (I have seen this on a labs-vagrant instance; not sure if that matters)
  • break restbase (in my case all the MediaWiki API URLs pointed to an invalid location)
  • make a request to RESTBase
$ curl -v 'http://localhost:8000/proton-staging.wmflabs.org/v3/page/html/Book/10'
* Hostname was NOT found in DNS cache
*   Trying ::1...
* Connected to localhost (::1) port 8000 (#0)
> GET /proton-staging.wmflabs.org/v3/page/html/Book/10 HTTP/1.1
> User-Agent: curl/7.38.0
> Host: localhost:8000
> Accept: */*
> 
< HTTP/1.1 500 Internal Server Error
< X-Powered-By: Express
< Access-Control-Allow-Origin: *
< Content-Type: text/html; charset=utf-8
< Content-Length: 5880
< ETag: W/"16f8-V/HhFrWKh3C/ucTblD4yFl81Wn4"
< Vary: Accept-Encoding
< Date: Tue, 05 Sep 2017 22:57:09 GMT
< Connection: keep-alive
< 
&#x65;&#x72;&#x72;&#x6F;&#x72;&#x3A;&#x20;&#x43;&#x6F;&#x6E;&#x66;&#x69;&#x67;&#x20;&#x52;&#x65;&#x71;&#x75;&#x65;&#x73;&#x74;&#x20;&#x66;&#x61;&#x69;&#x6C;&#x75;&#x72;&#x65;&#x20;&#x66;&#x6F;&#x72;&#x20;&#x22;&#x68;&#x74;&#x74;&#x70;&#x3A;&#x2F;&#x2F;&#x6C;&#x6F;&#x63;&#x61;&#x6C;&#x68;&#x6F;&#x73;&#x74;&#x2F;&#x77;&#x2F;&#x61;&#x70;&#x69;&#x2E;&#x70;&#x68;&#x70;&#x22;&#x3A;&#x20;&#x45;&#x72;&#x72;&#x6F;&#x72;&#x3A;&#x20;&#x63;&#x6F;&#x6E;&#x6E;&#x65;&#x63;&#x74;&#x20;&#x45;&#x43;&#x4F;&#x4E;&#x4E;&#x52;&#x45;&#x46;&#x55;&#x53;&#x45;&#x44;&#x20;&#x31;&#x32;&#x37;&#x2E;&#x30;&#x2E;&#x30;&#x2E;&#x31;&#x3A;&#x38;&#x30;&#x20;&#x70;&#x61;&#x74;&#x68;&#x3A;&#x20;&#x2F;&#x70;&#x72;&#x6F;&#x74;&#x6F;&#x6E;&#x2D;&#x73;&#x74;&#x61;&#x67;&#x69;&#x6E;&#x67;&#x2E;&#x77;&#x6D;&#x66;&#x6C;&#x61;&#x62;&#x73;&#x2E;&#x6F;&#x72;&#x67;&#x2F;&#x76;&#x33;&#x2F;&#x70;&#x61;&#x67;&#x65;&#x2F;&#x68;&#x74;&#x6D;&#x6C;&#x2F;&#x42;&#x6F;&#x6F;&#x6B;&#x2F;&#x31;&#x30;&#x0A;&#x70;&#x61;&#x72;&#x73;&#x6F;&#x69;&#x64;&#x3A;&#x20;&#x43;&#x6F;&#x6E;&#x66;&#x69;&#x67;&#x20;&#x52;&#x65;&#x71;&#x75;&#x65;&#x73;&#x74;&#x20;&#x66;&#x61;&#x69;&#x6C;&#x75;&#x72;&#x65;&#x20;&#x66;&#x6F;&#x72;&#x20;&#x22;&#x68;&#x74;&#x74;&#x70;&#x3A;&#x2F;&#x2F;&#x6C;&#x6F;&#x63;&#x61;&#x6C;&#x68;&#x6F;&#x73;&#x74;&#x2F;&#x77;&#x2F;&#x61;&#x70;&#x69;&#x2E;&#x70;&#x68;&#x70;&#x22;&#x3A;&#x20;&#x45;&#x72;&#x72;&#x6F;&#x72;&#x3A;&#x20;&#x63;&#x6F;&#x6E;&#x6E;&#x65;&#x63;&#x74;&#x20;&#x45;&#x43;&#x4F;&#x4E;&#x4E;&#x52;&#x45;&#x46;&#x55;&#x53;&#x45;&#x44;&#x20;&#x31;&#x32;&#x37;&#x2E;&#x30;&#x2E;&#x30;&#x2E;&#x31;&#x3A;&#x38;&#x30;&#x0A;&#x20;&#x20;&#x20;&#x20;&#x61;&#x74;&#x20;&#x43;&#x6F;&#x6E;&#x66;&#x69;&#x67;&#x52;&#x65;&#x71;&#x75;&#x65;&#x73;&#x74;&#x2E;&#x41;&#x70;&#x69;&#x52;&#x65;&#x71;&#x75;&#x65;&#x73;&#x74;&#x2E;&#x5F;&#x72;&#x65;&#x71;&#x75;&#x65;&#x73;&#x74;&#x43;&#x42;&#x20;&#x28;&#x2F;&#x76;&#x61;&#x67;&#x72;&#x61;&#x6E;&#x74;&#x2F;&#x73;&#x72;&#x76;&#x2F;&#x70;&#x61;&#x72;&#x73;&#x6F;&#x69;&#x64;&#x2F;&#x6C;&#x69;&#x62;&#x2F;&#x6D;&#x77;&#x2F;&#x41;&#x70;&#x69;&#x52;&#x65;&#x71;&#x75;&#x65;&#x73;&#x74;&#x2E;&#x6A;&#x73;&#x3A;&#x34;&#x31;&#x35;&#x3A;&#x31;&#x35;&#x29;&#x0A;&#x20;&#x20;&#x20;&#x20;&#x61;&#x74;&#x20;&#x73;&#x65;&#x6C;&#x66;&#x2E;&#x63;&#x61;&#x6C;&#x6C;&#x62;&#x61;&#x63;&#x6B;&#x20;&#x28;&#x2F;&#x76;&#x61;&#x67;&#x72;&#x61;&#x6E;&#x74;&#x2F;&#x73;&#x72;&#x76;&#x2F;&#x70;&#x61;&#x72;&#x73;&#x6F;&#x69;&#x64;&#x2F;&#x6E;&#x6F;&#x64;&#x65;&#x5F;&#x6D;&#x6F;&#x64;&#x75;&#x6C;&#x65;&#x73;&#x2F;&#x72;&#x65;&#x71;&#x75;&#x65;&#x73;&#x74;&#x2F;&#x72;&#x65;&#x71;&#x75;&#x65;&#x73;&#x74;&#x2E;&#x6A;&#x73;&#x3A;&#x31;&#x38;&#x38;&#x3A;&#x32;&#x32;&#x29;&#x0A;&#x20;&#x20;&#x20;&#x20;&#x61;&#x74;&#x20;&#x65;&#x6D;&#x69;&#x74;&#x4F;&#x6E;&#x65;&#x20;&#x28;&#x65;&#x76;&#x65;&#x6E;&#x74;&#x73;&#x2E;&#x6A;&#x73;&#x3A;&#x39;&#x36;&#x3A;&#x31;&#x33;&#x29;&#x0A;&#x20;&#x20;&#x20;&#x20;&#x61;&#x74;&#x20;&#x52;&#x65;&#x71;&#x75;&#x65;&#x73;&#x74;&#x2E;&#x65;&#x6D;&#x69;&#x74;&#x20;&#x28;&#x65;&#x76;&#x65;&#x6E;&#x74;&#x73;&#x2E;&#x6A;&#x73;&#x3A;&#x31;&#x38;&#x38;&#x3A;&#x37;&#x29;&#x0A;&#x20;&#x20;&#x20;&#x20;&#x61;&#x74;&#x20;&#x52;&#x65;&#x71;&#x75;&#x65;&#x73;&#x74;&#x2E;&#x6F;&#x6E;&#x52;&#x65;&#x71;&#x75;&#x65;&#x73;&#x74;&#x45;&#x72;&#x72;&#x6F;&#x72;&#x20;&#x28;&#x2F;&#x76;&#x61;&#x67;&#x72;&#x61;&#x6E;&#x74;&#x2F;&#x73;&#x72;&#x76;&#x2F;&#x70;&#x61;&#x72;&#x73;&#x6F;&#x69;&#x64;&#x2F;&#x6E;&#x6F;&#x64;&#x65;&#x5F;&#x6D;&#x6F;&#x64;&#x75;&#x6C;&#x65;&#x73;&#x2F;&#x72;&#x65;&#x71;&#x75;&#x65;&#x73;&#x74;&#x2F;&#x72;&#x65;&#x71;&#x75;&#x65;&#x73;&#x74;&#x2E;&#x6A;&#x73;&#x3A;&#x38;&#x38;&#x34;&#x3A;&#x38;&#x29;&#x0A;&#x20;&#x20;&#x20;&#x20;&#x61;&#x74;&#x20;&#x65;&#x6D;&#x69;&#x74;&#x4F;&#x6E;&#x65;&#x20;&#x28;&#x65;&#x76;&#x65;&#x6E;&#x74;&#x73;&#x2E;&#x6A;&#x73;&#x3A;&#x31;&#x30;&#x31;&#x3A;&#x32;&#x30;&#x29;&#x0A;&#x20;&#x20;&#x20;&#x20;&#x61;&#x74;&#x20;&#x43;&#x6C;&#x69;&#x65;&#x6E;&#x74;&#x52;&#x65;&#x71;&#x75;&#x65;&#x73;&#x74;&#x2E;&#x65;&#x6D;&#x69;&#x74;&#x20;&#x28;&#x65;&#x76;&#x65;&#x6E;&#x74;&#x73;&#x2E;&#x6A;&#x73;&#x3A;&#x31;&#x38;&#x38;&#x3A;&#x37;&#x29;&#x0A;&#x20;&#x20;&#x20;&#x20;&#x61;&#x74;&#x20;&#x53;&#x6F;&#x63;&#x6B;&#x65;&#x74;&#x2E;&#x73;&#x6F;&#x63;&#x6B;&#x65;&#x74;&#x45;&#x72;&#x72;&#x6F;&#x72;&#x4C;&#x69;&#x73;&#x74;&#x65;&#x6E;&#x65;&#x72;&#x20;&#x28;&#x5F;&#x68;&#x74;&#x74;&#x70;&#x5F;&#x63;&#x6C;&#x69;&#x65;&#x6E;&#x74;&#x2E;&#x6A;&#x73;&#x3A;&#x33;&#x31;&#x30;&#x3A;&#x39;&#x29;&#x0A;&#x20;&#x20;&#x20;&#x20;&#x61;&#x74;&#x20;&#x65;&#x6D;&#x69;&#x74;&#x4F;&#x6E;&#x65;&#x20;&#x28;&#x65;&#x76;&#x65;&#x6E;&#x74;&#x73;&#x2E;&#x6A;&#x73;&#x3A;&#x39;&#x36;&#x3A;&#x31;&#x33;&#x29;&#x0A;&#x20;&#x20;&#x20;&#x20;&#x61;&#x74;&#x20;&#x53;&#x6F;&#x63;&#x6B;&#x65;&#x74;&#x2E;&#x65;&#x6D;&#x69;&#x74;&#x20;&#x28;&#x65;&#x76;&#x65;&#x6E;&#x74;&#x73;&#x2E;&#x6A;&#x73;&#x3A;&#x31;&#x38;&#x38;&#x3A;&#x37;&#x29;&#x0A;&#x20;&#x20;&#x20;&#x20;&#x61;&#x74;&#x20;&#x65;&#x6D;&#x69;&#x74;&#x45;&#x72;&#x72;&#x6F;&#x72;&#x4E;&#x54;&#x20;&#x28;&#x6E;&#x65;&#x74;&#x2E;&#x6A;&#x73;&#x3A;&#x31;&#x32;&#x37;&#x37;&#x3A;&#x38;&#x29;&#x0A;&#x20;&#x20;&#x20;&#x20;&#x61;&#x74;&#* Connection #0 to host localhost left intact
x20;&#x5F;&#x63;&#x6F;&#x6D;&#x62;&#x69;&#x6E;&#x65;&#x64;&#x54;&#x69;&#x63;&#x6B;&#x43;&#x61;&#x6C;&#x6C;&#x62;&#x61;&#x63;&#x6B;&#x20;&#x28;&#x69;&#x6E;&#x74;&#x65;&#x72;&#x6E;&#x61;&#x6C;&#x2F;&#x70;&#x72;&#x6F;&#x63;&#x65;&#x73;&#x73;&#x2F;&#x6E;&#x65;&#x78;&#x74;&#x5F;&#x74;&#x69;&#x63;&#x6B;&#x2E;&#x6A;&#x73;&#x3A;&#x38;&#x30;&#x3A;&#x31;&#x31;&#x29;&#x0A;&#x20;&#x20;&#x20;&#x20;&#x61;&#x74;&#x20;&#x70;&#x72;&#x6F;&#x63;&#x65;&#x73;&#x73;&#x2E;&#x5F;&#x74;&#x69;&#x63;&#x6B;&#x43;&#x61;&#x6C;&#x6C;&#x62;&#x61;&#x63;&#x6B;&#x20;&#x28;&#x69;&#x6E;&#x74;&#x65;&#x72;&#x6E;&#x61;&#x6C;&#x2F;&#x70;&#x72;&#x6F;&#x63;&#x65;&#x73;&#x73;&#x2F;&#x6E;&#x65;&#x78;&#x74;&#x5F;&#x74;&#x69;&#x63;&#x6B;&#x2E;&#x6A;&#x73;&#x3A;&#x31;&#x30;&#x34;&#x3A;&#x39;&#x29;

The decoded text is

error: Config Request failure for "http://localhost/w/api.php": Error: connect ECONNREFUSED 127.0.0.1:80 path: /proton-staging.wmflabs.org/v3/page/html/Book/10
parsoid: Config Request failure for "http://localhost/w/api.php": Error: connect ECONNREFUSED 127.0.0.1:80
    at ConfigRequest.ApiRequest._requestCB (/vagrant/srv/parsoid/lib/mw/ApiRequest.js:415:15)
    at self.callback (/vagrant/srv/parsoid/node_modules/request/request.js:188:22)
    at emitOne (events.js:96:13)
    at Request.emit (events.js:188:7)
    at Request.onRequestError (/vagrant/srv/parsoid/node_modules/request/request.js:884:8)
    at emitOne (events.js:101:20)
    at ClientRequest.emit (events.js:188:7)
    at Socket.socketErrorListener (_http_client.js:310:9)
    at emitOne (events.js:96:13)
    at Socket.emit (events.js:188:7)
    at emitErrorNT (net.js:1277:8)
    at _combinedTickCallback (internal/process/next_tick.js:80:11)
    at process._tickCallback (internal/process/next_tick.js:104:9)

which would presumable show up in a browser. The HTML encoding is pretty annoying when using curl, though.

Event Timeline

@Tgr http://localhost:8000/proton-staging.wmflabs.org/v3/page/html/Book/10 doesn't look like RESTBase URI, we don't have /v3 in the API, so it seems you're talking directly to Parsoid so it's a parsed issue.

This was because of https://gerrit.wikimedia.org/r/#/c/319115/ -- but that could potentially be refined.

It would be nice if used proper html escaping (encode <>&"' and nothing else).

Change 376346 had a related patch set uploaded (by Arlolra; owner: Arlolra):
[mediawiki/services/parsoid@master] T175101: Remove excessive HTML entity encoding

https://gerrit.wikimedia.org/r/376346

Change 376346 merged by jenkins-bot:
[mediawiki/services/parsoid@master] T175101: Remove excessive HTML entity encoding

https://gerrit.wikimedia.org/r/376346

ssastry renamed this task from RESTBase error pages use excessive HTML entity encoding to Parsoid error pages use excessive HTML entity encoding.Sep 6 2017, 9:26 PM
ssastry assigned this task to Arlolra.
ssastry triaged this task as Medium priority.