Skip to content
This repository was archived by the owner on Sep 15, 2025. It is now read-only.

Commit 72e343d

Browse files
authored
Merge pull request #16 from rufferson/master
Some memory leaks, spec preference, oob and transfer fixup
2 parents fcb7c67 + fbbd4b1 commit 72e343d

File tree

2 files changed

+151
-79
lines changed

2 files changed

+151
-79
lines changed

src/hfu_disco.c

Lines changed: 28 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -26,46 +26,42 @@ static void jabber_hfu_disco_info_cb(JabberStream *js, const char *from,
2626

2727
query = xmlnode_get_child_with_namespace(packet, "query", NS_DISCO_INFO);
2828

29-
if (type == JABBER_IQ_RESULT && query)
30-
{
31-
js_data = g_hash_table_lookup(HFUJabberStreamDataTable, js);
32-
if (!js_data) return;
29+
if (type != JABBER_IQ_RESULT || query == NULL)
30+
return;
31+
32+
js_data = g_hash_table_lookup(HFUJabberStreamDataTable, js);
33+
// Always prefer latest standard, skip if already found
34+
if (!js_data || str_equal(js_data->ns, NS_HTTP_FILE_UPLOAD_V0))
35+
return;
3336

3437
for (feature = xmlnode_get_child(query, "feature") ; feature; feature = xmlnode_get_next_twin(feature))
3538
{
36-
const char *var = xmlnode_get_attrib(feature, "var");
37-
if(!var)
38-
continue;
39+
const char *var = xmlnode_get_attrib(feature, "var");
40+
if(!var)
41+
continue;
3942

40-
if(str_equal(var, NS_HTTP_FILE_UPLOAD))
41-
js_data->ns = NS_HTTP_FILE_UPLOAD;
42-
else if(str_equal(var, NS_HTTP_FILE_UPLOAD_V0))
43-
js_data->ns = NS_HTTP_FILE_UPLOAD_V0;
43+
if(str_equal(var, NS_HTTP_FILE_UPLOAD) && js_data->ns == NULL)
44+
js_data->ns = NS_HTTP_FILE_UPLOAD;
45+
else if(str_equal(var, NS_HTTP_FILE_UPLOAD_V0))
46+
js_data->ns = NS_HTTP_FILE_UPLOAD_V0;
47+
else
48+
continue;
49+
50+
g_free(js_data->host);
51+
js_data->host = g_strdup(from);
4452

45-
if (str_equal(var, NS_HTTP_FILE_UPLOAD) || str_equal(var, NS_HTTP_FILE_UPLOAD_V0))
53+
x = xmlnode_get_child_with_namespace(query, "x", "jabber:x:data");
54+
if (x)
55+
{
56+
for(field = xmlnode_get_child(x, "field"); field; field = xmlnode_get_next_twin(field))
4657
{
47-
js_data->host = g_strdup(from);
48-
49-
x = xmlnode_get_child_with_namespace(query, "x", "jabber:x:data");
50-
if (x)
51-
{
52-
for(field = xmlnode_get_child(x, "field"); field; field = xmlnode_get_next_twin(field))
53-
{
54-
const char *var = xmlnode_get_attrib(field, "var");
55-
56-
if(var && str_equal(var, "max-file-size"))
57-
{
58-
if((value = xmlnode_get_child(field, "value")))
59-
{
60-
js_data->max_file_size = (gsize) atol(xmlnode_get_data(value));
61-
}
62-
}
63-
}
64-
}
58+
const char *var = xmlnode_get_attrib(field, "var");
59+
60+
if(var && str_equal(var, "max-file-size"))
61+
if((value = xmlnode_get_child(field, "value")))
62+
js_data->max_file_size = (gsize) atol(xmlnode_get_data(value));
6563
}
6664
}
67-
68-
6965
}
7066
}
7167

0 commit comments

Comments
 (0)