Only convert from ISO-8859-1 when relevant (fixes corruption and more)

This commit is contained in:
Pierre Pronchery 2010-06-03 17:18:26 +00:00
parent 440937ef71
commit 3bc00a493f

View File

@ -1480,7 +1480,7 @@ static int _gsm_trigger_cmgr(GSM * gsm, char const * result)
{ {
gsm->event.message.encoding = GSM_ENCODING_UTF8; gsm->event.message.encoding = GSM_ENCODING_UTF8;
gsm->event.message.content = result; gsm->event.message.content = result;
*length = strlen(result); *length = strlen(result) + 1;
_gsm_event_send(gsm, GSM_EVENT_TYPE_MESSAGE); _gsm_event_send(gsm, GSM_EVENT_TYPE_MESSAGE);
} }
else if((p = _cmgr_pdu_parse(result, &gsm->event.message.date, else if((p = _cmgr_pdu_parse(result, &gsm->event.message.date,
@ -1492,14 +1492,16 @@ static int _gsm_trigger_cmgr(GSM * gsm, char const * result)
if((gsmc = g_slist_nth_data(gsm->queue, 0)) != NULL) if((gsmc = g_slist_nth_data(gsm->queue, 0)) != NULL)
gsm->event.message.index /* XXX ugly */ gsm->event.message.index /* XXX ugly */
= (unsigned long)gsm_command_get_data(gsmc); = (unsigned long)gsm_command_get_data(gsmc);
if((q = g_convert(p, -1, "UTF-8", "ISO-8859-1", NULL, NULL, gsm->event.message.number = gsm->number; /* XXX ugly */
NULL)) != NULL) if(gsm->event.message.encoding == GSM_ENCODING_UTF8
&& (q = g_convert(p, -1, "UTF-8", "ISO-8859-1",
NULL, NULL, NULL)) != NULL)
{ {
free(p); free(p);
p = q; p = q;
l = strlen(p) + 1;
} }
gsm->event.message.length = l; gsm->event.message.length = l;
gsm->event.message.number = gsm->number; /* XXX ugly */
gsm->event.message.content = p; gsm->event.message.content = p;
_gsm_event_send(gsm, GSM_EVENT_TYPE_MESSAGE); _gsm_event_send(gsm, GSM_EVENT_TYPE_MESSAGE);
free(p); free(p);
@ -1596,7 +1598,7 @@ static char * _cmgr_pdu_parse_encoding_default(char const * pdu, size_t len,
unsigned int u; unsigned int u;
unsigned char byte; unsigned char byte;
if((p = malloc((len - i) * 2)) == NULL) if((p = malloc(len - i + 1)) == NULL)
return NULL; return NULL;
if(hdr != 0) if(hdr != 0)
{ {
@ -1638,7 +1640,7 @@ static char * _cmgr_pdu_parse_encoding_data(char const * pdu, size_t len,
size_t j; size_t j;
unsigned int u; unsigned int u;
if((p = malloc((len - i) * 2)) == NULL) /* XXX 4 times big enough? */ if((p = malloc(len - i + 1)) == NULL) /* XXX 4 times big enough? */
return NULL; return NULL;
/* FIXME actually parse the header */ /* FIXME actually parse the header */
if(hdr != 0) if(hdr != 0)