Trap integer overflow errors in search query
authorMagnus Hagander <magnus@hagander.net>
Wed, 9 Nov 2016 22:00:07 +0000 (23:00 +0100)
committerMagnus Hagander <magnus@hagander.net>
Wed, 9 Nov 2016 22:00:07 +0000 (23:00 +0100)
This just caused a database error to leak through to the user, but also
flooded the logs.

pgweb/search/views.py

index bf0077b89d31390a450af5fd0e5d82669b626cd9..3650976f35916e8968ae7b04dd21233113f4386b 100644 (file)
@@ -251,13 +251,18 @@ def search(request):
                                        }, RequestContext(request))
 
                # perform the query for general web search
-               curs.execute("SELECT * FROM site_search(%(query)s, %(firsthit)s, %(hitsperpage)s, %(allsites)s, %(suburl)s)", {
+               try:
+                       curs.execute("SELECT * FROM site_search(%(query)s, %(firsthit)s, %(hitsperpage)s, %(allsites)s, %(suburl)s)", {
                                'query': query,
                                'firsthit': firsthit - 1,
                                'hitsperpage': hitsperpage,
                                'allsites': allsites,
                                'suburl': suburl
                                })
+               except ProgrammingError:
+                       return render_to_response('search/sitesearch.html', {
+                                       'search_error': 'Error executing search query.'
+                                       }, RequestContext(request))
 
                hits = curs.fetchall()
                conn.close()