Summary:ASTERISK-30293: Memory leak in JSON_DECODE
Reporter:David Uczen (duczen)Labels:
Date Opened:2022-11-09 18:31:41.000-0600Date Closed:2022-11-21 07:49:55.000-0600
Versions:18.13.0 18.15.0 Frequency of
Environment:Centos 7, alpineAttachments:( 0) extensions.conf
Description:Calls to JSON_DECODE appear to be leaking memory. The more this function is called and/or the larger the size of the json being parsed the worse the leak appears to be.  

We started using this function to parse some call routing data from a json api and have been seeing servers quickly run out of memory. The memory increases in line with call volume and is not recovered. We wrote some test dialplan (see attached) that parses json in a loop to reproduce the issue and can confirm it exists in both 18.13.0 and 18.15.0 we compiled ourselves on centos as well as the packaged version that exists in alpine:latest (18.13.0).

Note: Functions/json_decode is not available in the dropdown for 'Components' at the time of issue creation.
Comments:By: Asterisk Team (asteriskteam) 2022-11-09 18:31:45.953-0600

Thanks for creating a report! The issue has entered the triage process. That means the issue will wait in this status until a Bug Marshal has an opportunity to review the issue. Once the issue has been reviewed you will receive comments regarding the next steps towards resolution. Please note that log messages and other files should not be sent to the Sangoma Asterisk Team unless explicitly asked for. All files should be placed on this issue in a sanitized fashion as needed.

A good first step is for you to review the [Asterisk Issue Guidelines|https://wiki.asterisk.org/wiki/display/AST/Asterisk+Issue+Guidelines] if you haven't already. The guidelines detail what is expected from an Asterisk issue report.

Then, if you are submitting a patch, please review the [Patch Contribution Process|https://wiki.asterisk.org/wiki/display/AST/Patch+Contribution+Process].

Please note that once your issue enters an open state it has been accepted. As Asterisk is an open source project there is no guarantee or timeframe on when your issue will be looked into. If you need expedient resolution you will need to find and pay a suitable developer. Asking for an update on your issue will not yield any progress on it and will not result in a response. All updates are posted to the issue when they occur.

Please note that by submitting data, code, or documentation to Sangoma through JIRA, you accept the Terms of Use present at [https://www.asterisk.org/terms-of-use/|https://www.asterisk.org/terms-of-use/].

By: David Uczen (duczen) 2022-11-09 18:34:13.753-0600

Example extensions.conf that reproduces the issue

By: Joshua C. Colp (jcolp) 2022-11-10 03:14:34.395-0600

The module you're having difficulty with is in 'extended' support status and is supported only by community members.  Your issue is in the queue. Your patience is appreciated as a community developer may work the issue when time and resources become available.

Asterisk is an open source project and community members work the issues on a voluntary basis. You are welcome to develop your own patches and submit them to the project.[1]

If you are not a programmer and you are in a hurry to see a patch provided then you might try rallying support on the Asterisk users mailing list or forums.[2] Another alternative is offering a bug bounty on the asterisk-dev mailing list.[3] Often a little incentive can go a long way.

[1]: https://wiki.asterisk.org/wiki/display/AST/Patch+Contribution+Process
[2]: http://www.asterisk.org/community/discuss
[3]: https://wiki.asterisk.org/wiki/display/AST/Asterisk+Bug+Bounties

By: Joshua C. Colp (jcolp) 2022-11-10 03:14:51.853-0600

[~InterLinked] Will you be looking at this?

By: N A (InterLinked) 2022-11-10 05:46:59.608-0600

@Joshua C. Colp You can assign it to me.

By: N A (InterLinked) 2022-11-10 06:27:02.441-0600

@David Uczen Applying this patch should resolve your issue: https://issues.asterisk.org/jira/browse/ASTERISK-30293

If you replace your func_json.c, run make && make install, you can run "module refresh func_json" on a running Asterisk system to stop the problem from worsening on an existing system, without restarting it (that won't clear previous memory leaks up to that point, you'd need to restart Asterisk to eliminate those).

By: Friendly Automation (friendly-automation) 2022-11-21 07:49:56.218-0600

Change 19551 merged by Friendly Automation:
func_json: Fix memory leak.


By: Friendly Automation (friendly-automation) 2022-11-21 08:29:43.146-0600

Change 19552 merged by Friendly Automation:
func_json: Fix memory leak.


By: Friendly Automation (friendly-automation) 2022-11-21 08:46:08.728-0600

Change 19477 merged by George Joseph:
func_json: Fix memory leak.