Only convert from ISO-8859-1 when relevant (fixes corruption and more)
This commit is contained in:
parent
440937ef71
commit
3bc00a493f
14
src/gsm.c
14
src/gsm.c
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user