<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
</head>
<body>
<p>Hi all,</p>
<p>I got this crash report from the server at k.sfconservancy.org
over the weekend, and the comment in the last line jumped out at
me. It sounds like there's a situation where the code assumes a
list can't be empty, but in fact it can be. The full details are
below, except I've removed bits that just reveal too much about
our server setup or the visitor.</p>
<p>You're welcome to browse around or clone the repository if it
helps you debug the problem; it's all public.<br>
</p>
<p><br>
</p>
<div class="moz-forward-container">
<pre>TRACEBACK:</pre>
<pre>Traceback (most recent call last):</pre>
<pre> File "/usr/local/src/kallithea/lib/python3.7/site-packages/tg/appwrappers/session.py", line 71, in __call__</pre>
<pre> response = self.next_handler(controller, environ, context)</pre>
<pre> File "/usr/local/src/kallithea/lib/python3.7/site-packages/tg/appwrappers/i18n.py", line 71, in __call__</pre>
<pre> return self.next_handler(controller, environ, context)</pre>
<pre> File "/usr/local/src/kallithea/lib/python3.7/site-packages/tg/wsgiapp.py", line 243, in _dispatch</pre>
<pre> return controller(environ, context)</pre>
<pre> File "/usr/local/src/kallithea/lib/python3.7/site-packages/kallithea/lib/base.py", line 536, in __call__</pre>
<pre> return super(BaseController, self).__call__(environ, context)</pre>
<pre> File "/usr/local/src/kallithea/lib/python3.7/site-packages/tg/controllers/dispatcher.py", line 118, in __call__</pre>
<pre> response = self._perform_call(context)</pre>
<pre> File "/usr/local/src/kallithea/lib/python3.7/site-packages/tg/controllers/dispatcher.py", line 107, in _perform_call</pre>
<pre> r = self._call(action, params, remainder=remainder, context=context)</pre>
<pre> File "/usr/local/src/kallithea/lib/python3.7/site-packages/tg/controllers/decoratedcontroller.py", line 129, in _call</pre>
<pre> output = controller_caller(context_config, bound_controller_callable, remainder, params)</pre>
<pre> File "/usr/local/src/kallithea/lib/python3.7/site-packages/tg/controllers/decoration.py", line 21, in _decorated_controller_caller</pre>
<pre> return application_controller_caller(tg_config, controller, remainder, params)</pre>
<pre> File "/usr/local/src/kallithea/lib/python3.7/site-packages/tg/configurator/components/dispatch.py", line 114, in _call_controller</pre>
<pre> return controller(*remainder, **params)</pre>
<pre> File "<decorator-gen-4>", line 2, in index</pre>
<pre> File "/usr/local/src/kallithea/lib/python3.7/site-packages/kallithea/lib/auth.py", line 608, in __wrapper</pre>
<pre> return func(*fargs, **fkwargs)</pre>
<pre> File "<decorator-gen-3>", line 2, in index</pre>
<pre> File "/usr/local/src/kallithea/lib/python3.7/site-packages/kallithea/lib/auth.py", line 657, in __wrapper</pre>
<pre> return func(*fargs, **fkwargs)</pre>
<pre> File "/usr/local/src/kallithea/lib/python3.7/site-packages/kallithea/controllers/changelog.py", line 148, in index</pre>
<pre> c.first_revision = c.cs_pagination[0] # pagination is never empty here!</pre>
<pre>IndexError: list index out of range</pre>
<pre>
</pre>
<pre>ENVIRON:</pre>
<pre> HTTP_ACCEPT: '*/*'</pre>
<pre> HTTP_ACCEPT_CHARSET: 'utf-8;q=0.7,iso-8859-1;q=0.2,*;q=0.1'</pre>
<pre> HTTP_CONNECTION: 'Keep-Alive'</pre>
<pre> HTTP_HOST: 'k.sfconservancy.org'</pre>
<pre> HTTP_USER_AGENT: 'Mozilla/5.0 (compatible; DotBot/1.1; <a class="moz-txt-link-freetext" href="http://www.opensiteexplorer.org/dotbot">http://www.opensiteexplorer.org/dotbot</a>, <a class="moz-txt-link-abbreviated" href="mailto:help@moz.com">help@moz.com</a>)</pre>
<pre> PATH_INFO: '/website/changelog/49c5bca7430b19dd09e0e12d2b908b86d278d325/www/conservancy/static/supporter/index.html'</pre>
<pre> QUERY_STRING: 'page=2'</pre>
<pre> REQUEST_METHOD: 'GET'</pre>
<pre> SCRIPT_NAME: ''</pre>
<pre> SERVER_PROTOCOL: 'HTTP/1.1'</pre>
<pre> SERVER_SOFTWARE: 'waitress'</pre>
<pre>
</pre>
<pre>WSGI:</pre>
<pre> beaker.session: {'_domain': None, '_path': '/', '_accessed_time': 1612166635.5476, '_creation_time': 1612166635.5476}</pre>
<pre> pylons.routes_dict: {'repo_name': 'website', 'revision': '49c5bca7430b19dd09e0e12d2b908b86d278d325', 'f_path': 'www/conservancy/static/supporter/index.html', 'action': 'index', 'controller': 'changelog'}</pre>
<pre> tg.routes_dict: {'repo_name': 'website', 'revision': '49c5bca7430b19dd09e0e12d2b908b86d278d325', 'f_path': 'www/conservancy/static/supporter/index.html', 'action': 'index', 'controller': 'changelog'}</pre>
<pre> webob._parsed_query_vars: (GET([('page', '2')]), 'page=2')</pre>
<pre> webob.adhoc_attrs: {'authuser': <AuthUser 1: 'default'>, 'ip_addr': '[redacted]', 'needs_csrf_check': False, 'routes_local': {'mapper': <kallithea.config.routing.Mapper object at 0x7f5d38459390>, 'host': 'k.sfconservancy.org', 'protocol': 'https', 'redirect': <function redirect at 0x7f5d3aff8b70>}}</pre>
<pre> wsgi.input_terminated: True</pre>
<pre> wsgi.multiprocess: False</pre>
<pre> wsgi.multithread: True</pre>
<pre> wsgi.run_once: False</pre>
<pre> wsgi.url_scheme: 'https'</pre>
<pre> wsgi.version: (1, 0)</pre>
<pre> wsgiorg.routing_args: (<routes.util.URLGenerator object at 0x7f5d306a8668>, {'repo_name': 'website', 'revision': '49c5bca7430b19dd09e0e12d2b908b86d278d325', 'f_path': 'www/conservancy/static/supporter/index.html', 'action': 'index', 'controller': 'changelog'})</pre>
<pre>
</pre>
<pre>REQUEST:</pre>
<pre> <Request at 0x7f5d30575cf8 GET <a class="moz-txt-link-freetext" href="https://k.sfconservancy.org/error/document?page=2">https://k.sfconservancy.org/error/document?page=2</a>></pre>
</div>
</body>
</html>