Skip to content

Commit 2b860f2

Browse files
dictcpdick9gag
authored andcommitted
send uncompress value and proper set compressed flags when errors
1 parent 348f274 commit 2b860f2

File tree

1 file changed

+8
-7
lines changed

1 file changed

+8
-7
lines changed

php_memcached.c

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -108,10 +108,10 @@ static int php_memc_list_entry(void) {
108108
#define MEMC_VAL_COMPRESSION_ZLIB (1<<1)
109109
#define MEMC_VAL_COMPRESSION_FASTLZ (1<<2)
110110

111-
#define MEMC_VAL_GET_FLAGS(internal_flags) ((internal_flags & MEMC_MASK_INTERNAL) >> 4)
112-
#define MEMC_VAL_SET_FLAG(internal_flags, internal_flag) ((internal_flags) |= ((internal_flag << 4) & MEMC_MASK_INTERNAL))
113-
#define MEMC_VAL_HAS_FLAG(internal_flags, internal_flag) ((MEMC_VAL_GET_FLAGS(internal_flags) & internal_flag) == internal_flag)
114-
#define MEMC_VAL_DEL_FLAG(internal_flags, internal_flag) internal_flags &= ~((internal_flag << 4) & MEMC_MASK_INTERNAL)
111+
#define MEMC_VAL_GET_FLAGS(internal_flags) (((internal_flags) & MEMC_MASK_INTERNAL) >> 4)
112+
#define MEMC_VAL_SET_FLAG(internal_flags, internal_flag) ((internal_flags) |= (((internal_flag) << 4) & MEMC_MASK_INTERNAL))
113+
#define MEMC_VAL_HAS_FLAG(internal_flags, internal_flag) ((MEMC_VAL_GET_FLAGS(internal_flags) & (internal_flag)) == (internal_flag))
114+
#define MEMC_VAL_DEL_FLAG(internal_flags, internal_flag) (internal_flags &= (~(((internal_flag) << 4) & MEMC_MASK_INTERNAL)))
115115

116116
/****************************************
117117
User-defined flags
@@ -838,7 +838,7 @@ zend_bool s_compress_value (php_memc_compression_type compression_type, zend_str
838838

839839
if (compressed_size > 0) {
840840
compress_status = 1;
841-
MEMC_VAL_SET_FLAG(*flags, MEMC_VAL_COMPRESSION_FASTLZ);
841+
MEMC_VAL_SET_FLAG(*flags, MEMC_VAL_COMPRESSED | MEMC_VAL_COMPRESSION_FASTLZ);
842842
}
843843
}
844844
break;
@@ -850,7 +850,7 @@ zend_bool s_compress_value (php_memc_compression_type compression_type, zend_str
850850

851851
if (status == Z_OK) {
852852
compress_status = 1;
853-
MEMC_VAL_SET_FLAG(*flags, MEMC_VAL_COMPRESSION_ZLIB);
853+
MEMC_VAL_SET_FLAG(*flags, MEMC_VAL_COMPRESSED | MEMC_VAL_COMPRESSION_ZLIB);
854854
}
855855
}
856856
break;
@@ -862,13 +862,14 @@ zend_bool s_compress_value (php_memc_compression_type compression_type, zend_str
862862

863863
if (!compress_status) {
864864
php_error_docref(NULL, E_WARNING, "could not compress value");
865+
MEMC_VAL_DEL_FLAG(*flags, MEMC_VAL_COMPRESSED | MEMC_VAL_COMPRESSION_FASTLZ | MEMC_VAL_COMPRESSION_ZLIB);
865866
efree (buffer);
866867
return 0;
867868
}
868869

869870
/* This means the value was too small to be compressed, still a success */
870871
if (ZSTR_LEN(payload) < (compressed_size * MEMC_G(compression_factor))) {
871-
MEMC_VAL_DEL_FLAG(*flags, MEMC_VAL_COMPRESSED);
872+
MEMC_VAL_DEL_FLAG(*flags, MEMC_VAL_COMPRESSED | MEMC_VAL_COMPRESSION_FASTLZ | MEMC_VAL_COMPRESSION_ZLIB);
872873
efree (buffer);
873874
return 1;
874875
}

0 commit comments

Comments
 (0)