diff options
Diffstat (limited to 'libgammu/service')
-rw-r--r-- | libgammu/service/backup/backtext.c | 62 | ||||
-rw-r--r-- | libgammu/service/gsmdata.c | 2 | ||||
-rw-r--r-- | libgammu/service/sms/gsmmulti.c | 20 |
3 files changed, 55 insertions, 29 deletions
diff --git a/libgammu/service/backup/backtext.c b/libgammu/service/backup/backtext.c index a908b84..99d2f89 100644 --- a/libgammu/service/backup/backtext.c +++ b/libgammu/service/backup/backtext.c @@ -1854,7 +1854,9 @@ static void ReadPbkEntry(INI_Section *file_info, char *section, GSM_MemoryEntry } sprintf(buffer,"Entry%02iType",num); readvalue = ReadCFGText(file_info, section, buffer, UseUnicode); - if (strcasecmp(readvalue,"NumberGeneral") == 0) { + if (readvalue == NULL) { + Pbk->Entries[Pbk->EntriesNum].EntryType = PBK_Number_Other; + } else if (strcasecmp(readvalue,"NumberGeneral") == 0) { Pbk->Entries[Pbk->EntriesNum].EntryType = PBK_Number_General; } else if (strcasecmp(readvalue,"NumberVideo") == 0) { Pbk->Entries[Pbk->EntriesNum].EntryType = PBK_Number_Video; @@ -2074,8 +2076,10 @@ loadpicture: if (readvalue != NULL) { /* We allocate here more memory than is actually required */ Pbk->Entries[Pbk->EntriesNum].Picture.Buffer = (char *)malloc(strlen(readvalue)); - if (Pbk->Entries[Pbk->EntriesNum].Picture.Buffer == NULL) + if (Pbk->Entries[Pbk->EntriesNum].Picture.Buffer == NULL) { + free(readvalue); break; + } Pbk->Entries[Pbk->EntriesNum].Picture.Length = DecodeBASE64(readvalue, Pbk->Entries[Pbk->EntriesNum].Picture.Buffer, strlen(readvalue)); @@ -2100,8 +2104,12 @@ loadtext: Pbk->Entries[Pbk->EntriesNum].SMSList[i] = 0; sprintf(buffer,"Entry%02iSMSList%02i",num,i); readvalue = ReadCFGText(file_info, section, buffer, UseUnicode); - if (readvalue==NULL) break; + if (readvalue==NULL) { + free(readvalue); + break; + } Pbk->Entries[Pbk->EntriesNum].SMSList[i] = atoi(readvalue); + free(readvalue); i++; } loaddone: @@ -3020,7 +3028,9 @@ static void ReadProfileEntry(INI_Section *file_info, char *section, GSM_Profile if (!unknown) { sprintf(buffer,"Value%02i",num); readvalue = ReadCFGText(file_info, section, buffer, UseUnicode); - if (strcasecmp(readvalue,"Level1") == 0) { + if (readvalue == NULL) { + Profile->FeatureValue[Profile->FeaturesNumber]=PROFILE_VOLUME_LEVEL1; + } else if (strcasecmp(readvalue,"Level1") == 0) { Profile->FeatureValue[Profile->FeaturesNumber]=PROFILE_VOLUME_LEVEL1; if (Profile->FeatureID[Profile->FeaturesNumber]==Profile_KeypadTone) { Profile->FeatureValue[Profile->FeaturesNumber]=PROFILE_KEYPAD_LEVEL1; @@ -3232,9 +3242,15 @@ GSM_Error LoadBackup(const char *FileName, GSM_Backup *backup) } readvalue = ReadCFGText(file_info, buffer, "IMEI", UseUnicode); - if (readvalue!=NULL) strcpy(backup->IMEI,readvalue); + if (readvalue!=NULL) { + strncpy(backup->IMEI, readvalue, sizeof(backup->IMEI) - 1); + backup->IMEI[sizeof(backup->IMEI) - 1] = 0; + } readvalue = ReadCFGText(file_info, buffer, "Phone", UseUnicode); - if (readvalue!=NULL) strcpy(backup->Model,readvalue); + if (readvalue!=NULL) { + strncpy(backup->Model, readvalue, sizeof(backup->Model) - 1); + backup->Model[sizeof(backup->Model) - 1] = 0; + } readvalue = ReadCFGText(file_info, buffer, "Creator", UseUnicode); if (readvalue!=NULL) { strncpy(backup->Creator,readvalue, sizeof(backup->Creator) - 1); @@ -4002,11 +4018,17 @@ GSM_Error SaveTextComment(FILE *file, unsigned char *comment) static GSM_Error SaveSMSBackupTextFile(FILE *file, GSM_SMS_Backup *backup) { int i=0; - unsigned char buffer[10000]={0}; + unsigned char *buffer; const char *s; GSM_DateTime DT; GSM_Error error; + buffer = malloc(10000); + if (buffer == NULL) { + return ERR_MOREMEMORY; + } + buffer[0] = 0; + fprintf(file, BACKUP_MAIN_HEADER "\n"); fprintf(file, BACKUP_INFO_HEADER "\n"); GSM_GetCurrentDateTime (&DT); @@ -4023,14 +4045,20 @@ static GSM_Error SaveSMSBackupTextFile(FILE *file, GSM_SMS_Backup *backup) case SMS_Coding_Unicode_No_Compression: case SMS_Coding_Default_No_Compression: error = SaveTextComment(file, backup->SMS[i]->Text); - if (error != ERR_NONE) return error; + if (error != ERR_NONE) { + free(buffer); + return error; + } break; default: break; } if (backup->SMS[i]->PDU == SMS_Deliver) { error = SaveBackupText(file, "SMSC", backup->SMS[i]->SMSC.Number, FALSE); - if (error != ERR_NONE) return error; + if (error != ERR_NONE) { + free(buffer); + return error; + } if (backup->SMS[i]->ReplyViaSameSMSC) { fprintf(file,"SMSCReply = TRUE\n"); } @@ -4043,7 +4071,10 @@ static GSM_Error SaveSMSBackupTextFile(FILE *file, GSM_SMS_Backup *backup) if (backup->SMS[i]->DateTime.Year != 0) { fprintf(file,"DateTime"); error = SaveVCalDateTime(file,&backup->SMS[i]->DateTime, FALSE); - if (error != ERR_NONE) return error; + if (error != ERR_NONE) { + free(buffer); + return error; + } } fprintf(file,"State = "); switch (backup->SMS[i]->State) { @@ -4053,9 +4084,15 @@ static GSM_Error SaveSMSBackupTextFile(FILE *file, GSM_SMS_Backup *backup) case SMS_UnSent : fprintf(file,"UnSent\n"); break; } error = SaveBackupText(file, "Number", backup->SMS[i]->Number, FALSE); - if (error != ERR_NONE) return error; + if (error != ERR_NONE) { + free(buffer); + return error; + } error = SaveBackupText(file, "Name", backup->SMS[i]->Name, FALSE); - if (error != ERR_NONE) return error; + if (error != ERR_NONE) { + free(buffer); + return error; + } if (backup->SMS[i]->UDH.Type != UDH_NoUDH) { EncodeHexBin(buffer,backup->SMS[i]->UDH.Text,backup->SMS[i]->UDH.Length); fprintf(file,"UDH = %s\n",buffer); @@ -4084,6 +4121,7 @@ static GSM_Error SaveSMSBackupTextFile(FILE *file, GSM_SMS_Backup *backup) fprintf(file,"\n"); i++; } + free(buffer); return ERR_NONE; } diff --git a/libgammu/service/gsmdata.c b/libgammu/service/gsmdata.c index 829752b..9ff5998 100644 --- a/libgammu/service/gsmdata.c +++ b/libgammu/service/gsmdata.c @@ -389,7 +389,7 @@ void GSM_EncodeMMSIndicatorSMSText(unsigned char *Buffer, size_t *Length, GSM_MM Buffer[(*Length)++] = 0x89; sprintf(buffer,"%s/TYPE=PLMN",Indicator->Sender); /* Field size */ - Buffer[(*Length)++] = strlen(buffer) + 2; + Buffer[(*Length)++] = (unsigned char)(strlen(buffer) + 2); /* Sender address is present */ Buffer[(*Length)++] = 0x80; strcpy(Buffer+(*Length),buffer); diff --git a/libgammu/service/sms/gsmmulti.c b/libgammu/service/sms/gsmmulti.c index 34a21c1..5cb826b 100644 --- a/libgammu/service/sms/gsmmulti.c +++ b/libgammu/service/sms/gsmmulti.c @@ -751,14 +751,8 @@ GSM_Error GSM_EncodeMultiPartSMS(GSM_Debug_Info *di, break; case SMS_NokiaVCARD10Long: Coding = SMS_Coding_Default_No_Compression; - /* is 1 SMS ? 8 = length of ..SCKE2 */ - if (Length<=GSM_MAX_SMS_CHARS_LENGTH-8) { - sprintf(Buffer,"//SCKE2 "); - Length = 8; - } else { - UDH = UDH_NokiaPhonebookLong; - } - error = GSM_EncodeVCARD(di, Buffer, buffer_size, &Length,Info->Entries[0].Phonebook,TRUE,Nokia_VCard10); + UDH = UDH_NokiaPhonebookLong; + error = GSM_EncodeVCARD(di, Buffer, buffer_size, &Length, Info->Entries[0].Phonebook, TRUE, Nokia_VCard10); if (error != ERR_NONE) { goto out; } @@ -766,18 +760,12 @@ GSM_Error GSM_EncodeMultiPartSMS(GSM_Debug_Info *di, EncodeUnicode(Buffer,Buffer2,Length); break; case SMS_NokiaVCARD21Long: - error = GSM_EncodeVCARD(di, Buffer, buffer_size, &Length,Info->Entries[0].Phonebook,TRUE,Nokia_VCard21); + error = GSM_EncodeVCARD(di, Buffer, buffer_size, &Length, Info->Entries[0].Phonebook, TRUE, Nokia_VCard21); if (error != ERR_NONE) { goto out; } Coding = SMS_Coding_Default_No_Compression; - /* Is 1 SMS ? 12 = length of ..SCKL23F4 */ - if (Length <= GSM_MAX_SMS_CHARS_LENGTH - 12) { - sprintf(Buffer,"//SCKL23F4%c%c",13,10); - Length = 12; - } else { - UDH = UDH_NokiaPhonebookLong; - } + UDH = UDH_NokiaPhonebookLong; memcpy(Buffer2,Buffer,Length); EncodeUnicode(Buffer,Buffer2,Length); break; |