Hi Philippe, On 08/31/2012 10:03 AM, Philippe Nunes wrote: > --- > src/smsutil.c | 36 +++++++++++++++++++++++++++++------- > 1 file changed, 29 insertions(+), 7 deletions(-) > > diff --git a/src/smsutil.c b/src/smsutil.c > index b4d129f..7569c63 100644 > --- a/src/smsutil.c > +++ b/src/smsutil.c > @@ -4090,7 +4090,7 @@ char *cbs_decode_text(GSList *cbs_list, char *iso639_lang) > unsigned char unpacked[CBS_MAX_GSM_CHARS]; > long written; > int max_chars; > - int i; > + int i, j; > > max_chars = > sms_text_capacity_gsm(CBS_MAX_GSM_CHARS, taken); > @@ -4102,12 +4102,24 @@ char *cbs_decode_text(GSList *cbs_list, char *iso639_lang) > i = iso639 ? 3 : 0; > > /* > - * CR is a padding character, which means we can > - * safely discard everything afterwards > + * CR can be used as a padding character, which means > + * we can safely discard everything afterwards > */ > + > for (; i< written; i++, bufsize++) { > - if (unpacked[i] == '\r') > - break; > + if (unpacked[i] == '\r') { > + /* > + * check if this is a padding character > + * or if it is a wanted > + */ > + for (j = i + 1; j< written; j++) > + if (unpacked[j] != '\r') > + break; > + > + if (j == written) > + break; > + } > + > > buf[bufsize] = unpacked[i]; > } I skipped the first two chunks and fixed this slightly differently. > @@ -4135,8 +4147,18 @@ char *cbs_decode_text(GSList *cbs_list, char *iso639_lang) > } > > while (i< max_offset) { > - if (ud[i] == 0x00&& ud[i+1] == '\r') > - break; > + if (ud[i] == 0x00&& ud[i+1] == '\r') { > + int j = i + 2; > + > + for (; j< max_offset; j = j + 2) > + if (ud[j] != 0x00 || > + ud[j + 1] != > + '\r') > + break; > + > + if (j == max_offset) > + break; > + } > > buf[bufsize] = ud[i]; > buf[bufsize + 1] = ud[i + 1]; The last chunk has been applied, thanks. Regards, -Denis