@@ -116,7 +116,6 @@ typedef unsigned long int uint32_t;
116116 Custom result codes
117117****************************************/
118118#define MEMC_RES_PAYLOAD_FAILURE -1001
119- #define MEMC_RES_VERSION_FAILURE -1002
120119
121120/****************************************
122121 Payload value flags
@@ -591,13 +590,13 @@ static void php_memc_get_impl(INTERNAL_FUNCTION_PARAMETERS, zend_bool by_key)
591590 /*
592591 * Enable CAS support, but only if it is currently disabled.
593592 */
594- if (cas_token && Z_TYPE_P (cas_token ) != IS_NULL && orig_cas_flag == 0 ) {
593+ if (cas_token && PZVAL_IS_REF (cas_token ) && orig_cas_flag == 0 ) {
595594 memcached_behavior_set (m_obj -> memc , MEMCACHED_BEHAVIOR_SUPPORT_CAS , 1 );
596595 }
597596
598597 status = memcached_mget_by_key (m_obj -> memc , server_key , server_key_len , keys , key_lens , 1 );
599598
600- if (cas_token && Z_TYPE_P (cas_token ) != IS_NULL && orig_cas_flag == 0 ) {
599+ if (cas_token && PZVAL_IS_REF (cas_token ) && orig_cas_flag == 0 ) {
601600 memcached_behavior_set (m_obj -> memc , MEMCACHED_BEHAVIOR_SUPPORT_CAS , orig_cas_flag );
602601 }
603602
@@ -766,7 +765,7 @@ static void php_memc_getMulti_impl(INTERNAL_FUNCTION_PARAMETERS, zend_bool by_ke
766765 /*
767766 * Enable CAS support, but only if it is currently disabled.
768767 */
769- if (cas_tokens ) {
768+ if (cas_tokens && PZVAL_IS_REF ( cas_tokens ) ) {
770769 orig_cas_flag = memcached_behavior_get (m_obj -> memc , MEMCACHED_BEHAVIOR_SUPPORT_CAS );
771770 if (orig_cas_flag == 0 ) {
772771 memcached_behavior_set (m_obj -> memc , MEMCACHED_BEHAVIOR_SUPPORT_CAS , 1 );
@@ -780,7 +779,7 @@ static void php_memc_getMulti_impl(INTERNAL_FUNCTION_PARAMETERS, zend_bool by_ke
780779 /*
781780 * Restore the CAS support flag, but only if we had to turn it on.
782781 */
783- if (cas_tokens && orig_cas_flag == 0 ) {
782+ if (cas_tokens && PZVAL_IS_REF ( cas_tokens ) && orig_cas_flag == 0 ) {
784783 memcached_behavior_set (m_obj -> memc , MEMCACHED_BEHAVIOR_SUPPORT_CAS , orig_cas_flag );
785784 }
786785
@@ -792,8 +791,17 @@ static void php_memc_getMulti_impl(INTERNAL_FUNCTION_PARAMETERS, zend_bool by_ke
792791 * returned as doubles, because we cannot store potential 64-bit values in longs.
793792 */
794793 if (cas_tokens ) {
795- zval_dtor (cas_tokens );
796- array_init (cas_tokens );
794+ if (PZVAL_IS_REF (cas_tokens )) {
795+ /* cas_tokens was passed by reference, we'll create an array for it. */
796+ zval_dtor (cas_tokens );
797+ array_init (cas_tokens );
798+ } else {
799+ /* Not passed by reference, we allow this (eg.: if you specify null
800+ to not enable cas but you want to use the udf_flags parameter).
801+ We destruct it and set it to null for the peace of mind. */
802+ zval_dtor (cas_tokens );
803+ cas_tokens = NULL ;
804+ }
797805 }
798806
799807 /*
@@ -1220,7 +1228,7 @@ static void php_memc_setMulti_impl(INTERNAL_FUNCTION_PARAMETERS, zend_bool by_ke
12201228 char * server_key = NULL ;
12211229 int server_key_len = 0 ;
12221230 time_t expiration = 0 ;
1223- uint32_t udf_flags = 0 ;
1231+ long udf_flags = 0 ;
12241232 zval * * entry ;
12251233 char * str_key ;
12261234 uint str_key_len ;
@@ -1280,7 +1288,7 @@ static void php_memc_setMulti_impl(INTERNAL_FUNCTION_PARAMETERS, zend_bool by_ke
12801288 }
12811289
12821290 if (udf_flags > 0 ) {
1283- MEMC_VAL_SET_USER_FLAGS (flags , udf_flags );
1291+ MEMC_VAL_SET_USER_FLAGS (flags , (( uint32_t ) udf_flags ) );
12841292 }
12851293
12861294 payload = php_memc_zval_to_payload (* entry , & payload_len , & flags , m_obj -> serializer , m_obj -> compression_type TSRMLS_CC );
@@ -1385,7 +1393,7 @@ static void php_memc_store_impl(INTERNAL_FUNCTION_PARAMETERS, int op, zend_bool
13851393 zval s_zvalue ;
13861394 zval * value ;
13871395 long expiration = 0 ;
1388- uint32_t udf_flags = 0 ;
1396+ long udf_flags = 0 ;
13891397 char * payload ;
13901398 size_t payload_len ;
13911399 uint32_t flags = 0 ;
@@ -1464,8 +1472,7 @@ static void php_memc_store_impl(INTERNAL_FUNCTION_PARAMETERS, int op, zend_bool
14641472 if (udf_flags > MEMC_VAL_USER_FLAGS_MAX ) {
14651473 php_error_docref (NULL TSRMLS_CC , E_WARNING , "udf_flags will be limited to %d" , MEMC_VAL_USER_FLAGS_MAX );
14661474 }
1467-
1468- MEMC_VAL_SET_USER_FLAGS (flags , udf_flags );
1475+ MEMC_VAL_SET_USER_FLAGS (flags , ((uint32_t ) udf_flags ));
14691476 }
14701477
14711478 if (op == MEMC_OP_TOUCH ) {
@@ -1567,7 +1574,7 @@ static void php_memc_cas_impl(INTERNAL_FUNCTION_PARAMETERS, zend_bool by_key)
15671574 int server_key_len = 0 ;
15681575 zval * value ;
15691576 time_t expiration = 0 ;
1570- uint32_t udf_flags = 0 ;
1577+ long udf_flags = 0 ;
15711578 char * payload ;
15721579 size_t payload_len ;
15731580 uint32_t flags = 0 ;
@@ -1608,8 +1615,7 @@ static void php_memc_cas_impl(INTERNAL_FUNCTION_PARAMETERS, zend_bool by_key)
16081615 if (udf_flags > MEMC_VAL_USER_FLAGS_MAX ) {
16091616 php_error_docref (NULL TSRMLS_CC , E_WARNING , "udf_flags will be limited to %d" , MEMC_VAL_USER_FLAGS_MAX );
16101617 }
1611-
1612- MEMC_VAL_SET_USER_FLAGS (flags , udf_flags );
1618+ MEMC_VAL_SET_USER_FLAGS (flags , ((uint32_t ) udf_flags ));
16131619 }
16141620
16151621 payload = php_memc_zval_to_payload (value , & payload_len , & flags , m_obj -> serializer , m_obj -> compression_type TSRMLS_CC );
@@ -3482,29 +3488,29 @@ ZEND_END_ARG_INFO()
34823488ZEND_BEGIN_ARG_INFO_EX (arginfo_get , 0 , 0 , 1 )
34833489 ZEND_ARG_INFO (0 , key )
34843490 ZEND_ARG_INFO (0 , cache_cb )
3485- ZEND_ARG_INFO (1 , cas_token )
3491+ ZEND_ARG_INFO (2 , cas_token )
34863492 ZEND_ARG_INFO (1 , udf_flags )
34873493ZEND_END_ARG_INFO ()
34883494
34893495ZEND_BEGIN_ARG_INFO_EX (arginfo_getByKey , 0 , 0 , 2 )
34903496 ZEND_ARG_INFO (0 , server_key )
34913497 ZEND_ARG_INFO (0 , key )
34923498 ZEND_ARG_INFO (0 , cache_cb )
3493- ZEND_ARG_INFO (1 , cas_token )
3499+ ZEND_ARG_INFO (2 , cas_token )
34943500 ZEND_ARG_INFO (1 , udf_flags )
34953501ZEND_END_ARG_INFO ()
34963502
34973503ZEND_BEGIN_ARG_INFO_EX (arginfo_getMulti , 0 , 0 , 1 )
34983504 ZEND_ARG_ARRAY_INFO (0 , keys , 0 )
3499- ZEND_ARG_INFO (1 , cas_tokens )
3505+ ZEND_ARG_INFO (2 , cas_tokens )
35003506 ZEND_ARG_INFO (0 , flags )
35013507 ZEND_ARG_INFO (1 , udf_flags )
35023508ZEND_END_ARG_INFO ()
35033509
35043510ZEND_BEGIN_ARG_INFO_EX (arginfo_getMultiByKey , 0 , 0 , 2 )
35053511 ZEND_ARG_INFO (0 , server_key )
35063512 ZEND_ARG_ARRAY_INFO (0 , keys , 0 )
3507- ZEND_ARG_INFO (1 , cas_tokens )
3513+ ZEND_ARG_INFO (2 , cas_tokens )
35083514 ZEND_ARG_INFO (0 , flags )
35093515 ZEND_ARG_INFO (1 , udf_flags )
35103516ZEND_END_ARG_INFO ()
@@ -4030,7 +4036,6 @@ static void php_memc_register_constants(INIT_FUNC_ARGS)
40304036 */
40314037
40324038 REGISTER_MEMC_CLASS_CONST_LONG (RES_PAYLOAD_FAILURE , MEMC_RES_PAYLOAD_FAILURE );
4033- REGISTER_MEMC_CLASS_CONST_LONG (RES_VERSION_FAILURE , MEMC_RES_VERSION_FAILURE );
40344039
40354040 /*
40364041 * Serializer types.
0 commit comments