Browse Source

Free up old data in place if we are re-subscribing

master
Con Kolivas 11 years ago
parent
commit
a50bb29d21
  1. 11
      src/generator.c

11
src/generator.c

@ -294,6 +294,7 @@ static bool parse_subscribe(connsock_t *cs, proxy_instance_t *proxi)
json_t *val = NULL, *res_val, *notify_val, *tmp; json_t *val = NULL, *res_val, *notify_val, *tmp;
const char *string; const char *string;
bool ret = false; bool ret = false;
char *old;
int size; int size;
size = read_socket_line(cs, 5); size = read_socket_line(cs, 5);
@ -320,12 +321,16 @@ static bool parse_subscribe(connsock_t *cs, proxy_instance_t *proxi)
LOGWARNING("Failed to find notify in parse_subscribe"); LOGWARNING("Failed to find notify in parse_subscribe");
goto out; goto out;
} }
/* Free up old data in place if we are re-subscribing */
old = proxi->sessionid;
proxi->sessionid = NULL;
if (!proxi->no_params && !proxi->no_sessionid && json_array_size(notify_val) > 1) { if (!proxi->no_params && !proxi->no_sessionid && json_array_size(notify_val) > 1) {
/* Copy the session id if one exists. */ /* Copy the session id if one exists. */
string = json_string_value(json_array_get(notify_val, 1)); string = json_string_value(json_array_get(notify_val, 1));
if (string) if (string)
proxi->sessionid = strdup(string); proxi->sessionid = strdup(string);
} }
free(old);
tmp = json_array_get(res_val, 1); tmp = json_array_get(res_val, 1);
if (!tmp || !json_is_string(tmp)) { if (!tmp || !json_is_string(tmp)) {
LOGWARNING("Failed to parse enonce1 in parse_subscribe"); LOGWARNING("Failed to parse enonce1 in parse_subscribe");
@ -336,13 +341,17 @@ static bool parse_subscribe(connsock_t *cs, proxy_instance_t *proxi)
LOGWARNING("Invalid string length for enonce1 in parse_subscribe"); LOGWARNING("Invalid string length for enonce1 in parse_subscribe");
goto out; goto out;
} }
old = proxi->enonce1;
proxi->enonce1 = strdup(string); proxi->enonce1 = strdup(string);
free(old);
proxi->nonce1len = strlen(proxi->enonce1) / 2; proxi->nonce1len = strlen(proxi->enonce1) / 2;
if (proxi->nonce1len > 15) { if (proxi->nonce1len > 15) {
LOGWARNING("Nonce1 too long at %d", proxi->nonce1len); LOGWARNING("Nonce1 too long at %d", proxi->nonce1len);
goto out; goto out;
} }
old = proxi->enonce1bin;
proxi->enonce1bin = ckalloc(proxi->nonce1len); proxi->enonce1bin = ckalloc(proxi->nonce1len);
free(old);
hex2bin(proxi->enonce1bin, proxi->enonce1, proxi->nonce1len); hex2bin(proxi->enonce1bin, proxi->enonce1, proxi->nonce1len);
tmp = json_array_get(res_val, 2); tmp = json_array_get(res_val, 2);
if (!tmp || !json_is_integer(tmp)) { if (!tmp || !json_is_integer(tmp)) {
@ -361,7 +370,7 @@ static bool parse_subscribe(connsock_t *cs, proxy_instance_t *proxi)
proxi->nonce2len = size; proxi->nonce2len = size;
LOGINFO("Found notify with enonce %s nonce2len %d", proxi->enonce1, LOGINFO("Found notify with enonce %s nonce2len %d", proxi->enonce1,
proxi->nonce2len); proxi->nonce2len);
ret = true; ret = true;
out: out:

Loading…
Cancel
Save