| @@ -935,7 +935,10 @@ Status ParseDynamicInputShapeRange(const std::string &shape_range, | |||||
| return PARAM_INVALID; | return PARAM_INVALID; | ||||
| } | } | ||||
| for (auto &shape_range_str : shape_range_set) { | for (auto &shape_range_str : shape_range_set) { | ||||
| if (shape_range_str.empty()) { | |||||
| if (shape_range_str.size() < 3) { | |||||
| // shape_range_str should be "[2~3,1" | |||||
| // or ",[2~3,1". because we should trim '[' or ',[' | |||||
| // so shape_range_str.size() < 3 is invalid | |||||
| continue; | continue; | ||||
| } | } | ||||
| // trim start bytes, after that, single input should be "1~20,3,3~6,-1" | // trim start bytes, after that, single input should be "1~20,3,3~6,-1" | ||||
| @@ -1017,16 +1020,27 @@ Status UpdateDynamicInputShapeRange(const ge::GeAttrValue::INT index, | |||||
| return PARAM_INVALID; | return PARAM_INVALID; | ||||
| } | } | ||||
| for (size_t i = 0; i < origin_shape.GetDimNum(); ++i) { | for (size_t i = 0; i < origin_shape.GetDimNum(); ++i) { | ||||
| if (current_shape_range_vec.at(i).first == current_shape_range_vec.at(i).second) { | |||||
| auto curr_dim = origin_shape.GetDim(i); | |||||
| auto left_range = current_shape_range_vec.at(i).first; | |||||
| auto right_range = current_shape_range_vec.at(i).second; | |||||
| if (left_range == right_range) { | |||||
| // given shape_range is known dim, check is same as origin or not | // given shape_range is known dim, check is same as origin or not | ||||
| if (origin_shape.GetDim(i) != current_shape_range_vec.at(i).first) { | |||||
| if (curr_dim != left_range) { | |||||
| GELOGE(PARAM_INVALID, "Given shape range is %ld, current dim shape is %ld, not match.Pleace Check.", | GELOGE(PARAM_INVALID, "Given shape range is %ld, current dim shape is %ld, not match.Pleace Check.", | ||||
| current_shape_range_vec.at(i).first, origin_shape.GetDim(i)); | |||||
| left_range, curr_dim); | |||||
| return PARAM_INVALID; | return PARAM_INVALID; | ||||
| } | } | ||||
| origin_shape.SetDim(i, current_shape_range_vec.at(i).first); | |||||
| origin_shape.SetDim(i, left_range); | |||||
| } else { | } else { | ||||
| origin_shape.SetDim(i, -1); | |||||
| // given shape_range is fix range, check input_shape is in this range or not | |||||
| if (right_range != UNKNOWN_DIM) { | |||||
| if ((curr_dim < left_range) || (curr_dim > right_range)) { | |||||
| GELOGE(PARAM_INVALID, "Given shape range is [%ld~%ld], current dim shape is %ld, out of range.Pleace Check.", | |||||
| left_range, right_range, curr_dim); | |||||
| return PARAM_INVALID; | |||||
| } | |||||
| } | |||||
| origin_shape.SetDim(i, UNKNOWN_DIM); | |||||
| } | } | ||||
| } | } | ||||
| desc.SetShape(origin_shape); | desc.SetShape(origin_shape); | ||||