jpatokal / mediawiki-gateway

Ruby framework for MediaWiki API manipulation
Other
133 stars 50 forks source link

SystemStackError: stack level too deep #95

Closed jaredbeck closed 6 years ago

jaredbeck commented 8 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

Stack Trace

 /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 ..

Log

First request to login, without lgtoken. The result, as expected, is "NeedToken".

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&amp;meta=tokens&amp;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&amp;meta=tokens&amp;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.

jaredbeck commented 6 years ago

Closing due to inactivity.