Closed jaredbeck closed 6 years ago
MediaWiki 1.27, mediawiki-gateway 1.1.0, rest-client 1.8.0
Because make_api_request is written recursively, Gateway::Users#login raises SystemStackError
make_api_request
Gateway::Users#login
SystemStackError
/usr/lib/ruby/2.3.0/rexml/encoding.rb:40:in `===' /usr/lib/ruby/2.3.0/rexml/encoding.rb:40:in `find_encoding' /usr/lib/ruby/2.3.0/rexml/encoding.rb:11:in `encoding=' /usr/lib/ruby/2.3.0/rexml/source.rb:57:in `encoding=' /usr/lib/ruby/2.3.0/rexml/source.rb:143:in `detect_encoding' /usr/lib/ruby/2.3.0/rexml/source.rb:48:in `initialize' /usr/lib/ruby/2.3.0/rexml/source.rb:171:in `initialize' /usr/lib/ruby/2.3.0/rexml/source.rb:19:in `new' /usr/lib/ruby/2.3.0/rexml/source.rb:19:in `create_from' /usr/lib/ruby/2.3.0/rexml/parsers/baseparser.rb:129:in `stream=' /usr/lib/ruby/2.3.0/rexml/parsers/baseparser.rb:118:in `initialize' /usr/lib/ruby/2.3.0/rexml/parsers/treeparser.rb:10:in `new' /usr/lib/ruby/2.3.0/rexml/parsers/treeparser.rb:10:in `initialize' /usr/lib/ruby/2.3.0/rexml/document.rb:288:in `new' /usr/lib/ruby/2.3.0/rexml/document.rb:288:in `build' /usr/lib/ruby/2.3.0/rexml/document.rb:45:in `initialize' mediawiki-gateway (1.1.0) lib/media_wiki/gateway.rb:205:in `new' mediawiki-gateway (1.1.0) lib/media_wiki/gateway.rb:205:in `get_response' mediawiki-gateway (1.1.0) lib/media_wiki/gateway.rb:142:in `block in make_api_request' mediawiki-gateway (1.1.0) lib/media_wiki/gateway.rb:194:in `block in http_send' rest-client (1.8.0) lib/restclient/request.rb:493:in `process_result' rest-client (1.8.0) lib/restclient/request.rb:421:in `block in transmit' /usr/lib/ruby/2.3.0/net/http.rb:853:in `start' rest-client (1.8.0) lib/restclient/request.rb:413:in `transmit' rest-client (1.8.0) lib/restclient/request.rb:176:in `execute' rest-client (1.8.0) lib/restclient/request.rb:41:in `execute' mediawiki-gateway (1.1.0) lib/media_wiki/gateway.rb:183:in `http_send' mediawiki-gateway (1.1.0) lib/media_wiki/gateway.rb:130:in `make_api_request' mediawiki-gateway (1.1.0) lib/media_wiki/gateway.rb:156:in `block in make_api_request' mediawiki-gateway (1.1.0) lib/media_wiki/gateway.rb:194:in `block in http_send' rest-client (1.8.0) lib/restclient/request.rb:493:in `process_result' rest-client (1.8.0) lib/restclient/request.rb:421:in `block in transmit' /usr/lib/ruby/2.3.0/net/http.rb:853:in `start' rest-client (1.8.0) lib/restclient/request.rb:413:in `transmit' rest-client (1.8.0) lib/restclient/request.rb:176:in `execute' .. snip hundreds of lines .. rest-client (1.8.0) lib/restclient/request.rb:176:in `execute' rest-client (1.8.0) lib/restclient/request.rb:41:in `execute' mediawiki-gateway (1.1.0) lib/media_wiki/gateway.rb:183:in `http_send' mediawiki-gateway (1.1.0) lib/media_wiki/gateway.rb:130:in `make_api_request' mediawiki-gateway (1.1.0) lib/media_wiki/gateway.rb:156:in `block in make_api_request' mediawiki-gateway (1.1.0) lib/media_wiki/gateway.rb:194:in `block in http_send' rest-client (1.8.0) lib/restclient/request.rb:493:in `process_result' rest-client (1.8.0) lib/restclient/request.rb:421:in `block in transmit' /usr/lib/ruby/2.3.0/net/http.rb:853:in `start' rest-client (1.8.0) lib/restclient/request.rb:413:in `transmit' rest-client (1.8.0) lib/restclient/request.rb:176:in `execute' rest-client (1.8.0) lib/restclient/request.rb:41:in `execute' mediawiki-gateway (1.1.0) lib/media_wiki/gateway.rb:183:in `http_send' mediawiki-gateway (1.1.0) lib/media_wiki/gateway.rb:130:in `make_api_request' mediawiki-gateway (1.1.0) lib/media_wiki/gateway.rb:156:in `block in make_api_request' mediawiki-gateway (1.1.0) lib/media_wiki/gateway.rb:194:in `block in http_send' rest-client (1.8.0) lib/restclient/request.rb:493:in `process_result' rest-client (1.8.0) lib/restclient/request.rb:421:in `block in transmit' /usr/lib/ruby/2.3.0/net/http.rb:853:in `start' rest-client (1.8.0) lib/restclient/request.rb:413:in `transmit' rest-client (1.8.0) lib/restclient/request.rb:176:in `execute' rest-client (1.8.0) lib/restclient/request.rb:41:in `execute' mediawiki-gateway (1.1.0) lib/media_wiki/gateway.rb:183:in `http_send' mediawiki-gateway (1.1.0) lib/media_wiki/gateway.rb:130:in `make_api_request' .. snip .. rest-client (1.8.0) lib/restclient/request.rb:41:in `execute' mediawiki-gateway (1.1.0) lib/media_wiki/gateway.rb:183:in `http_send' mediawiki-gateway (1.1.0) lib/media_wiki/gateway.rb:130:in `make_api_request' mediawiki-gateway (1.1.0) lib/media_wiki/gateway.rb:156:in `block in make_api_request' mediawiki-gateway (1.1.0) lib/media_wiki/gateway.rb:194:in `block in http_send' rest-client (1.8.0) lib/restclient/request.rb:493:in `process_result' rest-client (1.8.0) lib/restclient/request.rb:421:in `block in transmit' /usr/lib/ruby/2.3.0/net/http.rb:853:in `start' rest-client (1.8.0) lib/restclient/request.rb:413:in `transmit' rest-client (1.8.0) lib/restclient/request.rb:176:in `execute' rest-client (1.8.0) lib/restclient/request.rb:41:in `execute' mediawiki-gateway (1.1.0) lib/media_wiki/gateway.rb:183:in `http_send' mediawiki-gateway (1.1.0) lib/media_wiki/gateway.rb:130:in `make_api_request' mediawiki-gateway (1.1.0) lib/media_wiki/gateway.rb:156:in `block in make_api_request' mediawiki-gateway (1.1.0) lib/media_wiki/gateway.rb:194:in `block in http_send' rest-client (1.8.0) lib/restclient/request.rb:493:in `process_result' rest-client (1.8.0) lib/restclient/request.rb:421:in `block in transmit' /usr/lib/ruby/2.3.0/net/http.rb:853:in `start' rest-client (1.8.0) lib/restclient/request.rb:413:in `transmit' rest-client (1.8.0) lib/restclient/request.rb:176:in `execute' rest-client (1.8.0) lib/restclient/request.rb:41:in `execute' mediawiki-gateway (1.1.0) lib/media_wiki/gateway.rb:183:in `http_send' mediawiki-gateway (1.1.0) lib/media_wiki/gateway.rb:130:in `make_api_request' mediawiki-gateway (1.1.0) lib/media_wiki/gateway.rb:156:in `block in make_api_request' mediawiki-gateway (1.1.0) lib/media_wiki/gateway.rb:194:in `block in http_send' rest-client (1.8.0) lib/restclient/request.rb:493:in `process_result' rest-client (1.8.0) lib/restclient/request.rb:421:in `block in transmit' /usr/lib/ruby/2.3.0/net/http.rb:853:in `start' rest-client (1.8.0) lib/restclient/request.rb:413:in `transmit' rest-client (1.8.0) lib/restclient/request.rb:176:in `execute' rest-client (1.8.0) lib/restclient/request.rb:41:in `execute' mediawiki-gateway (1.1.0) lib/media_wiki/gateway.rb:183:in `http_send' mediawiki-gateway (1.1.0) lib/media_wiki/gateway.rb:130:in `make_api_request' mediawiki-gateway (1.1.0) lib/media_wiki/gateway.rb:65:in `send_request' mediawiki-gateway (1.1.0) lib/media_wiki/gateway/users.rb:16:in `login' app/services/media_wiki/client.rb:147:in `login_as_superuser' .. snip ..
First request to login, without lgtoken. The result, as expected, is "NeedToken".
lgtoken
D, [2016-07-18T10:53:35.883288 #4493] DEBUG -- : POST: {"action"=>"login", "lgname"=>"REDACTED", "lgpassword"=>"REDACTED", "lgdomain"=>"local", "format"=>"xml", "maxlag"=>5}, {"wikia2013_8b15d14d9eb38ed8f1c89d4142cc4f4e__session"=>"ql7arf97d38uubfl7st1j60gabh1hml8", "UseCDNCache"=>"false", "UseDC"=>"master", "wikia2013_8b15d14d9eb38ed8f1c89d4142cc4f4e_LastRequestAt"=>"2016-07-18T10%3A52%3A58-05%3A00", "wikia2013_8b15d14d9eb38ed8f1c89d4142cc4f4e_UserID"=>"1", "wikia2013_8b15d14d9eb38ed8f1c89d4142cc4f4e_UserName"=>"REDACTED"} D, [2016-07-18T10:53:35.994243 #4493] DEBUG -- : RES: <api><warnings><login xml:space='preserve'>Fetching a token via action=login is deprecated. Use action=query&meta=tokens&type=login instead.</login></warnings><login cookieprefix='wikia2013_8b15d14d9eb38ed8f1c89d4142cc4f4e_' result='NeedToken' sessionid='mrtjtp8e16bv6ndas5ghf0epqq79nktf' token='4e06109b466b8b45847dc4a5d0dd6ee6578cfb7f+\'/></api> W, [2016-07-18T10:53:35.994674 #4493] WARN -- : API warning: Fetching a token via action=login is deprecated. Use action=query&meta=tokens&type=login instead.
Second request, with lgtoken. Expected result: "Success", actual result: "NeedToken"
D, [2016-07-18T10:53:35.995989 #4493] DEBUG -- : POST: {"action"=>"login", "lgname"=>"REDACTED", "lgpassword"=>"REDACTED", "lgdomain"=>"local", "format"=>"xml", "maxlag"=>5, "lgtoken"=>"4e06109b466b8b45847dc4a5d0dd6ee6578cfb7f+\\"}, {"wikia2013_8b15d14d9eb38ed8f1c89d4142cc4f4e__session"=>"mrtjtp8e16bv6ndas5ghf0epqq79nktf", "UseCDNCache"=>"false", "UseDC"=>"master", "wikia2013_8b15d14d9eb38ed8f1c89d4142cc4f4e_LastRequestAt"=>"2016-07-18T10%3A52%3A58-05%3A00", "wikia2013_8b15d14d9eb38ed8f1c89d4142cc4f4e_UserID"=>"1", "wikia2013_8b15d14d9eb38ed8f1c89d4142cc4f4e_UserName"=>"REDACTED"} D, [2016-07-18T10:53:36.084954 #4493] DEBUG -- : RES: <api><warnings><login xml:space='preserve'>Fetching a token via action=login is deprecated. Use action=query&meta=tokens&type=login instead.</login></warnings><login cookieprefix='wikia2013_8b15d14d9eb38ed8f1c89d4142cc4f4e_' result='NeedToken' sessionid='j8r84b1lr9bc7eo1ckpd5ibnbemumco5' token='46e9b025ab5f3098657ef322f00f2c58578cfb80+\'/></api> W, [2016-07-18T10:53:36.085316 #4493] WARN -- : API warning: Fetching a token via action=login is deprecated. Use action=query&meta=tokens&type=login instead.
Subsequent requests are the same as the second, with the same response.
Requests continue until the stack overflows.
Closing due to inactivity.
MediaWiki 1.27, mediawiki-gateway 1.1.0, rest-client 1.8.0
Because
make_api_request
is written recursively,Gateway::Users#login
raisesSystemStackError
Stack Trace
Log
First request to login, without
lgtoken
. The result, as expected, is "NeedToken".Second request, with
lgtoken
. Expected result: "Success", actual result: "NeedToken"Subsequent requests are the same as the second, with the same response.
Requests continue until the stack overflows.