问题描述
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,您将获得无限循环。
以您的情况为例,循环条件不是范围,但它只是检查特定状态,如果不在此状态状态,代码将继续。
我看不到任何可能发生的不良情况的情况。