View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0005313 | Taler | obsolete component | public | 2018-03-27 18:10 | 2019-12-20 19:12 |
Reporter | Torsten Grothoff | Assigned To | Marcello Stanisci | ||
Priority | immediate | Severity | major | Reproducibility | always |
Status | closed | Resolution | fixed | ||
Product Version | git (master) | ||||
Target Version | 0.6 | Fixed in Version | 0.6 | ||
Summary | 0005313: Bad error handling // Info exposing error when giving account transfer an Intiger overflow | ||||
Description | See attatched file. Change format of Exposes: 1.User Running the server on the server's machine 2.Exact File location of the server's Weak spot(where the error lies) | ||||
Steps To Reproduce | Give the value of Kudos when transfering to another account an intiger overflow | ||||
Tags | No tags attached. | ||||
Attached Files | Intiger overflow(Input field) Gives an error that should look different.html (77,612 bytes)
<!DOCTYPE html> <html lang="en"><head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <meta name="robots" content="NONE,NOARCHIVE"> <title>AttributeError at /profile</title> <style type="text/css"> html * { padding:0; margin:0; } body * { padding:10px 20px; } body * * { padding:0; } body { font:small sans-serif; background-color:#fff; color:#000; } body>div { border-bottom:1px solid #ddd; } h1 { font-weight:normal; } h2 { margin-bottom:.8em; } h2 span { font-size:80%; color:#666; font-weight:normal; } h3 { margin:1em 0 .5em 0; } h4 { margin:0 0 .5em 0; font-weight: normal; } code, pre { font-size: 100%; white-space: pre-wrap; } table { border:1px solid #ccc; border-collapse: collapse; width:100%; background:white; } tbody td, tbody th { vertical-align:top; padding:2px 3px; } thead th { padding:1px 6px 1px 3px; background:#fefefe; text-align:left; font-weight:normal; font-size:11px; border:1px solid #ddd; } tbody th { width:12em; text-align:right; color:#666; padding-right:.5em; } table.vars { margin:5px 0 2px 40px; } table.vars td, table.req td { font-family:monospace; } table td.code { width:100%; } table td.code pre { overflow:hidden; } table.source th { color:#666; } table.source td { font-family:monospace; white-space:pre; border-bottom:1px solid #eee; } ul.traceback { list-style-type:none; color: #222; } ul.traceback li.frame { padding-bottom:1em; color:#666; } ul.traceback li.user { background-color:#e0e0e0; color:#000 } div.context { padding:10px 0; overflow:hidden; } div.context ol { padding-left:30px; margin:0 10px; list-style-position: inside; } div.context ol li { font-family:monospace; white-space:pre; color:#777; cursor:pointer; padding-left: 2px; } div.context ol li pre { display:inline; } div.context ol.context-line li { color:#505050; background-color:#dfdfdf; padding: 3px 2px; } div.context ol.context-line li span { position:absolute; right:32px; } .user div.context ol.context-line li { background-color:#bbb; color:#000; } .user div.context ol li { color:#666; } div.commands { margin-left: 40px; } div.commands a { color:#555; text-decoration:none; } .user div.commands a { color: black; } #summary { background: #ffc; } #summary h2 { font-weight: normal; color: #666; } #explanation { background:#eee; } #template, #template-not-exist { background:#f6f6f6; } #template-not-exist ul { margin: 0 0 10px 20px; } #template-not-exist .postmortem-section { margin-bottom: 3px; } #unicode-hint { background:#eee; } #traceback { background:#eee; } #requestinfo { background:#f6f6f6; padding-left:120px; } #summary table { border:none; background:transparent; } #requestinfo h2, #requestinfo h3 { position:relative; margin-left:-100px; } #requestinfo h3 { margin-bottom:-1em; } .error { background: #ffc; } .specific { color:#cc3300; font-weight:bold; } h2 span.commands { font-size:.7em;} span.commands a:link {color:#5E5694;} pre.exception_value { font-family: sans-serif; color: #666; font-size: 1.5em; margin: 10px 0 10px 0; } .append-bottom { margin-bottom: 10px; } </style> <script type="text/javascript"> function hideAll(elems) { for (var e = 0; e < elems.length; e++) { elems[e].style.display = 'none'; } } window.onload = function() { hideAll(document.querySelectorAll('table.vars')); hideAll(document.querySelectorAll('ol.pre-context')); hideAll(document.querySelectorAll('ol.post-context')); hideAll(document.querySelectorAll('div.pastebin')); } function toggle() { for (var i = 0; i < arguments.length; i++) { var e = document.getElementById(arguments[i]); if (e) { e.style.display = e.style.display == 'none' ? 'block': 'none'; } } return false; } function varToggle(link, id) { toggle('v' + id); var s = link.getElementsByTagName('span')[0]; var uarr = String.fromCharCode(0x25b6); var darr = String.fromCharCode(0x25bc); s.textContent = s.textContent == uarr ? darr : uarr; return false; } function switchPastebinFriendly(link) { s1 = "Switch to copy-and-paste view"; s2 = "Switch back to interactive view"; link.textContent = link.textContent.trim() == s1 ? s2: s1; toggle('browserTraceback', 'pastebinTraceback'); return false; } </script> </head> <body> <div id="summary"> <h1>AttributeError at /profile</h1> <pre class="exception_value">'BadFormatAmount' object has no attribute 'hint'</pre> <table class="meta"> <tbody><tr> <th>Request Method:</th> <td>POST</td> </tr> <tr> <th>Request URL:</th> <td>https://bank.demo.taler.net/profile</td> </tr> <tr> <th>Django Version:</th> <td>2.0.2</td> </tr> <tr> <th>Exception Type:</th> <td>AttributeError</td> </tr> <tr> <th>Exception Value:</th> <td><pre>'BadFormatAmount' object has no attribute 'hint'</pre></td> </tr> <tr> <th>Exception Location:</th> <td>/home/demo-blue/local/lib/python3.5/site-packages/talerbank/app/middleware.py in process_exception, line 62</td> </tr> <tr> <th>Python Executable:</th> <td>/home/demo-blue/local/bin/uwsgi</td> </tr> <tr> <th>Python Version:</th> <td>3.5.3</td> </tr> <tr> <th>Python Path:</th> <td><pre>['.', '', '/home/demo-blue/local/lib/python3.5/site-packages', '/usr/lib/python35.zip', '/usr/lib/python3.5', '/usr/lib/python3.5/plat-x86_64-linux-gnu', '/usr/lib/python3.5/lib-dynload', '/usr/local/lib/python3.5/dist-packages', '/usr/lib/python3/dist-packages']</pre></td> </tr> <tr> <th>Server time:</th> <td>Tue, 27 Mar 2018 16:02:34 +0000</td> </tr> </tbody></table> </div> <div id="traceback"> <h2>Traceback <span class="commands"><a href="#" onclick="return switchPastebinFriendly(this);"> Switch to copy-and-paste view</a></span> </h2> <div id="browserTraceback"> <ul class="traceback"> <li class="frame django"> <code>/home/demo-blue/local/lib/python3.5/site-packages/django/core/handlers/base.py</code> in <code>_get_response</code> <div class="context" id="c139866745237448"> <ol start="119" class="pre-context" id="pre139866745237448"> <li onclick="toggle('pre139866745237448', 'post139866745237448')"><pre> response = middleware_method(request, callback, callback_args, callback_kwargs)</pre></li> <li onclick="toggle('pre139866745237448', 'post139866745237448')"><pre> if response:</pre></li> <li onclick="toggle('pre139866745237448', 'post139866745237448')"><pre> break</pre></li> <li onclick="toggle('pre139866745237448', 'post139866745237448')"><pre></pre></li> <li onclick="toggle('pre139866745237448', 'post139866745237448')"><pre> if response is None:</pre></li> <li onclick="toggle('pre139866745237448', 'post139866745237448')"><pre> wrapped_callback = self.make_view_atomic(callback)</pre></li> <li onclick="toggle('pre139866745237448', 'post139866745237448')"><pre> try:</pre></li> </ol> <ol start="126" class="context-line"> <li onclick="toggle('pre139866745237448', 'post139866745237448')"><pre> response = wrapped_callback(request, *callback_args, **callback_kwargs)</pre> <span>...</span></li> </ol> <ol start="127" class="post-context" id="post139866745237448"> <li onclick="toggle('pre139866745237448', 'post139866745237448')"><pre> except Exception as e:</pre></li> <li onclick="toggle('pre139866745237448', 'post139866745237448')"><pre> response = self.process_exception_by_middleware(e, request)</pre></li> <li onclick="toggle('pre139866745237448', 'post139866745237448')"><pre></pre></li> <li onclick="toggle('pre139866745237448', 'post139866745237448')"><pre> # Complain if the view returned None (a common error).</pre></li> <li onclick="toggle('pre139866745237448', 'post139866745237448')"><pre> if response is None:</pre></li> <li onclick="toggle('pre139866745237448', 'post139866745237448')"><pre> if isinstance(callback, types.FunctionType): # FBV</pre></li> </ol> </div> <div class="commands"> <a href="#" onclick="return varToggle(this, '139866745237448')"><span>▶</span> Local vars</a> </div> <table class="vars" id="v139866745237448"> <thead> <tr> <th>Variable</th> <th>Value</th> </tr> </thead> <tbody> <tr> <td>callback</td> <td class="code"><pre><function profile_page at 0x7f3547c8fa60></pre></td> </tr> <tr> <td>callback_args</td> <td class="code"><pre>()</pre></td> </tr> <tr> <td>callback_kwargs</td> <td class="code"><pre>{}</pre></td> </tr> <tr> <td>middleware_method</td> <td class="code"><pre><bound method CsrfViewMiddleware.process_view of <django.middleware.csrf.CsrfViewMiddleware object at 0x7f3547c8d6d8>></pre></td> </tr> <tr> <td>request</td> <td class="code"><pre><WSGIRequest: POST '/profile'></pre></td> </tr> <tr> <td>resolver</td> <td class="code"><pre><URLResolver 'talerbank.app.urls' (None:None) '^/'></pre></td> </tr> <tr> <td>resolver_match</td> <td class="code"><pre>ResolverMatch(func=talerbank.app.views.profile_page, args=(), kwargs={}, url_name=profile, app_names=[], namespaces=[])</pre></td> </tr> <tr> <td>response</td> <td class="code"><pre>None</pre></td> </tr> <tr> <td>self</td> <td class="code"><pre><django.core.handlers.wsgi.WSGIHandler object at 0x7f3547009f28></pre></td> </tr> <tr> <td>wrapped_callback</td> <td class="code"><pre><function profile_page at 0x7f3547c8fa60></pre></td> </tr> </tbody> </table> </li> <li class="frame django"> <code>/home/demo-blue/local/lib/python3.5/site-packages/django/contrib/auth/decorators.py</code> in <code>_wrapped_view</code> <div class="context" id="c139866745237384"> <ol start="14" class="pre-context" id="pre139866745237384"> <li onclick="toggle('pre139866745237384', 'post139866745237384')"><pre> that takes the user object and returns True if the user passes.</pre></li> <li onclick="toggle('pre139866745237384', 'post139866745237384')"><pre> """</pre></li> <li onclick="toggle('pre139866745237384', 'post139866745237384')"><pre></pre></li> <li onclick="toggle('pre139866745237384', 'post139866745237384')"><pre> def decorator(view_func):</pre></li> <li onclick="toggle('pre139866745237384', 'post139866745237384')"><pre> @wraps(view_func)</pre></li> <li onclick="toggle('pre139866745237384', 'post139866745237384')"><pre> def _wrapped_view(request, *args, **kwargs):</pre></li> <li onclick="toggle('pre139866745237384', 'post139866745237384')"><pre> if test_func(request.user):</pre></li> </ol> <ol start="21" class="context-line"> <li onclick="toggle('pre139866745237384', 'post139866745237384')"><pre> return view_func(request, *args, **kwargs)</pre> <span>...</span></li> </ol> <ol start="22" class="post-context" id="post139866745237384"> <li onclick="toggle('pre139866745237384', 'post139866745237384')"><pre> path = request.build_absolute_uri()</pre></li> <li onclick="toggle('pre139866745237384', 'post139866745237384')"><pre> resolved_login_url = resolve_url(login_url or settings.LOGIN_URL)</pre></li> <li onclick="toggle('pre139866745237384', 'post139866745237384')"><pre> # If the login url is the same scheme and net location then just</pre></li> <li onclick="toggle('pre139866745237384', 'post139866745237384')"><pre> # use the path as the "next" url.</pre></li> <li onclick="toggle('pre139866745237384', 'post139866745237384')"><pre> login_scheme, login_netloc = urlparse(resolved_login_url)[:2]</pre></li> <li onclick="toggle('pre139866745237384', 'post139866745237384')"><pre> current_scheme, current_netloc = urlparse(path)[:2]</pre></li> </ol> </div> <div class="commands"> <a href="#" onclick="return varToggle(this, '139866745237384')"><span>▶</span> Local vars</a> </div> <table class="vars" id="v139866745237384"> <thead> <tr> <th>Variable</th> <th>Value</th> </tr> </thead> <tbody> <tr> <td>args</td> <td class="code"><pre>()</pre></td> </tr> <tr> <td>kwargs</td> <td class="code"><pre>{}</pre></td> </tr> <tr> <td>login_url</td> <td class="code"><pre>None</pre></td> </tr> <tr> <td>redirect_field_name</td> <td class="code"><pre>'next'</pre></td> </tr> <tr> <td>request</td> <td class="code"><pre><WSGIRequest: POST '/profile'></pre></td> </tr> <tr> <td>test_func</td> <td class="code"><pre><function login_required.<locals>.<lambda> at 0x7f3547c8f950></pre></td> </tr> <tr> <td>view_func</td> <td class="code"><pre><function profile_page at 0x7f3547c8f6a8></pre></td> </tr> </tbody> </table> </li> <li class="frame user"> <code>/home/demo-blue/local/lib/python3.5/site-packages/talerbank/app/views.py</code> in <code>profile_page</code> <div class="context" id="c139866745237128"> <ol start="159" class="pre-context" id="pre139866745237128"> <li onclick="toggle('pre139866745237128', 'post139866745237128')"><pre>def profile_page(request):</pre></li> <li onclick="toggle('pre139866745237128', 'post139866745237128')"><pre> if request.method == "POST":</pre></li> <li onclick="toggle('pre139866745237128', 'post139866745237128')"><pre> wtf = WTForm(request.POST)</pre></li> <li onclick="toggle('pre139866745237128', 'post139866745237128')"><pre> if wtf.is_valid():</pre></li> <li onclick="toggle('pre139866745237128', 'post139866745237128')"><pre> amount_parts = (settings.TALER_CURRENCY,</pre></li> <li onclick="toggle('pre139866745237128', 'post139866745237128')"><pre> wtf.cleaned_data.get("amount") + 0.0)</pre></li> <li onclick="toggle('pre139866745237128', 'post139866745237128')"><pre> wire_transfer(</pre></li> </ol> <ol start="166" class="context-line"> <li onclick="toggle('pre139866745237128', 'post139866745237128')"><pre> Amount.parse("%s:%s" % amount_parts),</pre> <span>...</span></li> </ol> <ol start="167" class="post-context" id="post139866745237128"> <li onclick="toggle('pre139866745237128', 'post139866745237128')"><pre> BankAccount.objects.get(user=request.user),</pre></li> <li onclick="toggle('pre139866745237128', 'post139866745237128')"><pre> BankAccount.objects.get(account_no=wtf.cleaned_data.get("receiver")),</pre></li> <li onclick="toggle('pre139866745237128', 'post139866745237128')"><pre> wtf.cleaned_data.get("subject"))</pre></li> <li onclick="toggle('pre139866745237128', 'post139866745237128')"><pre> request.session["profile_hint"] = False, True, "Wire transfer successful!"</pre></li> <li onclick="toggle('pre139866745237128', 'post139866745237128')"><pre> return redirect("profile")</pre></li> <li onclick="toggle('pre139866745237128', 'post139866745237128')"><pre> wtf = WTForm()</pre></li> </ol> </div> <div class="commands"> <a href="#" onclick="return varToggle(this, '139866745237128')"><span>▶</span> Local vars</a> </div> <table class="vars" id="v139866745237128"> <thead> <tr> <th>Variable</th> <th>Value</th> </tr> </thead> <tbody> <tr> <td>amount_parts</td> <td class="code"><pre>('KUDOS', 1e+38)</pre></td> </tr> <tr> <td>request</td> <td class="code"><pre><WSGIRequest: POST '/profile'></pre></td> </tr> <tr> <td>wtf</td> <td class="code"><pre><WTForm bound=True, valid=True, fields=(amount;receiver;subject)></pre></td> </tr> </tbody> </table> </li> <li class="frame user"> <code>/home/demo-blue/local/lib/python3.5/site-packages/talerbank/app/amount.py</code> in <code>parse</code> <div class="context" id="c139866744254088"> <ol start="64" class="pre-context" id="pre139866744254088"> <li onclick="toggle('pre139866744254088', 'post139866744254088')"><pre> # instantiating an amount object.</pre></li> <li onclick="toggle('pre139866744254088', 'post139866744254088')"><pre> @classmethod</pre></li> <li onclick="toggle('pre139866744254088', 'post139866744254088')"><pre> def parse(cls, amount_str: str):</pre></li> <li onclick="toggle('pre139866744254088', 'post139866744254088')"><pre> exp = r'^\s*([-_*A-Za-z0-9]+):([0-9]+)\.?([0-9]+)?\s*$'</pre></li> <li onclick="toggle('pre139866744254088', 'post139866744254088')"><pre> import re</pre></li> <li onclick="toggle('pre139866744254088', 'post139866744254088')"><pre> parsed = re.search(exp, amount_str)</pre></li> <li onclick="toggle('pre139866744254088', 'post139866744254088')"><pre> if not parsed:</pre></li> </ol> <ol start="71" class="context-line"> <li onclick="toggle('pre139866744254088', 'post139866744254088')"><pre> raise BadFormatAmount(amount_str)</pre> <span>...</span></li> </ol> <ol start="72" class="post-context" id="post139866744254088"> <li onclick="toggle('pre139866744254088', 'post139866744254088')"><pre> value = int(parsed.group(2))</pre></li> <li onclick="toggle('pre139866744254088', 'post139866744254088')"><pre> fraction = 0</pre></li> <li onclick="toggle('pre139866744254088', 'post139866744254088')"><pre> for i, digit in enumerate(parsed.group(3) or "0"):</pre></li> <li onclick="toggle('pre139866744254088', 'post139866744254088')"><pre> fraction += int(int(digit) * (Amount._fraction() / 10 ** (i+1)))</pre></li> <li onclick="toggle('pre139866744254088', 'post139866744254088')"><pre> return cls(parsed.group(1), value, fraction)</pre></li> <li onclick="toggle('pre139866744254088', 'post139866744254088')"><pre></pre></li> </ol> </div> <div class="commands"> <a href="#" onclick="return varToggle(this, '139866744254088')"><span>▶</span> Local vars</a> </div> <table class="vars" id="v139866744254088"> <thead> <tr> <th>Variable</th> <th>Value</th> </tr> </thead> <tbody> <tr> <td>amount_str</td> <td class="code"><pre>'KUDOS:1e+38'</pre></td> </tr> <tr> <td>cls</td> <td class="code"><pre><class 'talerbank.app.amount.Amount'></pre></td> </tr> <tr> <td>exp</td> <td class="code"><pre>'^\\s*([-_*A-Za-z0-9]+):([0-9]+)\\.?([0-9]+)?\\s*$'</pre></td> </tr> <tr> <td>parsed</td> <td class="code"><pre>None</pre></td> </tr> <tr> <td>re</td> <td class="code"><pre><module 're' from '/usr/lib/python3.5/re.py'></pre></td> </tr> </tbody> </table> </li> <li><h3> During handling of the above exception (Bad format amount: KUDOS:1e+38), another exception occurred: </h3></li> <li class="frame django"> <code>/home/demo-blue/local/lib/python3.5/site-packages/django/core/handlers/exception.py</code> in <code>inner</code> <div class="context" id="c139866745236744"> <ol start="28" class="pre-context" id="pre139866745236744"> <li onclick="toggle('pre139866745236744', 'post139866745236744')"><pre> This decorator is automatically applied to all middleware to ensure that</pre></li> <li onclick="toggle('pre139866745236744', 'post139866745236744')"><pre> no middleware leaks an exception and that the next middleware in the stack</pre></li> <li onclick="toggle('pre139866745236744', 'post139866745236744')"><pre> can rely on getting a response instead of an exception.</pre></li> <li onclick="toggle('pre139866745236744', 'post139866745236744')"><pre> """</pre></li> <li onclick="toggle('pre139866745236744', 'post139866745236744')"><pre> @wraps(get_response)</pre></li> <li onclick="toggle('pre139866745236744', 'post139866745236744')"><pre> def inner(request):</pre></li> <li onclick="toggle('pre139866745236744', 'post139866745236744')"><pre> try:</pre></li> </ol> <ol start="35" class="context-line"> <li onclick="toggle('pre139866745236744', 'post139866745236744')"><pre> response = get_response(request)</pre> <span>...</span></li> </ol> <ol start="36" class="post-context" id="post139866745236744"> <li onclick="toggle('pre139866745236744', 'post139866745236744')"><pre> except Exception as exc:</pre></li> <li onclick="toggle('pre139866745236744', 'post139866745236744')"><pre> response = response_for_exception(request, exc)</pre></li> <li onclick="toggle('pre139866745236744', 'post139866745236744')"><pre> return response</pre></li> <li onclick="toggle('pre139866745236744', 'post139866745236744')"><pre> return inner</pre></li> <li onclick="toggle('pre139866745236744', 'post139866745236744')"><pre></pre></li> <li onclick="toggle('pre139866745236744', 'post139866745236744')"><pre></pre></li> </ol> </div> <div class="commands"> <a href="#" onclick="return varToggle(this, '139866745236744')"><span>▶</span> Local vars</a> </div> <table class="vars" id="v139866745236744"> <thead> <tr> <th>Variable</th> <th>Value</th> </tr> </thead> <tbody> <tr> <td>exc</td> <td class="code"><pre>AttributeError("'BadFormatAmount' object has no attribute 'hint'",)</pre></td> </tr> <tr> <td>get_response</td> <td class="code"><pre><bound method BaseHandler._get_response of <django.core.handlers.wsgi.WSGIHandler object at 0x7f3547009f28>></pre></td> </tr> <tr> <td>request</td> <td class="code"><pre><WSGIRequest: POST '/profile'></pre></td> </tr> </tbody> </table> </li> <li class="frame django"> <code>/home/demo-blue/local/lib/python3.5/site-packages/django/core/handlers/base.py</code> in <code>_get_response</code> <div class="context" id="c139866745236872"> <ol start="121" class="pre-context" id="pre139866745236872"> <li onclick="toggle('pre139866745236872', 'post139866745236872')"><pre> break</pre></li> <li onclick="toggle('pre139866745236872', 'post139866745236872')"><pre></pre></li> <li onclick="toggle('pre139866745236872', 'post139866745236872')"><pre> if response is None:</pre></li> <li onclick="toggle('pre139866745236872', 'post139866745236872')"><pre> wrapped_callback = self.make_view_atomic(callback)</pre></li> <li onclick="toggle('pre139866745236872', 'post139866745236872')"><pre> try:</pre></li> <li onclick="toggle('pre139866745236872', 'post139866745236872')"><pre> response = wrapped_callback(request, *callback_args, **callback_kwargs)</pre></li> <li onclick="toggle('pre139866745236872', 'post139866745236872')"><pre> except Exception as e:</pre></li> </ol> <ol start="128" class="context-line"> <li onclick="toggle('pre139866745236872', 'post139866745236872')"><pre> response = self.process_exception_by_middleware(e, request)</pre> <span>...</span></li> </ol> <ol start="129" class="post-context" id="post139866745236872"> <li onclick="toggle('pre139866745236872', 'post139866745236872')"><pre></pre></li> <li onclick="toggle('pre139866745236872', 'post139866745236872')"><pre> # Complain if the view returned None (a common error).</pre></li> <li onclick="toggle('pre139866745236872', 'post139866745236872')"><pre> if response is None:</pre></li> <li onclick="toggle('pre139866745236872', 'post139866745236872')"><pre> if isinstance(callback, types.FunctionType): # FBV</pre></li> <li onclick="toggle('pre139866745236872', 'post139866745236872')"><pre> view_name = callback.__name__</pre></li> <li onclick="toggle('pre139866745236872', 'post139866745236872')"><pre> else: # CBV</pre></li> </ol> </div> <div class="commands"> <a href="#" onclick="return varToggle(this, '139866745236872')"><span>▶</span> Local vars</a> </div> <table class="vars" id="v139866745236872"> <thead> <tr> <th>Variable</th> <th>Value</th> </tr> </thead> <tbody> <tr> <td>callback</td> <td class="code"><pre><function profile_page at 0x7f3547c8fa60></pre></td> </tr> <tr> <td>callback_args</td> <td class="code"><pre>()</pre></td> </tr> <tr> <td>callback_kwargs</td> <td class="code"><pre>{}</pre></td> </tr> <tr> <td>middleware_method</td> <td class="code"><pre><bound method CsrfViewMiddleware.process_view of <django.middleware.csrf.CsrfViewMiddleware object at 0x7f3547c8d6d8>></pre></td> </tr> <tr> <td>request</td> <td class="code"><pre><WSGIRequest: POST '/profile'></pre></td> </tr> <tr> <td>resolver</td> <td class="code"><pre><URLResolver 'talerbank.app.urls' (None:None) '^/'></pre></td> </tr> <tr> <td>resolver_match</td> <td class="code"><pre>ResolverMatch(func=talerbank.app.views.profile_page, args=(), kwargs={}, url_name=profile, app_names=[], namespaces=[])</pre></td> </tr> <tr> <td>response</td> <td class="code"><pre>None</pre></td> </tr> <tr> <td>self</td> <td class="code"><pre><django.core.handlers.wsgi.WSGIHandler object at 0x7f3547009f28></pre></td> </tr> <tr> <td>wrapped_callback</td> <td class="code"><pre><function profile_page at 0x7f3547c8fa60></pre></td> </tr> </tbody> </table> </li> <li class="frame django"> <code>/home/demo-blue/local/lib/python3.5/site-packages/django/core/handlers/base.py</code> in <code>process_exception_by_middleware</code> <div class="context" id="c139866745234184"> <ol start="161" class="pre-context" id="pre139866745234184"> <li onclick="toggle('pre139866745234184', 'post139866745234184')"><pre></pre></li> <li onclick="toggle('pre139866745234184', 'post139866745234184')"><pre> def process_exception_by_middleware(self, exception, request):</pre></li> <li onclick="toggle('pre139866745234184', 'post139866745234184')"><pre> """</pre></li> <li onclick="toggle('pre139866745234184', 'post139866745234184')"><pre> Pass the exception to the exception middleware. If no middleware</pre></li> <li onclick="toggle('pre139866745234184', 'post139866745234184')"><pre> return a response for this exception, raise it.</pre></li> <li onclick="toggle('pre139866745234184', 'post139866745234184')"><pre> """</pre></li> <li onclick="toggle('pre139866745234184', 'post139866745234184')"><pre> for middleware_method in self._exception_middleware:</pre></li> </ol> <ol start="168" class="context-line"> <li onclick="toggle('pre139866745234184', 'post139866745234184')"><pre> response = middleware_method(request, exception)</pre> <span>...</span></li> </ol> <ol start="169" class="post-context" id="post139866745234184"> <li onclick="toggle('pre139866745234184', 'post139866745234184')"><pre> if response:</pre></li> <li onclick="toggle('pre139866745234184', 'post139866745234184')"><pre> return response</pre></li> <li onclick="toggle('pre139866745234184', 'post139866745234184')"><pre> raise</pre></li> </ol> </div> <div class="commands"> <a href="#" onclick="return varToggle(this, '139866745234184')"><span>▶</span> Local vars</a> </div> <table class="vars" id="v139866745234184"> <thead> <tr> <th>Variable</th> <th>Value</th> </tr> </thead> <tbody> <tr> <td>exception</td> <td class="code"><pre>BadFormatAmount('Bad format amount: KUDOS:1e+38',)</pre></td> </tr> <tr> <td>middleware_method</td> <td class="code"><pre><bound method ExceptionMiddleware.process_exception of <talerbank.app.middleware.ExceptionMiddleware object at 0x7f3546b5ac88>></pre></td> </tr> <tr> <td>request</td> <td class="code"><pre><WSGIRequest: POST '/profile'></pre></td> </tr> <tr> <td>self</td> <td class="code"><pre><django.core.handlers.wsgi.WSGIHandler object at 0x7f3547009f28></pre></td> </tr> </tbody> </table> </li> <li class="frame user"> <code>/home/demo-blue/local/lib/python3.5/site-packages/talerbank/app/middleware.py</code> in <code>process_exception</code> <div class="context" id="c139866745234056"> <ol start="55" class="pre-context" id="pre139866745234056"> <li onclick="toggle('pre139866745234056', 'post139866745234056')"><pre> taler_ec += self.apis.get(request.path, 1000)</pre></li> <li onclick="toggle('pre139866745234056', 'post139866745234056')"><pre> render_to = self.render.get(request.path)</pre></li> <li onclick="toggle('pre139866745234056', 'post139866745234056')"><pre> if not render_to:</pre></li> <li onclick="toggle('pre139866745234056', 'post139866745234056')"><pre> return JsonResponse({"ec": taler_ec,</pre></li> <li onclick="toggle('pre139866745234056', 'post139866745234056')"><pre> "error": exception.hint},</pre></li> <li onclick="toggle('pre139866745234056', 'post139866745234056')"><pre> status=exception.http_status_code)</pre></li> <li onclick="toggle('pre139866745234056', 'post139866745234056')"><pre> request.session["profile_hint"] = \</pre></li> </ol> <ol start="62" class="context-line"> <li onclick="toggle('pre139866745234056', 'post139866745234056')"><pre> True, False, exception.hint</pre> <span>...</span></li> </ol> <ol start="63" class="post-context" id="post139866745234056"> <li onclick="toggle('pre139866745234056', 'post139866745234056')"><pre> return redirect(render_to)</pre></li> <li onclick="toggle('pre139866745234056', 'post139866745234056')"><pre></pre></li> <li onclick="toggle('pre139866745234056', 'post139866745234056')"><pre># [1] https://git.taler.net/exchange.git/tree/src/include/taler_error_codes.h#n1502</pre></li> </ol> </div> <div class="commands"> <a href="#" onclick="return varToggle(this, '139866745234056')"><span>▶</span> Local vars</a> </div> <table class="vars" id="v139866745234056"> <thead> <tr> <th>Variable</th> <th>Value</th> </tr> </thead> <tbody> <tr> <td>exception</td> <td class="code"><pre>BadFormatAmount('Bad format amount: KUDOS:1e+38',)</pre></td> </tr> <tr> <td>render_to</td> <td class="code"><pre>'profile'</pre></td> </tr> <tr> <td>request</td> <td class="code"><pre><WSGIRequest: POST '/profile'></pre></td> </tr> <tr> <td>self</td> <td class="code"><pre><talerbank.app.middleware.ExceptionMiddleware object at 0x7f3546b5ac88></pre></td> </tr> <tr> <td>taler_ec</td> <td class="code"><pre>1011</pre></td> </tr> </tbody> </table> </li> </ul> </div> <form action="http://dpaste.com/" name="pasteform" id="pasteform" method="post"> <div id="pastebinTraceback" class="pastebin"> <input name="language" value="PythonConsole" type="hidden"> <input name="title" value="AttributeError at /profile" type="hidden"> <input name="source" value="Django Dpaste Agent" type="hidden"> <input name="poster" value="Django" type="hidden"> <textarea name="content" id="traceback_area" cols="140" rows="25">Environment: Request Method: POST Request URL: https://bank.demo.taler.net/profile Django Version: 2.0.2 Python Version: 3.5.3 Installed Applications: ['django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'talerbank.app'] Installed Middleware: ['django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'talerbank.app.middleware.ExceptionMiddleware'] Traceback: File "/home/demo-blue/local/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response 126. response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/home/demo-blue/local/lib/python3.5/site-packages/django/contrib/auth/decorators.py" in _wrapped_view 21. return view_func(request, *args, **kwargs) File "/home/demo-blue/local/lib/python3.5/site-packages/talerbank/app/views.py" in profile_page 166. Amount.parse("%s:%s" % amount_parts), File "/home/demo-blue/local/lib/python3.5/site-packages/talerbank/app/amount.py" in parse 71. raise BadFormatAmount(amount_str) During handling of the above exception (Bad format amount: KUDOS:1e+38), another exception occurred: File "/home/demo-blue/local/lib/python3.5/site-packages/django/core/handlers/exception.py" in inner 35. response = get_response(request) File "/home/demo-blue/local/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response 128. response = self.process_exception_by_middleware(e, request) File "/home/demo-blue/local/lib/python3.5/site-packages/django/core/handlers/base.py" in process_exception_by_middleware 168. response = middleware_method(request, exception) File "/home/demo-blue/local/lib/python3.5/site-packages/talerbank/app/middleware.py" in process_exception 62. True, False, exception.hint Exception Type: AttributeError at /profile Exception Value: 'BadFormatAmount' object has no attribute 'hint' </textarea> <br><br> <input value="Share this traceback on a public website" type="submit"> </div> </form> </div> <div id="requestinfo"> <h2>Request information</h2> <h3 id="user-info">USER</h3> <p>Duuh</p> <h3 id="get-info">GET</h3> <p>No GET data</p> <h3 id="post-info">POST</h3> <table class="req"> <thead> <tr> <th>Variable</th> <th>Value</th> </tr> </thead> <tbody> <tr> <td>amount</td> <td class="code"><pre>'100000000000000000000000000000000000000'</pre></td> </tr> <tr> <td>csrfmiddlewaretoken</td> <td class="code"><pre>'NMIBlRAjznV0xmvpItw4aX6mJOJSNMto50K7gkZATlNBfILWsjPnvuKI96HanFXx'</pre></td> </tr> <tr> <td>receiver</td> <td class="code"><pre>'74'</pre></td> </tr> <tr> <td>subject</td> <td class="code"><pre>'IO'</pre></td> </tr> </tbody> </table> <h3 id="files-info">FILES</h3> <p>No FILES data</p> <h3 id="cookie-info">COOKIES</h3> <table class="req"> <thead> <tr> <th>Variable</th> <th>Value</th> </tr> </thead> <tbody> <tr> <td>sessionid</td> <td class="code"><pre>'lyk1kmm85gy99stc88j3j77smla6jy1s'</pre></td> </tr> <tr> <td>csrftoken</td> <td class="code"><pre>'0xqCaOBzMRh0aMw2bvEffANGa6q1o0chiLs85h0Q6P9BS8MzVlXyA7r2AoojYTGq'</pre></td> </tr> </tbody> </table> <h3 id="meta-info">META</h3> <table class="req"> <thead> <tr> <th>Variable</th> <th>Value</th> </tr> </thead> <tbody> <tr> <td>CONTENT_LENGTH</td> <td class="code"><pre>'154'</pre></td> </tr> <tr> <td>CONTENT_TYPE</td> <td class="code"><pre>'application/x-www-form-urlencoded'</pre></td> </tr> <tr> <td>CSRF_COOKIE</td> <td class="code"><pre>'0xqCaOBzMRh0aMw2bvEffANGa6q1o0chiLs85h0Q6P9BS8MzVlXyA7r2AoojYTGq'</pre></td> </tr> <tr> <td>DOCUMENT_ROOT</td> <td class="code"><pre>'/usr/share/nginx/html'</pre></td> </tr> <tr> <td>HTTPS</td> <td class="code"><pre>'on'</pre></td> </tr> <tr> <td>HTTP_ACCEPT</td> <td class="code"><pre>'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'</pre></td> </tr> <tr> <td>HTTP_ACCEPT_ENCODING</td> <td class="code"><pre>'gzip, deflate, br'</pre></td> </tr> <tr> <td>HTTP_ACCEPT_LANGUAGE</td> <td class="code"><pre>'en-US,en;q=0.5'</pre></td> </tr> <tr> <td>HTTP_CONNECTION</td> <td class="code"><pre>'keep-alive'</pre></td> </tr> <tr> <td>HTTP_CONTENT_LENGTH</td> <td class="code"><pre>'154'</pre></td> </tr> <tr> <td>HTTP_CONTENT_TYPE</td> <td class="code"><pre>'application/x-www-form-urlencoded'</pre></td> </tr> <tr> <td>HTTP_COOKIE</td> <td class="code"><pre>('csrftoken=0xqCaOBzMRh0aMw2bvEffANGa6q1o0chiLs85h0Q6P9BS8MzVlXyA7r2AoojYTGq; ' 'sessionid=lyk1kmm85gy99stc88j3j77smla6jy1s')</pre></td> </tr> <tr> <td>HTTP_DNT</td> <td class="code"><pre>'1'</pre></td> </tr> <tr> <td>HTTP_HOST</td> <td class="code"><pre>'bank.demo.taler.net'</pre></td> </tr> <tr> <td>HTTP_REFERER</td> <td class="code"><pre>'https://bank.demo.taler.net/profile'</pre></td> </tr> <tr> <td>HTTP_UPGRADE_INSECURE_REQUESTS</td> <td class="code"><pre>'1'</pre></td> </tr> <tr> <td>HTTP_USER_AGENT</td> <td class="code"><pre>'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:58.0) Gecko/20100101 Firefox/58.0'</pre></td> </tr> <tr> <td>PATH_INFO</td> <td class="code"><pre>'/profile'</pre></td> </tr> <tr> <td>QUERY_STRING</td> <td class="code"><pre>''</pre></td> </tr> <tr> <td>REMOTE_ADDR</td> <td class="code"><pre>'2001:1620:e06:0:e036:7691:4f02:92d9'</pre></td> </tr> <tr> <td>REMOTE_PORT</td> <td class="code"><pre>'49394'</pre></td> </tr> <tr> <td>REQUEST_METHOD</td> <td class="code"><pre>'POST'</pre></td> </tr> <tr> <td>REQUEST_SCHEME</td> <td class="code"><pre>'https'</pre></td> </tr> <tr> <td>REQUEST_URI</td> <td class="code"><pre>'/profile'</pre></td> </tr> <tr> <td>SCRIPT_NAME</td> <td class="code"><pre>''</pre></td> </tr> <tr> <td>SERVER_NAME</td> <td class="code"><pre>'bank.demo.taler.net'</pre></td> </tr> <tr> <td>SERVER_PORT</td> <td class="code"><pre>'443'</pre></td> </tr> <tr> <td>SERVER_PROTOCOL</td> <td class="code"><pre>'HTTP/1.1'</pre></td> </tr> <tr> <td>uwsgi.node</td> <td class="code"><pre>b'tripwire'</pre></td> </tr> <tr> <td>uwsgi.version</td> <td class="code"><pre>b'2.0.16'</pre></td> </tr> <tr> <td>wsgi.errors</td> <td class="code"><pre><_io.TextIOWrapper name=2 mode='w' encoding='UTF-8'></pre></td> </tr> <tr> <td>wsgi.file_wrapper</td> <td class="code"><pre>''</pre></td> </tr> <tr> <td>wsgi.input</td> <td class="code"><pre><uwsgi._Input object at 0x7f3546bd3df8></pre></td> </tr> <tr> <td>wsgi.multiprocess</td> <td class="code"><pre>False</pre></td> </tr> <tr> <td>wsgi.multithread</td> <td class="code"><pre>False</pre></td> </tr> <tr> <td>wsgi.run_once</td> <td class="code"><pre>False</pre></td> </tr> <tr> <td>wsgi.url_scheme</td> <td class="code"><pre>'https'</pre></td> </tr> <tr> <td>wsgi.version</td> <td class="code"><pre>(1, 0)</pre></td> </tr> </tbody> </table> <h3 id="settings-info">Settings</h3> <h4>Using settings module <code>talerbank.settings</code></h4> <table class="req"> <thead> <tr> <th>Setting</th> <th>Value</th> </tr> </thead> <tbody> <tr> <td>ABSOLUTE_URL_OVERRIDES</td> <td class="code"><pre>{}</pre></td> </tr> <tr> <td>ADMINS</td> <td class="code"><pre>[]</pre></td> </tr> <tr> <td>ALLOWED_HOSTS</td> <td class="code"><pre>['*']</pre></td> </tr> <tr> <td>APPEND_SLASH</td> <td class="code"><pre>True</pre></td> </tr> <tr> <td>AUTHENTICATION_BACKENDS</td> <td class="code"><pre>['django.contrib.auth.backends.ModelBackend']</pre></td> </tr> <tr> <td>AUTH_PASSWORD_VALIDATORS</td> <td class="code"><pre>'********************'</pre></td> </tr> <tr> <td>AUTH_USER_MODEL</td> <td class="code"><pre>'auth.User'</pre></td> </tr> <tr> <td>BASE_DIR</td> <td class="code"><pre>'/home/demo-blue/local/lib/python3.5/site-packages'</pre></td> </tr> <tr> <td>CACHES</td> <td class="code"><pre>{'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'}}</pre></td> </tr> <tr> <td>CACHE_MIDDLEWARE_ALIAS</td> <td class="code"><pre>'default'</pre></td> </tr> <tr> <td>CACHE_MIDDLEWARE_KEY_PREFIX</td> <td class="code"><pre>'********************'</pre></td> </tr> <tr> <td>CACHE_MIDDLEWARE_SECONDS</td> <td class="code"><pre>600</pre></td> </tr> <tr> <td>CHECK_DBSTRING_FORMAT</td> <td class="code"><pre><_sre.SRE_Match object; span=(0, 21), match='postgres:///talerdemo'></pre></td> </tr> <tr> <td>CSRF_COOKIE_AGE</td> <td class="code"><pre>31449600</pre></td> </tr> <tr> <td>CSRF_COOKIE_DOMAIN</td> <td class="code"><pre>None</pre></td> </tr> <tr> <td>CSRF_COOKIE_HTTPONLY</td> <td class="code"><pre>False</pre></td> </tr> <tr> <td>CSRF_COOKIE_NAME</td> <td class="code"><pre>'csrftoken'</pre></td> </tr> <tr> <td>CSRF_COOKIE_PATH</td> <td class="code"><pre>'/'</pre></td> </tr> <tr> <td>CSRF_COOKIE_SECURE</td> <td class="code"><pre>False</pre></td> </tr> <tr> <td>CSRF_FAILURE_VIEW</td> <td class="code"><pre>'django.views.csrf.csrf_failure'</pre></td> </tr> <tr> <td>CSRF_HEADER_NAME</td> <td class="code"><pre>'HTTP_X_CSRFTOKEN'</pre></td> </tr> <tr> <td>CSRF_TRUSTED_ORIGINS</td> <td class="code"><pre>[]</pre></td> </tr> <tr> <td>CSRF_USE_SESSIONS</td> <td class="code"><pre>False</pre></td> </tr> <tr> <td>DATABASES</td> <td class="code"><pre>{'default': {'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_MAX_AGE': 0, 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'HOST': '', 'NAME': 'talerdemo', 'OPTIONS': {}, 'PASSWORD': '********************', 'PORT': '', 'TEST': {'CHARSET': None, 'COLLATION': None, 'MIRROR': None, 'NAME': None}, 'TIME_ZONE': None, 'USER': ''}}</pre></td> </tr> <tr> <td>DATABASE_ROUTERS</td> <td class="code"><pre>[]</pre></td> </tr> <tr> <td>DATA_UPLOAD_MAX_MEMORY_SIZE</td> <td class="code"><pre>2621440</pre></td> </tr> <tr> <td>DATA_UPLOAD_MAX_NUMBER_FIELDS</td> <td class="code"><pre>1000</pre></td> </tr> <tr> <td>DATETIME_FORMAT</td> <td class="code"><pre>'N j, Y, P'</pre></td> </tr> <tr> <td>DATETIME_INPUT_FORMATS</td> <td class="code"><pre>['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M', '%Y-%m-%d', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%Y', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M', '%m/%d/%y']</pre></td> </tr> <tr> <td>DATE_FORMAT</td> <td class="code"><pre>'N j, Y'</pre></td> </tr> <tr> <td>DATE_INPUT_FORMATS</td> <td class="code"><pre>['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y', '%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B %Y', '%d %B, %Y']</pre></td> </tr> <tr> <td>DBCONFIG</td> <td class="code"><pre>{'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_MAX_AGE': 0, 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'HOST': '', 'NAME': 'talerdemo', 'OPTIONS': {}, 'PASSWORD': '********************', 'PORT': '', 'TEST': {'CHARSET': None, 'COLLATION': None, 'MIRROR': None, 'NAME': None}, 'TIME_ZONE': None, 'USER': ''}</pre></td> </tr> <tr> <td>DBNAME</td> <td class="code"><pre>'postgres:///talerdemo'</pre></td> </tr> <tr> <td>DB_URL</td> <td class="code"><pre>ParseResult(scheme='postgres', netloc='', path='/talerdemo', params='', query='', fragment='')</pre></td> </tr> <tr> <td>DEBUG</td> <td class="code"><pre>True</pre></td> </tr> <tr> <td>DEBUG_PROPAGATE_EXCEPTIONS</td> <td class="code"><pre>False</pre></td> </tr> <tr> <td>DECIMAL_SEPARATOR</td> <td class="code"><pre>'.'</pre></td> </tr> <tr> <td>DEFAULT_CHARSET</td> <td class="code"><pre>'utf-8'</pre></td> </tr> <tr> <td>DEFAULT_CONTENT_TYPE</td> <td class="code"><pre>'text/html'</pre></td> </tr> <tr> <td>DEFAULT_EXCEPTION_REPORTER_FILTER</td> <td class="code"><pre>'django.views.debug.SafeExceptionReporterFilter'</pre></td> </tr> <tr> <td>DEFAULT_FILE_STORAGE</td> <td class="code"><pre>'django.core.files.storage.FileSystemStorage'</pre></td> </tr> <tr> <td>DEFAULT_FROM_EMAIL</td> <td class="code"><pre>'webmaster@localhost'</pre></td> </tr> <tr> <td>DEFAULT_INDEX_TABLESPACE</td> <td class="code"><pre>''</pre></td> </tr> <tr> <td>DEFAULT_TABLESPACE</td> <td class="code"><pre>''</pre></td> </tr> <tr> <td>DISALLOWED_USER_AGENTS</td> <td class="code"><pre>[]</pre></td> </tr> <tr> <td>EMAIL_BACKEND</td> <td class="code"><pre>'django.core.mail.backends.smtp.EmailBackend'</pre></td> </tr> <tr> <td>EMAIL_HOST</td> <td class="code"><pre>'localhost'</pre></td> </tr> <tr> <td>EMAIL_HOST_PASSWORD</td> <td class="code"><pre>'********************'</pre></td> </tr> <tr> <td>EMAIL_HOST_USER</td> <td class="code"><pre>''</pre></td> </tr> <tr> <td>EMAIL_PORT</td> <td class="code"><pre>25</pre></td> </tr> <tr> <td>EMAIL_SSL_CERTFILE</td> <td class="code"><pre>None</pre></td> </tr> <tr> <td>EMAIL_SSL_KEYFILE</td> <td class="code"><pre>'********************'</pre></td> </tr> <tr> <td>EMAIL_SUBJECT_PREFIX</td> <td class="code"><pre>'[Django] '</pre></td> </tr> <tr> <td>EMAIL_TIMEOUT</td> <td class="code"><pre>None</pre></td> </tr> <tr> <td>EMAIL_USE_LOCALTIME</td> <td class="code"><pre>False</pre></td> </tr> <tr> <td>EMAIL_USE_SSL</td> <td class="code"><pre>False</pre></td> </tr> <tr> <td>EMAIL_USE_TLS</td> <td class="code"><pre>False</pre></td> </tr> <tr> <td>FILE_CHARSET</td> <td class="code"><pre>'utf-8'</pre></td> </tr> <tr> <td>FILE_UPLOAD_DIRECTORY_PERMISSIONS</td> <td class="code"><pre>None</pre></td> </tr> <tr> <td>FILE_UPLOAD_HANDLERS</td> <td class="code"><pre>['django.core.files.uploadhandler.MemoryFileUploadHandler', 'django.core.files.uploadhandler.TemporaryFileUploadHandler']</pre></td> </tr> <tr> <td>FILE_UPLOAD_MAX_MEMORY_SIZE</td> <td class="code"><pre>2621440</pre></td> </tr> <tr> <td>FILE_UPLOAD_PERMISSIONS</td> <td class="code"><pre>None</pre></td> </tr> <tr> <td>FILE_UPLOAD_TEMP_DIR</td> <td class="code"><pre>None</pre></td> </tr> <tr> <td>FIRST_DAY_OF_WEEK</td> <td class="code"><pre>0</pre></td> </tr> <tr> <td>FIXTURE_DIRS</td> <td class="code"><pre>[]</pre></td> </tr> <tr> <td>FORCE_SCRIPT_NAME</td> <td class="code"><pre>None</pre></td> </tr> <tr> <td>FORMAT_MODULE_PATH</td> <td class="code"><pre>None</pre></td> </tr> <tr> <td>FORM_RENDERER</td> <td class="code"><pre>'django.forms.renderers.DjangoTemplates'</pre></td> </tr> <tr> <td>HOST</td> <td class="code"><pre>None</pre></td> </tr> <tr> <td>IGNORABLE_404_URLS</td> <td class="code"><pre>[]</pre></td> </tr> <tr> <td>INSTALLED_APPS</td> <td class="code"><pre>['django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'talerbank.app']</pre></td> </tr> <tr> <td>INTERNAL_IPS</td> <td class="code"><pre>[]</pre></td> </tr> <tr> <td>LANGUAGES</td> <td class="code"><pre>[('af', 'Afrikaans'), ('ar', 'Arabic'), ('ast', 'Asturian'), ('az', 'Azerbaijani'), ('bg', 'Bulgarian'), ('be', 'Belarusian'), ('bn', 'Bengali'), ('br', 'Breton'), ('bs', 'Bosnian'), ('ca', 'Catalan'), ('cs', 'Czech'), ('cy', 'Welsh'), ('da', 'Danish'), ('de', 'German'), ('dsb', 'Lower Sorbian'), ('el', 'Greek'), ('en', 'English'), ('en-au', 'Australian English'), ('en-gb', 'British English'), ('eo', 'Esperanto'), ('es', 'Spanish'), ('es-ar', 'Argentinian Spanish'), ('es-co', 'Colombian Spanish'), ('es-mx', 'Mexican Spanish'), ('es-ni', 'Nicaraguan Spanish'), ('es-ve', 'Venezuelan Spanish'), ('et', 'Estonian'), ('eu', 'Basque'), ('fa', 'Persian'), ('fi', 'Finnish'), ('fr', 'French'), ('fy', 'Frisian'), ('ga', 'Irish'), ('gd', 'Scottish Gaelic'), ('gl', 'Galician'), ('he', 'Hebrew'), ('hi', 'Hindi'), ('hr', 'Croatian'), ('hsb', 'Upper Sorbian'), ('hu', 'Hungarian'), ('ia', 'Interlingua'), ('id', 'Indonesian'), ('io', 'Ido'), ('is', 'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka', 'Georgian'), ('kab', 'Kabyle'), ('kk', 'Kazakh'), ('km', 'Khmer'), ('kn', 'Kannada'), ('ko', 'Korean'), ('lb', 'Luxembourgish'), ('lt', 'Lithuanian'), ('lv', 'Latvian'), ('mk', 'Macedonian'), ('ml', 'Malayalam'), ('mn', 'Mongolian'), ('mr', 'Marathi'), ('my', 'Burmese'), ('nb', 'Norwegian Bokmål'), ('ne', 'Nepali'), ('nl', 'Dutch'), ('nn', 'Norwegian Nynorsk'), ('os', 'Ossetic'), ('pa', 'Punjabi'), ('pl', 'Polish'), ('pt', 'Portuguese'), ('pt-br', 'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru', 'Russian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('sq', 'Albanian'), ('sr', 'Serbian'), ('sr-latn', 'Serbian Latin'), ('sv', 'Swedish'), ('sw', 'Swahili'), ('ta', 'Tamil'), ('te', 'Telugu'), ('th', 'Thai'), ('tr', 'Turkish'), ('tt', 'Tatar'), ('udm', 'Udmurt'), ('uk', 'Ukrainian'), ('ur', 'Urdu'), ('vi', 'Vietnamese'), ('zh-hans', 'Simplified Chinese'), ('zh-hant', 'Traditional Chinese')]</pre></td> </tr> <tr> <td>LANGUAGES_BIDI</td> <td class="code"><pre>['he', 'ar', 'fa', 'ur']</pre></td> </tr> <tr> <td>LANGUAGE_CODE</td> <td class="code"><pre>'en-us'</pre></td> </tr> <tr> <td>LANGUAGE_COOKIE_AGE</td> <td class="code"><pre>None</pre></td> </tr> <tr> <td>LANGUAGE_COOKIE_DOMAIN</td> <td class="code"><pre>None</pre></td> </tr> <tr> <td>LANGUAGE_COOKIE_NAME</td> <td class="code"><pre>'django_language'</pre></td> </tr> <tr> <td>LANGUAGE_COOKIE_PATH</td> <td class="code"><pre>'/'</pre></td> </tr> <tr> <td>LOCALE_PATHS</td> <td class="code"><pre>[]</pre></td> </tr> <tr> <td>LOGGER</td> <td class="code"><pre><logging.Logger object at 0x7f3546bcb748></pre></td> </tr> <tr> <td>LOGGING</td> <td class="code"><pre>{}</pre></td> </tr> <tr> <td>LOGGING_CONFIG</td> <td class="code"><pre>'logging.config.dictConfig'</pre></td> </tr> <tr> <td>LOGIN_REDIRECT_URL</td> <td class="code"><pre>'index'</pre></td> </tr> <tr> <td>LOGIN_URL</td> <td class="code"><pre>'login'</pre></td> </tr> <tr> <td>LOGOUT_REDIRECT_URL</td> <td class="code"><pre>None</pre></td> </tr> <tr> <td>MANAGERS</td> <td class="code"><pre>[]</pre></td> </tr> <tr> <td>MEDIA_ROOT</td> <td class="code"><pre>''</pre></td> </tr> <tr> <td>MEDIA_URL</td> <td class="code"><pre>''</pre></td> </tr> <tr> <td>MESSAGE_STORAGE</td> <td class="code"><pre>'django.contrib.messages.storage.fallback.FallbackStorage'</pre></td> </tr> <tr> <td>MIDDLEWARE</td> <td class="code"><pre>['django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'talerbank.app.middleware.ExceptionMiddleware']</pre></td> </tr> <tr> <td>MIGRATION_MODULES</td> <td class="code"><pre>{}</pre></td> </tr> <tr> <td>MONTH_DAY_FORMAT</td> <td class="code"><pre>'F j'</pre></td> </tr> <tr> <td>NUMBER_GROUPING</td> <td class="code"><pre>0</pre></td> </tr> <tr> <td>P</td> <td class="code"><pre>{}</pre></td> </tr> <tr> <td>PASSWORD_HASHERS</td> <td class="code"><pre>'********************'</pre></td> </tr> <tr> <td>PASSWORD_RESET_TIMEOUT_DAYS</td> <td class="code"><pre>'********************'</pre></td> </tr> <tr> <td>PREPEND_WWW</td> <td class="code"><pre>False</pre></td> </tr> <tr> <td>ROOT_URLCONF</td> <td class="code"><pre>'talerbank.app.urls'</pre></td> </tr> <tr> <td>SECRET_KEY</td> <td class="code"><pre>'********************'</pre></td> </tr> <tr> <td>SECURE_BROWSER_XSS_FILTER</td> <td class="code"><pre>False</pre></td> </tr> <tr> <td>SECURE_CONTENT_TYPE_NOSNIFF</td> <td class="code"><pre>False</pre></td> </tr> <tr> <td>SECURE_HSTS_INCLUDE_SUBDOMAINS</td> <td class="code"><pre>False</pre></td> </tr> <tr> <td>SECURE_HSTS_PRELOAD</td> <td class="code"><pre>False</pre></td> </tr> <tr> <td>SECURE_HSTS_SECONDS</td> <td class="code"><pre>0</pre></td> </tr> <tr> <td>SECURE_PROXY_SSL_HEADER</td> <td class="code"><pre>None</pre></td> </tr> <tr> <td>SECURE_REDIRECT_EXEMPT</td> <td class="code"><pre>[]</pre></td> </tr> <tr> <td>SECURE_SSL_HOST</td> <td class="code"><pre>None</pre></td> </tr> <tr> <td>SECURE_SSL_REDIRECT</td> <td class="code"><pre>False</pre></td> </tr> <tr> <td>SERVER_EMAIL</td> <td class="code"><pre>'root@localhost'</pre></td> </tr> <tr> <td>SESSION_CACHE_ALIAS</td> <td class="code"><pre>'default'</pre></td> </tr> <tr> <td>SESSION_COOKIE_AGE</td> <td class="code"><pre>1209600</pre></td> </tr> <tr> <td>SESSION_COOKIE_DOMAIN</td> <td class="code"><pre>None</pre></td> </tr> <tr> <td>SESSION_COOKIE_HTTPONLY</td> <td class="code"><pre>True</pre></td> </tr> <tr> <td>SESSION_COOKIE_NAME</td> <td class="code"><pre>'sessionid'</pre></td> </tr> <tr> <td>SESSION_COOKIE_PATH</td> <td class="code"><pre>'/'</pre></td> </tr> <tr> <td>SESSION_COOKIE_SECURE</td> <td class="code"><pre>False</pre></td> </tr> <tr> <td>SESSION_ENGINE</td> <td class="code"><pre>'django.contrib.sessions.backends.db'</pre></td> </tr> <tr> <td>SESSION_EXPIRE_AT_BROWSER_CLOSE</td> <td class="code"><pre>False</pre></td> </tr> <tr> <td>SESSION_FILE_PATH</td> <td class="code"><pre>None</pre></td> </tr> <tr> <td>SESSION_SAVE_EVERY_REQUEST</td> <td class="code"><pre>False</pre></td> </tr> <tr> <td>SESSION_SERIALIZER</td> <td class="code"><pre>'django.contrib.sessions.serializers.JSONSerializer'</pre></td> </tr> <tr> <td>SETTINGS_MODULE</td> <td class="code"><pre>'talerbank.settings'</pre></td> </tr> <tr> <td>SHORT_DATETIME_FORMAT</td> <td class="code"><pre>'m/d/Y P'</pre></td> </tr> <tr> <td>SHORT_DATE_FORMAT</td> <td class="code"><pre>'m/d/Y'</pre></td> </tr> <tr> <td>SIGNING_BACKEND</td> <td class="code"><pre>'django.core.signing.TimestampSigner'</pre></td> </tr> <tr> <td>SILENCED_SYSTEM_CHECKS</td> <td class="code"><pre>[]</pre></td> </tr> <tr> <td>STATICFILES_DIRS</td> <td class="code"><pre>['/home/demo-blue/local/lib/python3.5/site-packages/talerbank/app/static', '/home/demo-blue/local/lib/python3.5/site-packages/talerbank/app/static/web-common']</pre></td> </tr> <tr> <td>STATICFILES_FINDERS</td> <td class="code"><pre>['django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder']</pre></td> </tr> <tr> <td>STATICFILES_STORAGE</td> <td class="code"><pre>'django.contrib.staticfiles.storage.StaticFilesStorage'</pre></td> </tr> <tr> <td>STATIC_ROOT</td> <td class="code"><pre>'/tmp/talerbankstatic/'</pre></td> </tr> <tr> <td>STATIC_URL</td> <td class="code"><pre>'/static/'</pre></td> </tr> <tr> <td>TALER_CURRENCY</td> <td class="code"><pre>'KUDOS'</pre></td> </tr> <tr> <td>TALER_DIGITS</td> <td class="code"><pre>2</pre></td> </tr> <tr> <td>TALER_EXPECTS_DONATIONS</td> <td class="code"><pre>['Tor', 'GNUnet', 'Taler', 'FSF']</pre></td> </tr> <tr> <td>TALER_MAX_DEBT</td> <td class="code"><pre>'KUDOS:0.0'</pre></td> </tr> <tr> <td>TALER_MAX_DEBT_BANK</td> <td class="code"><pre>'KUDOS:0.0'</pre></td> </tr> <tr> <td>TALER_PREDEFINED_ACCOUNTS</td> <td class="code"><pre>['Bank', 'Exchange', 'Tor', 'GNUnet', 'Taler', 'FSF', 'Tutorial', 'Survey']</pre></td> </tr> <tr> <td>TALER_SUGGESTED_EXCHANGE</td> <td class="code"><pre>'https://exchange.demo.taler.net/'</pre></td> </tr> <tr> <td>TC</td> <td class="code"><pre><talerbank.talerconfig.TalerConfig object at 0x7f3546bcb780></pre></td> </tr> <tr> <td>TEMPLATES</td> <td class="code"><pre>[{'BACKEND': 'django.template.backends.jinja2.Jinja2', 'DIRS': ['/home/demo-blue/local/lib/python3.5/site-packages/talerbank/app/static/web-common/', '/home/demo-blue/local/lib/python3.5/site-packages/talerbank/app/templates'], 'OPTIONS': {'environment': 'talerbank.jinja2.environment'}}]</pre></td> </tr> <tr> <td>TEMPLATE_CONTEXT_PROCESSORS</td> <td class="code"><pre>[]</pre></td> </tr> <tr> <td>TEST_NON_SERIALIZED_APPS</td> <td class="code"><pre>[]</pre></td> </tr> <tr> <td>TEST_RUNNER</td> <td class="code"><pre>'django.test.runner.DiscoverRunner'</pre></td> </tr> <tr> <td>THOUSAND_SEPARATOR</td> <td class="code"><pre>','</pre></td> </tr> <tr> <td>TIME_FORMAT</td> <td class="code"><pre>'P'</pre></td> </tr> <tr> <td>TIME_INPUT_FORMATS</td> <td class="code"><pre>['%H:%M:%S', '%H:%M:%S.%f', '%H:%M']</pre></td> </tr> <tr> <td>TIME_ZONE</td> <td class="code"><pre>'UTC'</pre></td> </tr> <tr> <td>USE_ETAGS</td> <td class="code"><pre>False</pre></td> </tr> <tr> <td>USE_I18N</td> <td class="code"><pre>True</pre></td> </tr> <tr> <td>USE_L10N</td> <td class="code"><pre>True</pre></td> </tr> <tr> <td>USE_THOUSAND_SEPARATOR</td> <td class="code"><pre>False</pre></td> </tr> <tr> <td>USE_TZ</td> <td class="code"><pre>True</pre></td> </tr> <tr> <td>USE_X_FORWARDED_HOST</td> <td class="code"><pre>False</pre></td> </tr> <tr> <td>USE_X_FORWARDED_PORT</td> <td class="code"><pre>False</pre></td> </tr> <tr> <td>WSGI_APPLICATION</td> <td class="code"><pre>'talerbank.wsgi.application'</pre></td> </tr> <tr> <td>X_FRAME_OPTIONS</td> <td class="code"><pre>'SAMEORIGIN'</pre></td> </tr> <tr> <td>YEAR_MONTH_FORMAT</td> <td class="code"><pre>'F Y'</pre></td> </tr> </tbody> </table> </div> <div id="explanation"> <p> You're seeing this error because you have <code>DEBUG = True</code> in your Django settings file. Change that to <code>False</code>, and Django will display a standard page generated by the handler for this status code. </p> </div> </body></html> | ||||
|
0ff63bf08ff3ffb fixes this. Moreover, it checks whether numbers to be parsed are bigger than the well known JavaScript limit of 2^53 - 1, and aborts everything in that case. |
Date Modified | Username | Field | Change |
---|---|---|---|
2018-03-27 18:10 | Torsten Grothoff | New Issue | |
2018-03-27 18:10 | Torsten Grothoff | Status | new => assigned |
2018-03-27 18:10 | Torsten Grothoff | Assigned To | => Marcello Stanisci |
2018-03-27 18:14 | Christian Grothoff | File Added: Intiger overflow(Input field) Gives an error that should look different.html | |
2018-03-27 18:14 | Christian Grothoff | Product Version | => git (master) |
2018-03-27 18:14 | Christian Grothoff | Target Version | => 0.6 |
2018-05-02 15:16 | Marcello Stanisci | Note Added: 0012920 | |
2018-05-02 15:17 | Marcello Stanisci | Status | assigned => resolved |
2018-05-02 15:17 | Marcello Stanisci | Resolution | open => fixed |
2018-06-12 09:01 | Christian Grothoff | Fixed in Version | => 0.6 |
2019-12-20 19:12 | Christian Grothoff | Status | resolved => closed |
2022-08-23 20:26 | Christian Grothoff | Category | bank (demonstrator) => py bank (demonstrator, obsolete) |
2023-12-03 01:23 | Christian Grothoff | Category | py bank (demonstrator, obsolete) => obsolete componet |
2023-12-11 20:08 | Florian Dold | Category | obsolete componet => obsolete component |