mirror of
				https://github.com/scm-manager/scm-manager.git
				synced 2025-11-03 20:15:52 +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 repositoryProvider
 | 
			
		||||
   * @param repositoryRequestListenerUtil
 | 
			
		||||
   * @param lfsServletFactory
 | 
			
		||||
   */
 | 
			
		||||
  @Inject
 | 
			
		||||
  public ScmGitServlet(GitRepositoryResolver repositoryResolver,
 | 
			
		||||
@@ -164,22 +165,19 @@ public class ScmGitServlet extends GitServlet
 | 
			
		||||
   * </ul>
 | 
			
		||||
   */
 | 
			
		||||
  private void handleRequest(HttpServletRequest request, HttpServletResponse response, Repository repository) throws ServletException, IOException {
 | 
			
		||||
    
 | 
			
		||||
    logger.trace("--- Repository is: {}", repository.getName());
 | 
			
		||||
    if (isLfsBatchApiRequest(request, repository.getName())) {
 | 
			
		||||
      
 | 
			
		||||
      logger.trace("--- detected LFS Batch API Request");
 | 
			
		||||
      HttpServlet servlet = lfsServletFactory.createProtocolServletFor(repository, request);
 | 
			
		||||
      handleGitRequest(servlet, request, response, repository);
 | 
			
		||||
      handleGitLfsRequest(request, response, repository);
 | 
			
		||||
    } else if (isLfsFileTransferRequest(request, repository.getName())) {
 | 
			
		||||
 | 
			
		||||
      logger.trace("--- detected LFS File Transfer Request");
 | 
			
		||||
      HttpServlet servlet = lfsServletFactory.createFileLfsServletFor(repository, request);
 | 
			
		||||
      handleGitRequest(servlet, request, response, repository);
 | 
			
		||||
      handleGitLfsRequest(request, response, repository);
 | 
			
		||||
    } else if (isRegularGitAPIRequest(request)) {
 | 
			
		||||
      logger.trace("--- seems to be regular Git HTTP backend request: {}", request.getRequestURI());
 | 
			
		||||
      // continue with the regular git Backend
 | 
			
		||||
      handleGitRequest(this, request, response, repository);
 | 
			
		||||
      handleRegularGitRequest(request, response, repository);
 | 
			
		||||
    } else {
 | 
			
		||||
      renderHtmlRepositryOverview(request, response);
 | 
			
		||||
    }
 | 
			
		||||
@@ -189,7 +187,8 @@ public class ScmGitServlet extends GitServlet
 | 
			
		||||
    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)) {
 | 
			
		||||
      servlet.service(request, response);
 | 
			
		||||
    } 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
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user