Skip to content

Argument as a substring int causes exception #52

Description

@djolly-fuze

This sample extensions.conf

[macro-callerid-name-shorten]
exten => s,1,Set(CALLERID(name)=${CALLERID(name):0:${ARG1}})

causes an exception in asterisklint

Traceback (most recent call last):
  File "/usr/local/lib/python3.9/site-packages/asterisklint/config.py", line 186, in __iter__
    self.on_varset(element)
  File "/usr/local/lib/python3.9/site-packages/asterisklint/dialplan.py", line 600, in on_varset
    dialplanvarset = DialplanVarset.from_varset(varset)
  File "/usr/local/lib/python3.9/site-packages/asterisklint/dialplan.py", line 508, in from_varset
    app = App(app, varset.where)
  File "/usr/local/lib/python3.9/site-packages/asterisklint/application.py", line 111, in __init__
    self.parse()
  File "/usr/local/lib/python3.9/site-packages/asterisklint/application.py", line 134, in parse
    self.data = self.parse_inner(self.data)
  File "/usr/local/lib/python3.9/site-packages/asterisklint/application.py", line 149, in parse_inner
    data = VarLoader().parse_variables(data, self.where)
  File "/usr/local/lib/python3.9/site-packages/asterisklint/varfun.py", line 288, in parse_variables
    inner_data = self._process_variable(
  File "/usr/local/lib/python3.9/site-packages/asterisklint/varfun.py", line 330, in _process_variable
    return FuncLoader().process_read_function(data, where)
  File "/usr/local/lib/python3.9/site-packages/asterisklint/varfun.py", line 182, in process_read_function
    return ReadFuncSlice(func, args, start=start, length=length)
  File "/usr/local/lib/python3.9/site-packages/asterisklint/variable.py", line 257, in __init__
    if length < 0:
TypeError: '<' not supported between instances of 'Var' and 'int'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/local/bin/asterisklint", line 34, in <module>
    sys.exit(main(sys.argv[1:], os.environ))
  File "/usr/local/lib/python3.9/site-packages/asterisklint/main.py", line 178, in main
    return command_module.main(args, envs)
  File "/usr/local/lib/python3.9/site-packages/asterisklint/mainutil.py", line 35, in __call__
    return self.handle_args(args)
  File "/usr/local/lib/python3.9/site-packages/asterisklint/commands/dialplan-check.py", line 50, in handle_args
    dialplan = next(iter(parser))
  File "/usr/local/lib/python3.9/site-packages/asterisklint/config.py", line 192, in __iter__
    raise ProgrammingError(str(element.where)) from exc
asterisklint.config.ProgrammingError: An unexpected exception was raised. This is most likely a bug in the asterisklint library. If you can reproduce the problem and file an issue on the bug tracker, that would be nice. Further info: extensions.conf:2

Replacing ${ARG1} with a hardcoded integer works as expected, but for my logic, it must be a variable.

I can't find a decent workaround as wrapping ARG1 with TRUNC and MATH function also produce similar comparison exceptions but different instances instead of 'Var', 'ReadFunc' and 'Expr' respectively.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions