From c6052351583e75126d1e411f4a2a3facaabf3e9d Mon Sep 17 00:00:00 2001
From: Branson Stephens <branson.stephens@ligo.org>
Date: Wed, 30 Mar 2016 15:38:55 -0500
Subject: [PATCH] Fixed bug #3901.

---
 gracedb/api.py   | 9 +++++++--
 gracedb/views.py | 8 +++++++-
 2 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/gracedb/api.py b/gracedb/api.py
index 14fadd595..bd24a887d 100644
--- a/gracedb/api.py
+++ b/gracedb/api.py
@@ -48,7 +48,7 @@ from utils.vfile import VersionedFile
 # for checking queries in the evnet that the user is external
 #
 from view_utils import BadFARRange, check_query_far_range
-from query import parseQuery
+from query import parseQuery, ParseException
 
 ##################################################################
 
@@ -415,7 +415,12 @@ class EventList(APIView):
                     msg = 'FAR query out of range, upper limit must be below %s' % settings.VOEVENT_FAR_FLOOR
                     d = {'error': msg }
                     return Response(d,status=status.HTTP_400_BAD_REQUEST)
-
+                except ParseException: 
+                    d = {'error': 'Invalid query' }
+                    return Response(d,status=status.HTTP_400_BAD_REQUEST)
+                except Exception, e:
+                    d = {'error': str(e) }
+                    return Response(d,status=status.HTTP_500_INTERNAL_SERVER_ERROR)
             form = SimpleSearchForm(request.GET)
             if form.is_valid():
                 events = form.cleaned_data['query']
diff --git a/gracedb/views.py b/gracedb/views.py
index 6bc2ed41e..fd99104f8 100644
--- a/gracedb/views.py
+++ b/gracedb/views.py
@@ -43,7 +43,7 @@ from django.utils.functional import wraps
 # for checking queries in the evnet that the user is external
 #
 from view_utils import BadFARRange, check_query_far_range
-from query import parseQuery
+from query import parseQuery, ParseException
 
 #
 # A wrapper for retrieving an event and replacing graceid 
@@ -441,6 +441,12 @@ def search(request, format=""):
             except BadFARRange:
                 msg = 'FAR query out of range, upper limit must be below %s' % settings.VOEVENT_FAR_FLOOR
                 return HttpResponseBadRequest(msg) 
+            except ParseException:
+                # If the user's query throws a parse exception, it is safe to 
+                # proceed and show the error message in the search results template (red star)
+                pass
+            except Exception, e:
+                return HttpResponseServerError(str(e))
         if form.is_valid():
             objects = form.cleaned_data['query']
             get_neighbors = form.cleaned_data['get_neighbors']
-- 
GitLab