mirror of
https://github.com/shadowsocks/shadowsocks-libev.git
synced 2026-10-26 18:53:41 +00:00
fix iv cache
This commit is contained in:
+17
-9
@@ -87,8 +87,10 @@ int cache_delete(struct cache *cache, int keep_data)
|
||||
} else {
|
||||
HASH_ITER(hh, cache->entries, entry, tmp){
|
||||
HASH_DEL(cache->entries, entry);
|
||||
if (cache->free_cb) {
|
||||
cache->free_cb(entry->data);
|
||||
if (entry->data != NULL) {
|
||||
if (cache->free_cb) {
|
||||
cache->free_cb(entry->data);
|
||||
}
|
||||
}
|
||||
free(entry->key);
|
||||
free(entry);
|
||||
@@ -125,8 +127,12 @@ int cache_remove(struct cache *cache, char *key, size_t key_len)
|
||||
|
||||
if (tmp) {
|
||||
HASH_DEL(cache->entries, tmp);
|
||||
if (cache->free_cb) {
|
||||
cache->free_cb(tmp->data);
|
||||
if (tmp->data != NULL) {
|
||||
if (cache->free_cb) {
|
||||
cache->free_cb(tmp->data);
|
||||
} else {
|
||||
free(tmp->data);
|
||||
}
|
||||
}
|
||||
free(tmp->key);
|
||||
free(tmp);
|
||||
@@ -217,7 +223,7 @@ int cache_insert(struct cache *cache, char *key, size_t key_len, void *data)
|
||||
struct cache_entry *entry = NULL;
|
||||
struct cache_entry *tmp_entry = NULL;
|
||||
|
||||
if (!cache || !data) {
|
||||
if (!cache) {
|
||||
return EINVAL;
|
||||
}
|
||||
|
||||
@@ -233,10 +239,12 @@ int cache_insert(struct cache *cache, char *key, size_t key_len, void *data)
|
||||
if (HASH_COUNT(cache->entries) >= cache->max_entries) {
|
||||
HASH_ITER(hh, cache->entries, entry, tmp_entry){
|
||||
HASH_DELETE(hh, cache->entries, entry);
|
||||
if (cache->free_cb) {
|
||||
cache->free_cb(entry->data);
|
||||
} else {
|
||||
free(entry->data);
|
||||
if (entry->data != NULL) {
|
||||
if (cache->free_cb) {
|
||||
cache->free_cb(entry->data);
|
||||
} else {
|
||||
free(entry->data);
|
||||
}
|
||||
}
|
||||
free(entry->key);
|
||||
free(entry);
|
||||
|
||||
+2
-2
@@ -1267,11 +1267,11 @@ char * ss_decrypt(int buf_size, char *ciphertext, ssize_t *len,
|
||||
ctx->counter = 0;
|
||||
ctx->init = 1;
|
||||
|
||||
if (cache_key_exist(iv_cache, (char *)iv, MAX_IV_LENGTH)) {
|
||||
if (cache_key_exist(iv_cache, (char *)iv, iv_len)) {
|
||||
free(ciphertext);
|
||||
return NULL;
|
||||
} else {
|
||||
cache_insert(iv_cache, (char *)iv, MAX_IV_LENGTH, NULL);
|
||||
cache_insert(iv_cache, (char *)iv, iv_len, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user