mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-17 02:31:14 +01:00
fix possible stackoverflow in git request handling
This commit is contained in:
@@ -95,6 +95,7 @@ public class ScmGitServlet extends GitServlet
|
|||||||
* @param repositoryViewer
|
* @param repositoryViewer
|
||||||
* @param repositoryProvider
|
* @param repositoryProvider
|
||||||
* @param repositoryRequestListenerUtil
|
* @param repositoryRequestListenerUtil
|
||||||
|
* @param lfsServletFactory
|
||||||
*/
|
*/
|
||||||
@Inject
|
@Inject
|
||||||
public ScmGitServlet(GitRepositoryResolver repositoryResolver,
|
public ScmGitServlet(GitRepositoryResolver repositoryResolver,
|
||||||
@@ -164,22 +165,19 @@ public class ScmGitServlet extends GitServlet
|
|||||||
* </ul>
|
* </ul>
|
||||||
*/
|
*/
|
||||||
private void handleRequest(HttpServletRequest request, HttpServletResponse response, Repository repository) throws ServletException, IOException {
|
private void handleRequest(HttpServletRequest request, HttpServletResponse response, Repository repository) throws ServletException, IOException {
|
||||||
|
|
||||||
logger.trace("--- Repository is: {}", repository.getName());
|
logger.trace("--- Repository is: {}", repository.getName());
|
||||||
if (isLfsBatchApiRequest(request, repository.getName())) {
|
if (isLfsBatchApiRequest(request, repository.getName())) {
|
||||||
|
|
||||||
logger.trace("--- detected LFS Batch API Request");
|
logger.trace("--- detected LFS Batch API Request");
|
||||||
HttpServlet servlet = lfsServletFactory.createProtocolServletFor(repository, request);
|
handleGitLfsRequest(request, response, repository);
|
||||||
handleGitRequest(servlet, request, response, repository);
|
|
||||||
} else if (isLfsFileTransferRequest(request, repository.getName())) {
|
} else if (isLfsFileTransferRequest(request, repository.getName())) {
|
||||||
|
|
||||||
logger.trace("--- detected LFS File Transfer Request");
|
logger.trace("--- detected LFS File Transfer Request");
|
||||||
HttpServlet servlet = lfsServletFactory.createFileLfsServletFor(repository, request);
|
handleGitLfsRequest(request, response, repository);
|
||||||
handleGitRequest(servlet, request, response, repository);
|
|
||||||
} else if (isRegularGitAPIRequest(request)) {
|
} else if (isRegularGitAPIRequest(request)) {
|
||||||
logger.trace("--- seems to be regular Git HTTP backend request: {}", request.getRequestURI());
|
logger.trace("--- seems to be regular Git HTTP backend request: {}", request.getRequestURI());
|
||||||
// continue with the regular git Backend
|
// continue with the regular git Backend
|
||||||
handleGitRequest(this, request, response, repository);
|
handleRegularGitRequest(request, response, repository);
|
||||||
} else {
|
} else {
|
||||||
renderHtmlRepositryOverview(request, response);
|
renderHtmlRepositryOverview(request, response);
|
||||||
}
|
}
|
||||||
@@ -189,7 +187,8 @@ public class ScmGitServlet extends GitServlet
|
|||||||
return HttpUtil.getStrippedURI(request).matches(REGEX_GITHTTPBACKEND);
|
return HttpUtil.getStrippedURI(request).matches(REGEX_GITHTTPBACKEND);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleGitRequest(HttpServlet servlet, HttpServletRequest request, HttpServletResponse response, Repository repository) throws ServletException, IOException {
|
private void handleGitLfsRequest(HttpServletRequest request, HttpServletResponse response, Repository repository) throws ServletException, IOException {
|
||||||
|
HttpServlet servlet = lfsServletFactory.createProtocolServletFor(repository, request);
|
||||||
if (repositoryRequestListenerUtil.callListeners(request, response, repository)) {
|
if (repositoryRequestListenerUtil.callListeners(request, response, repository)) {
|
||||||
servlet.service(request, response);
|
servlet.service(request, response);
|
||||||
} else if (logger.isDebugEnabled()) {
|
} else if (logger.isDebugEnabled()) {
|
||||||
@@ -197,6 +196,14 @@ public class ScmGitServlet extends GitServlet
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void handleRegularGitRequest(HttpServletRequest request, HttpServletResponse response, Repository repository) throws ServletException, IOException {
|
||||||
|
if (repositoryRequestListenerUtil.callListeners(request, response, repository)) {
|
||||||
|
super.service(request, response);
|
||||||
|
} else if (logger.isDebugEnabled()) {
|
||||||
|
logger.debug("request aborted by repository request listener");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method renders basic information about the repository into the response. The result is meant to be viewed by
|
* This method renders basic information about the repository into the response. The result is meant to be viewed by
|
||||||
|
|||||||
Reference in New Issue
Block a user