[sr-dev] Assigning a null value from a $sht to a $var fails after upgrade on master

Daniel-Constantin Mierla miconda at gmail.com
Wed Nov 27 23:55:49 CET 2013


Hello,

On 11/25/13 1:51 PM, Hugh Waite wrote:
> Hello,
> We are having an issue with PVs after upgrading to the latest master 
> (i.e. 4.1.0-pre1) which might be related to the comparison of $null and 0
> In our previous version (compiled on 9th October) the following code 
> worked. It is using the htable as a DB cache
>
> $var(ip_trusted) = $sht(trusted=>$var(srcip));
> if($var(ip_trusted) == $null) {
>   /* DB lookup */
>   $sht(trusted->$var(srcip)) = $var(ip_trusted);
> }
>
> After upgrading, the first line is not working as expected. The htable 
> value is null (not assigned), but the $var(ip_trusted) value is 
> assigned the value 0, so the check fails.
>
> Is this related to the pv comparison bugfix 
> (http://git.sip-router.org/cgi-bin/gitweb.cgi?p=sip-router;a=commitdiff;h=3856e9e81c8410b220b893a0dfe7114bba6bdc0d)?
>
> Certainly something has changed since 9 Oct.
It is related to that change, fixing an old issue.

The 'null' variable was designed to undefine variables or test if a 
variable is undefined.

An undefined variable is the one that doesn't exits. Like $avp(x) might 
not be in set at all. Some variables always exists, because they are 
always declared and initialized to 0 if not other default source of 
value, such variable is $var(x).

So practically a $var(x) cannot be 'null' at any time.

Probably with the ser-kamailio integration, the comparison with 'null' 
(which became to be refered as $null) got the inconsistency bug of 
actually comparing with 0 instead of returning whether the variable 
exists or not.

So, for the case:

$avp(x) = 0;

the condition if($avp(x)==$null)  was true, while it should have been 
false because $avp(x) is defined, not offering the true result when 
there was not $avp(x).

In other words, $null should be compared with variables that could be in 
the situation of an non-exiting value.

For your example, $var(ip_trusted) should be compared with 0, or you can 
compare the $sht(trusted=>$var(srcip)) with $null.

Cheers,
Daniel

-- 
Daniel-Constantin Mierla - http://www.asipto.com
http://twitter.com/#!/miconda - http://www.linkedin.com/in/miconda




More information about the sr-dev mailing list