diff options
-rw-r--r-- | drivers/atmodem/ussd.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/atmodem/ussd.c b/drivers/atmodem/ussd.c index c29f8f69..d1874b92 100644 --- a/drivers/atmodem/ussd.c +++ b/drivers/atmodem/ussd.c @@ -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); } |