Changeset 625

Show
Ignore:
Timestamp:
03/25/08 23:13:42 (10 months ago)
Author:
asiby
Message:

Avoiding integer overflow in PHP and long overflow in C++ (Asterisk) that may lead to unpredictable behavior of the Dial command for extremely large %timeout% values.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/1.3/A2BCustomer_UI/lib/Class.RateEngine.php

    r606 r625  
    937937        */ 
    938938        function rate_engine_performcall ($agi, $destination, &$A2B, $typecall=0){ 
     939                $max_long = 2147483647; //Maximum value for long type in C++. This will be used to avoid overflow when sending large numbers to Asterisk  
    939940 
    940941                $old_destination = $destination; 
     
    968969                                 
    969970                        if ($typecall==1) $timeout = $A2B -> config["callback"]['predictivedialer_maxtime_tocall'];  
    970                                  
    971                         $dialparams = str_replace("%timeout%", $timeout *1000, $A2B->agiconfig['dialcommand_param']); 
     971                                                
     972                        $dialparams = str_replace("%timeout%", min($timeout * 1000, $max_long), $A2B->agiconfig['dialcommand_param']); 
    972973                        //$dialparams = "|30|HS($timeout)"; // L(".$timeout*1000.":61000:30000) 
    973974                                 
     
    10881089                                                $destination= substr($destination, strlen($removeprefix)); 
    10891090                                        } 
    1090                                          
    1091                                         $dialparams = str_replace("%timeout%", $timeout *1000, $A2B->agiconfig['dialcommand_param']); 
     1091                                                                                
     1092                                        $dialparams = str_replace("%timeout%", min($timeout * 1000, $max_long), $A2B->agiconfig['dialcommand_param']); 
    10921093                                         
    10931094                                        if ($pos_dialingnumber !== false){                                          
  • branches/1.3/A2Billing_AGI/libs_a2billing/Class.RateEngine.php

    r606 r625  
    938938        */ 
    939939        function rate_engine_performcall ($agi, $destination, &$A2B, $typecall=0){ 
     940                $max_long = 2147483647; //Maximum value for long type in C++. This will be used to avoid overflow when sending large numbers to Asterisk  
    940941 
    941942                $old_destination = $destination; 
     
    970971                        if ($typecall==1) $timeout = $A2B -> config["callback"]['predictivedialer_maxtime_tocall'];  
    971972                                 
    972                         $dialparams = str_replace("%timeout%", $timeout *1000, $A2B->agiconfig['dialcommand_param']); 
     973                        $dialparams = str_replace("%timeout%", min($timeout * 1000, $max_long), $A2B->agiconfig['dialcommand_param']); 
    973974                        //$dialparams = "|30|HS($timeout)"; // L(".$timeout*1000.":61000:30000) 
    974975                                 
     
    10901091                                        } 
    10911092                                         
    1092                                         $dialparams = str_replace("%timeout%", $timeout *1000, $A2B->agiconfig['dialcommand_param']); 
     1093                                        $dialparams = str_replace("%timeout%", min($timeout * 1000, $max_long), $A2B->agiconfig['dialcommand_param']); 
    10931094                                         
    10941095                                        if ($pos_dialingnumber !== false){                                          
  • branches/1.3/A2Billing_UI/lib/Class.RateEngine.php

    r606 r625  
    937937        */ 
    938938        function rate_engine_performcall ($agi, $destination, &$A2B, $typecall=0){ 
     939                $max_long = 2147483647; //Maximum value for long type in C++. This will be used to avoid overflow when sending large numbers to Asterisk  
    939940 
    940941                $old_destination = $destination; 
     
    968969                                 
    969970                        if ($typecall==1) $timeout = $A2B -> config["callback"]['predictivedialer_maxtime_tocall'];  
    970                                  
    971                         $dialparams = str_replace("%timeout%", $timeout *1000, $A2B->agiconfig['dialcommand_param']); 
     971                                                
     972                        $dialparams = str_replace("%timeout%", min($timeout * 1000, $max_long), $A2B->agiconfig['dialcommand_param']); 
    972973                        //$dialparams = "|30|HS($timeout)"; // L(".$timeout*1000.":61000:30000) 
    973974                                 
     
    10891090                                        } 
    10901091                                         
    1091                                         $dialparams = str_replace("%timeout%", $timeout *1000, $A2B->agiconfig['dialcommand_param']); 
     1092                                        $dialparams = str_replace("%timeout%", min($timeout * 1000, $max_long), $A2B->agiconfig['dialcommand_param']); 
    10921093                                         
    10931094                                        if ($pos_dialingnumber !== false){                                          


Google