changeset 38931:5caee9f923ae stable

hgweb: catch ParseError that's raised by revset.match() Some queries, like the demonstrated "first(::)", fail earlier than we call mfunc(), and that results in a "500 Internal Server Error". To prevent it, revset.match() also needs to be in a try-except block.
author Anton Shestakov <av6@dwimlabs.net>
date Thu, 09 Aug 2018 13:04:52 +0800
parents c9e6ca31cfe7
children 7e023ce26c7f
files mercurial/hgweb/webcommands.py tests/test-hgweb-commands.t
diffstat 2 files changed, 12 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/hgweb/webcommands.py	Fri Aug 03 15:09:19 2018 -0400
+++ b/mercurial/hgweb/webcommands.py	Thu Aug 09 13:04:52 2018 +0800
@@ -276,9 +276,9 @@
         if not funcsused.issubset(revset.safesymbols):
             return MODE_KEYWORD, query
 
-        mfunc = revset.match(web.repo.ui, revdef,
-                             lookup=revset.lookupfn(web.repo))
         try:
+            mfunc = revset.match(web.repo.ui, revdef,
+                                 lookup=revset.lookupfn(web.repo))
             revs = mfunc(web.repo)
             return MODE_REVSET, revs
             # ParseError: wrongly placed tokens, wrongs arguments, etc
--- a/tests/test-hgweb-commands.t	Fri Aug 03 15:09:19 2018 -0400
+++ b/tests/test-hgweb-commands.t	Thu Aug 09 13:04:52 2018 +0800
@@ -1227,6 +1227,16 @@
   # Mode literal keyword search
   
   
+  $ get-with-headers.py $LOCALIP:$HGPORT 'log?rev=first(::)&style=raw'
+  200 Script output follows
+  
+  
+  # HG changesets search
+  # Node ID cad8025a2e87f88c06259790adfa15acb4080123
+  # Query "first(::)"
+  # Mode literal keyword search
+  
+  
 
 Revset query with foo-bar bookmark (issue5879)