Skip to content

Commit 2b64bca

Browse files
committedJul 7, 2012
wireless.c: fix memory leak
1 parent 260e2d0 commit 2b64bca

File tree

1 file changed

+61
-27
lines changed

1 file changed

+61
-27
lines changed
 

‎src/gui/wireless.c

+61-27
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,7 @@ static char *jget_key(const json_t *obj, const char *key, int required)
225225
return NULL;
226226
}
227227

228-
str = json_string_value(tmp);
228+
str = (char *)json_string_value(tmp);
229229
if(!str) {
230230
printf("JSON key '%s' is not a string", key);
231231
return NULL;
@@ -330,32 +330,50 @@ static void scan_callback(mtk_event *e, void *arg)
330330
curl = curl_easy_init();
331331

332332
val = json_rpc_call(curl, url, userpass, rpc_req_login, 5);
333-
if(!val)
333+
if(!val) {
334+
curl_easy_cleanup(curl);
334335
return;
335-
336+
}
336337

337338
key = jget_key(val, "result", 0);
338-
if(!key)
339+
if(!key) {
340+
json_decref(val);
341+
curl_easy_cleanup(curl);
339342
return;
343+
}
340344

341345
url_token = malloc(100);
346+
if(!url_token) {
347+
json_decref(val);
348+
curl_easy_cleanup(curl);
349+
messagebox("Error", "Out of memory");
350+
return;
351+
}
352+
342353
strcpy(url_token, URL_703N"/sys?auth=\0");
343354
url_token = strcat(url_token, key);
344355

345356
json_decref(val);
346357

347358
val = json_rpc_call(curl, (char *)url_token, userpass, rpc_req_scan, 10);
348-
if(!val)
349-
goto free_url;
359+
if(!val) {
360+
free(url_token);
361+
curl_easy_cleanup(curl);
362+
return;
363+
}
364+
350365
key = jget_key(val, "result", 0);
351-
if(!key)
352-
goto free_url;
366+
if(!key) {
367+
free(url_token);
368+
json_decref(val);
369+
curl_easy_cleanup(curl);
370+
return;
371+
}
372+
353373
update_list(key);
354-
json_decref(val);
355374

356-
free_url:
357375
free(url_token);
358-
376+
json_decref(val);
359377
curl_easy_cleanup(curl);
360378
}
361379

@@ -370,31 +388,47 @@ static int status(void)
370388
char *essid, *ip, *tmp;
371389
int ret = 1;
372390

391+
mtk_cmd(appid, "l_essid.set(-text \"Disconnect\")");
392+
mtk_cmd(appid, "l_ip.set(-text \"0.0.0.0\")");
393+
373394
curl = curl_easy_init();
374395

375396
val = json_rpc_call(curl, (char *)url, userpass, rpc_req_login, 5);
376-
if(!val)
397+
if(!val) {
398+
curl_easy_cleanup(curl);
377399
return ret;
400+
}
378401

379402
url_token = malloc(100);
403+
if(!url_token) {
404+
json_decref(val);
405+
curl_easy_cleanup(curl);
406+
messagebox("Error", "Out of memory");
407+
return ret;
408+
}
409+
strcpy(url_token, URL_703N"/sys?auth=");
380410

381411
key = jget_key(val, "result", 0);
382-
strcpy(url_token, URL_703N"/sys?auth=");
383412
url_token = strcat(url_token, key);
384413

385414
json_decref(val);
386415

387416
val = json_rpc_call(curl, (char *)url_token, userpass, rpc_req_status, 30);
388-
if(!val)
389-
goto free_url;
417+
if(!val) {
418+
curl_easy_cleanup(curl);
419+
free(url_token);
420+
return ret;
421+
}
390422

391423
key = jget_key(val, "result", 0);
392424

393425
essid = strdup(key);
394426
if(!essid) {
395-
mtk_cmd(appid, "l_essid.set(-text \"Disconnect\")");
396-
mtk_cmd(appid, "l_ip.set(-text \"0.0.0.0\")");
397-
goto free_url;
427+
free(url_token);
428+
json_decref(val);
429+
curl_easy_cleanup(curl);
430+
messagebox("Error", "Out of memory");
431+
return ret;
398432
}
399433

400434
ip = strchr(essid, '\n');
@@ -406,16 +440,13 @@ static int status(void)
406440

407441
mtk_cmdf(appid, "l_essid.set(-text \"%s\")", essid);
408442
mtk_cmdf(appid, "l_ip.set(-text \"%s\")", ip);
409-
free(essid);
410-
411-
json_decref(val);
412443

413-
ret = 0;
414-
free_url:
444+
free(essid);
415445
free(url_token);
446+
json_decref(val);
416447
curl_easy_cleanup(curl);
417448

418-
return ret;
449+
return 0;
419450
}
420451

421452
static void status_callback(mtk_event *e, void *arg)
@@ -454,12 +485,15 @@ static void connect_callback(mtk_event *e, void *arg)
454485

455486
val = json_rpc_call(curl, (char *)url, userpass, rpc_req_login, 5);
456487
if(!val) {
488+
curl_easy_cleanup(curl);
457489
messagebox("Error", "Cannot reach wireless gadget");
458490
return;
459491
}
460492

461493
url_token = malloc(100);
462494
if(!url_token) {
495+
json_decref(val);
496+
curl_easy_cleanup(curl);
463497
messagebox("Error", "Out of memory");
464498
return;
465499
}
@@ -481,16 +515,16 @@ static void connect_callback(mtk_event *e, void *arg)
481515

482516
val = json_rpc_call(curl, (char *)url_token, userpass, rpc_req_set, 30);
483517
if(!val) {
518+
free(url_token);
519+
curl_easy_cleanup(curl);
484520
messagebox("Error", "Cannot reach wireless gadget");
485-
goto free_url;
521+
return;
486522
}
487523
json_decref(val);
488524

489525
status();
490526

491-
free_url:
492527
free(url_token);
493-
494528
curl_easy_cleanup(curl);
495529
}
496530

0 commit comments

Comments
 (0)
Please sign in to comment.