@@ -6472,6 +6472,7 @@ sentinel_monitor_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock, char *
6472
6472
{
6473
6473
char * cmd ;
6474
6474
int cmd_len ;
6475
+ long port ;
6475
6476
6476
6477
// Sanity checks
6477
6478
if (!master || !master_len ) {
@@ -6483,24 +6484,31 @@ sentinel_monitor_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock, char *
6483
6484
RETURN_FALSE ;
6484
6485
}
6485
6486
if (!z_port || (Z_TYPE_P (z_port ) != IS_LONG && Z_TYPE_P (z_port ) != IS_STRING )) {
6486
- php_error_docref (NULL TSRMLS_CC , E_WARNING , "Warning: Must specify a valid port as a string or long" );
6487
+ php_error_docref (NULL TSRMLS_CC , E_WARNING , "Warning: Must specify port as a string or long" );
6487
6488
RETURN_FALSE ;
6488
6489
}
6489
6490
if (quorum < 0 ) {
6490
6491
php_error_docref (NULL TSRMLS_CC , E_WARNING , "Warning: Must specify a valid quorum value" );
6491
6492
RETURN_FALSE ;
6492
6493
}
6493
6494
6494
- if (Z_TYPE_P (z_port ) == IS_LONG ) {
6495
- cmd_len = redis_cmd_format_static (& cmd , "SENTINEL" , "sssll" , "MONITOR" , sizeof ("MONITOR" )- 1 ,
6496
- master , master_len , Z_STRVAL_P (z_ip ), Z_STRLEN_P (z_ip ),
6497
- Z_LVAL_P (z_port ), quorum );
6495
+ // Attempt to get the long value of a string if that's what we were passed
6496
+ if (Z_TYPE_P (z_port ) == IS_STRING ) {
6497
+ if (is_numeric_string (Z_STRVAL_P (z_port ), Z_STRLEN_P (z_port ), & port , NULL , 0 )!= IS_LONG ) {
6498
+ php_error_docref (NULL TSRMLS_CC , E_WARNING , "Warning: Passed port does not contain a valid number!" );
6499
+ RETURN_FALSE ;
6500
+ }
6498
6501
} else {
6499
- cmd_len = redis_cmd_format_static (& cmd , "SENTINEL" , "ssssl" , "MONITOR" , sizeof ("MONITOR" )- 1 ,
6500
- master , master_len , Z_STRVAL_P (z_ip ), Z_STRLEN_P (z_ip ),
6501
- Z_STRVAL_P (z_port ), Z_STRLEN_P (z_port ), quorum );
6502
+ port = Z_LVAL_P (z_port );
6502
6503
}
6503
6504
6505
+ // Get numeric representation of our port
6506
+ port = Z_TYPE_P (z_port ) == IS_STRING ? atoi (Z_STRVAL_P (z_port )) : Z_LVAL_P (z_port );
6507
+
6508
+ cmd_len = redis_cmd_format_static (& cmd , "SENTINEL" , "sssll" , "MONITOR" , sizeof ("MONITOR" )- 1 ,
6509
+ master , master_len , Z_STRVAL_P (z_ip ), Z_STRLEN_P (z_ip ),
6510
+ port , quorum );
6511
+
6504
6512
REDIS_PROCESS_REQUEST (redis_sock , cmd , cmd_len );
6505
6513
IF_ATOMIC () {
6506
6514
redis_boolean_response (INTERNAL_FUNCTION_PARAM_PASSTHRU , redis_sock , NULL , NULL );
@@ -6543,12 +6551,12 @@ sentinel_set_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock, char *mast
6543
6551
php_error_docref (NULL TSRMLS_CC , E_WARNING , "Warning: Must specify a master name" );
6544
6552
RETURN_FALSE ;
6545
6553
}
6546
- if (!z_option || ! Z_TYPE_P (z_option ) || !Z_STRLEN_P (z_option )) {
6554
+ if (!z_option || Z_TYPE_P (z_option ) != IS_STRING || !Z_STRLEN_P (z_option )) {
6547
6555
php_error_docref (NULL TSRMLS_CC , E_WARNING , "Warning: Must specify option name" );
6548
6556
RETURN_FALSE ;
6549
6557
}
6550
- if (!z_value || (Z_TYPE_P (z_option ) != IS_STRING && Z_TYPE_P (z_option ) != IS_LONG &&
6551
- Z_TYPE_P (z_option ) != IS_DOUBLE ))
6558
+ if (!z_value || (Z_TYPE_P (z_value ) != IS_STRING && Z_TYPE_P (z_value ) != IS_LONG &&
6559
+ Z_TYPE_P (z_value ) != IS_DOUBLE ))
6552
6560
{
6553
6561
php_error_docref (NULL TSRMLS_CC , E_WARNING , "Warning: Must specify a valid option value!" );
6554
6562
RETURN_FALSE ;
0 commit comments