diff --git a/agents/agentreq.go b/agents/agentreq.go index 440d7deb8..07b58d729 100644 --- a/agents/agentreq.go +++ b/agents/agentreq.go @@ -432,10 +432,21 @@ func (ar *AgentRequest) ParseField( out = strconv.Itoa(int(t.Unix())) case utils.MetaSIPCID: isString = true - values := make([]string, len(cfgFld.Value)) - for i, val := range cfgFld.Value { - if values[i], err = val.ParseDataProvider(ar, utils.NestingSep); err != nil { - return nil, err + values := make([]string, 1, len(cfgFld.Value)) + if len(cfgFld.Value) < 1 { + return nil, fmt.Errorf("invalid number of arguments <%s> to %s", + utils.ToJSON(cfgFld.Value), utils.MetaSIPCID) + } + if values[0], err = cfgFld.Value[0].ParseDataProvider(ar, utils.NestingSep); err != nil { + return + } + for _, val := range cfgFld.Value[1:] { + var valStr string + if valStr, err = val.ParseDataProvider(ar, utils.NestingSep); err != nil && err != utils.ErrNotFound { + return + } + if len(valStr) != 0 && err != utils.ErrNotFound { + values = append(values, valStr) } } sort.Strings(values[1:]) diff --git a/engine/attributes.go b/engine/attributes.go index 0cabe01f2..97ebf97bb 100644 --- a/engine/attributes.go +++ b/engine/attributes.go @@ -248,11 +248,22 @@ func (alS *AttributeService) processEvent(args *AttrArgsProcessEvent) ( substitute = strconv.FormatFloat(utils.Round(val*math.Pow10(exp), config.CgrConfig().GeneralCfg().RoundingDecimals, utils.ROUNDING_MIDDLE), 'f', -1, 64) case utils.MetaSIPCID: - values := make([]string, len(attribute.Value)) - for i, val := range attribute.Value { - if values[i], err = val.ParseDataProvider(evNm, utils.NestingSep); err != nil { + values := make([]string, 1, len(attribute.Value)) + if len(attribute.Value) < 1 { + return nil, fmt.Errorf("invalid number of arguments <%s> to %s", + utils.ToJSON(attribute.Value), utils.MetaSIPCID) + } + if values[0], err = attribute.Value[0].ParseDataProvider(evNm, utils.NestingSep); err != nil { + return nil, err + } + for _, val := range attribute.Value[1:] { + var valStr string + if valStr, err = val.ParseDataProvider(evNm, utils.NestingSep); err != nil && err != utils.ErrNotFound { return nil, err } + if len(valStr) != 0 && err != utils.ErrNotFound { + values = append(values, valStr) + } } sort.Strings(values[1:]) substitute = strings.Join(values, utils.INFIELD_SEP)