Отчет о статическом анализе Java JTest - утечка путей файловой системы ("b") через веб-страницу - PullRequest
0 голосов
/ 11 октября 2018

Отчет статического анализа JTest показывает ошибку серьезности 1 для приведенного ниже кода в методе generateReport. Проблема возникает для строки os.write (b, 0, count) в цикле while.ОС в основном ServletOutputStream.Сообщение отчета JTest: «Утечка путей файловой системы (« b ») через веб-страницу».Как я могу решить эту проблему?

public void generateReport(final CommandContext<String, Object> input, final Collection<Object> dataList,
        final Map<String, Object> paramMap, final String reportName, final String reportType, final String fileType,
        final String connectType) throws CommandException {
    String tempfilename = null;
    try {
        final HttpServletResponse response = ((ServletCommandContext<String, Object>) input).getResponse();
        final Map<String, Object> dataMap = ipeReportService.generateReport(dataList, paramMap, reportType,
                fileType, connectType);
        final Long fileLength = (Long) dataMap.get("length");
        response.setContentLength(fileLength.intValue());
        try (InputStream fis = (InputStream) dataMap.get("InputStream");
                OutputStream os = response.getOutputStream();) {
            tempfilename = (String) dataMap.get("FileAbsolutePath");
            final byte[] b = new byte[1024];
            int count = fis.read(b);
            while (count > -1) {
                os.write(b, 0, count);
                count = fis.read(b);
            }
            Arrays.fill(b, (byte) 0);
            os.flush();
        } catch (final IOException e) {
            logger.error(e.getMessage(), e);
        }
        response.flushBuffer();
        input.setForwardRequired(false);
    } catch (final Exception e) {
        logger.error(e.getMessage(), e);
        throw new CommandException(e);
    } finally {
        // delete temp file
        if (tempfilename != null) {
            final File f = new File(tempfilename);
            if (f.exists()) {
                f.delete();
            }
        }
    }
}
...