未经检查的循环条件输入-LocalDate的CheckMarx错误

问题描述

    public List<ExchangeRate> getExchangeRate(@RequestBody @Validated ExchangeRateRequest exchangeRateRequest) {
        LocalDateTime conversionDateTime = parseConversionDateTime(exchangeRateRequest.getConversionDateTime());
        List<ExchangeRate> exchangeRateList = service.getExchangeRates(exchangeRateRequest,conversionDateTime);
        return exchangeRateList;
    }

    private LocalDate getPrevIoUsBusinessDate(LocalDateTime conversionDateTime) {
        zoneddatetime localConversionDateTimeWithZone = zoneddatetime.of(conversionDateTime,ZoneOffset.systemDefault());
        zoneddatetime conversionDateTimeAtUtc = localConversionDateTimeWithZone.withZonesameInstant(ZoneOffset.UTC);
        LocalDate currentUtcDate = conversionDateTimeAtUtc.toLocalDate();
        LocalDate prev = currentUtcDate.minusDays(1);
        while(prev.getDayOfWeek()==DayOfWeek.SUNDAY || prev.getDayOfWeek()==DayOfWeek.SATURDAY) {
            prev = prev.minusDays(1);
        }
        return prev;
    }

public class ExchangeRateRequest {
    private final String conversionDateTime;

    @Valid
    private final List<ExchangeRateCurrency> currencies;

    @JsonCreator
    public ExchangeRateRequest(@JsonProperty("conversionDateTime") String conversionDateTime,@JsonProperty("currencies") List<ExchangeRateCurrency> currencies) {
        this.conversionDateTime = conversionDateTime;
        this.currencies = currencies;
    }
}

元素 exchangeRateRequest 在未经验证的情况下流经代码,最终在ExchangeRateService.java的getPrevIoUsBusinessDate中的循环条件中使用。这构成了循环条件的未经检查的输入。

我该如何解决

解决方法

我认为这种情况是误报,您无事可做(只是要求您的 Checkmark 所有者忽略此结果。

循环条件未经检查的输入意味着循环可能会意外运行,因为条件没有得到清除。

例如,如果您在一个循环中进行了困难的计算,并且例如,您希望从用户那里获得一个星期几,以便在一周的下一个休息日运行计算,用户可以给您数字8,您将获得无限循环。

以您的情况为例,循环条件不是范围,但它只是检查特定状态,如果不在此状态状态,代码将继续。

我看不到任何可能发生的不良情况的情况。