Issue 967: Submitting project.config with invalid description leads to Exception on submit
Status:  Accepted
Owner: ----
Project Member Reported by stefanl...@gmail.com, May 20, 2011
Affected Version:

What steps will reproduce the problem?
1. Locally edit the project description in project.config with some text containing a line without \n\ at the end but at the next line:

description = Some text\n\
line wo line break
\n\
new line

2. Push to /refs/for/refs/meta/config
3. Review and Submit

What is the expected output? What do you see instead?
There is an Exception (see below) and the state of the change is "Submitted, Merge Pending"

com.google.gerrit.server.git.MergeException: Submit would store invalid project configuration e1e8e91c55036c312cec069a9986cbd2f9150b10 for otherproject
	at com.google.gerrit.server.git.MergeOp.updateBranch(MergeOp.java:880)
	at com.google.gerrit.server.git.MergeOp.mergeImpl(MergeOp.java:238)
	at com.google.gerrit.server.git.MergeOp.merge(MergeOp.java:205)
	at com.google.gerrit.server.git.ChangeMergeQueue.mergeImpl(ChangeMergeQueue.java:179)
	at com.google.gerrit.server.git.ChangeMergeQueue.merge(ChangeMergeQueue.java:99)
	at com.google.gerrit.server.ChangeUtil.submit(ChangeUtil.java:170)
	at com.google.gerrit.httpd.rpc.changedetail.SubmitAction.call(SubmitAction.java:84)
	at com.google.gerrit.httpd.rpc.changedetail.SubmitAction.call(SubmitAction.java:1)
	at com.google.gerrit.httpd.rpc.Handler.to(Handler.java:65)
	at com.google.gerrit.httpd.rpc.changedetail.ChangeManageServiceImpl.submit(ChangeManageServiceImpl.java:39)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at com.google.gwtjsonrpc.server.MethodHandle.invoke(MethodHandle.java:91)
	at com.google.gwtjsonrpc.server.JsonServlet.doService(JsonServlet.java:382)
	at com.google.gwtjsonrpc.server.JsonServlet.service(JsonServlet.java:268)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at com.google.inject.servlet.ServletDefinition.doService(ServletDefinition.java:216)
	at com.google.inject.servlet.ServletDefinition.service(ServletDefinition.java:141)
	at com.google.inject.servlet.ManagedServletPipeline.service(ManagedServletPipeline.java:93)
	at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:63)
	at com.google.inject.servlet.FilterDefinition.doFilter(FilterDefinition.java:134)
	at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:59)
	at com.google.inject.servlet.FilterDefinition.doFilter(FilterDefinition.java:134)
	at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:59)
	at com.google.gwtexpui.server.CacheControlFilter.doFilter(CacheControlFilter.java:76)
	at com.google.inject.servlet.FilterDefinition.doFilter(FilterDefinition.java:129)
	at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:59)
	at com.google.gerrit.httpd.RequestCleanupFilter.doFilter(RequestCleanupFilter.java:54)
	at com.google.inject.servlet.FilterDefinition.doFilter(FilterDefinition.java:129)
	at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:59)
	at com.google.inject.servlet.ManagedFilterPipeline.dispatch(ManagedFilterPipeline.java:122)
	at com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:110)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1088)
	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360)
	at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
	at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
	at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:729)
	at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
	at org.mortbay.jetty.handler.RequestLogHandler.handle(RequestLogHandler.java:49)
	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
	at org.mortbay.jetty.Server.handle(Server.java:324)
	at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
	at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:843)
	at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:647)
	at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
	at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
	at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488)
Caused by: org.eclipse.jgit.errors.ConfigInvalidException: Invalid config file project.config in commite1e8e91c55036c312cec069a9986cbd2f9150b10
	at com.google.gerrit.server.git.VersionedMetaData.readConfig(VersionedMetaData.java:240)
	at com.google.gerrit.server.git.ProjectConfig.onLoad(ProjectConfig.java:177)
	at com.google.gerrit.server.git.VersionedMetaData.load(VersionedMetaData.java:121)
	at com.google.gerrit.server.git.MergeOp.updateBranch(MergeOp.java:878)
	... 50 more
Caused by: org.eclipse.jgit.errors.ConfigInvalidException: Bad entry name: 
	at org.eclipse.jgit.lib.Config.readKeyName(Config.java:1155)
	at org.eclipse.jgit.lib.Config.fromText(Config.java:1045)
	at com.google.gerrit.server.git.VersionedMetaData.readConfig(VersionedMetaData.java:238)
	... 53 more

Please provide any additional information below.

May 20, 2011
Project Member #1 nas...@grainawi.org
(No comment was entered for this change.)
Status: Accepted
May 23, 2011
#2 sop@google.com
(No comment was entered for this change.)
Labels: git-store