Fix: Free converted string after use.

Also make sure we don't read beyond end of the string.
This commit is contained in:
Andrzej Zaborowski 2009-10-16 19:44:36 +02:00 committed by Denis Kenzior
parent c6f4a39ab7
commit e6b8550328
1 changed files with 8 additions and 2 deletions

View File

@ -59,7 +59,7 @@ static void at_ussd_request(struct ofono_ussd *ussd, const char *str,
{
GAtChat *chat = ofono_ussd_get_data(ussd);
struct cb_data *cbd = cb_data_new(cb, data);
unsigned char *converted;
unsigned char *converted = NULL;
int dcs;
int max_len;
long written;
@ -83,7 +83,10 @@ static void at_ussd_request(struct ofono_ussd *ussd, const char *str,
if (written > max_len)
goto error;
sprintf(buf, "AT+CUSD=1,\"%s\",%d", converted, dcs);
sprintf(buf, "AT+CUSD=1,\"%*s\",%d", (int) written, converted, dcs);
g_free(converted);
converted = NULL;
if (g_at_chat_send(chat, buf, none_prefix,
cusd_request_cb, cbd, g_free) > 0)
@ -93,6 +96,9 @@ error:
if (cbd)
g_free(cbd);
if (converted)
g_free(converted);
CALLBACK_WITH_FAILURE(cb, data);
}