From a70828bbc5dd5479ec11f8e8329091cc4236d620 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Antonio=20Ca=C3=B1as=20Vargas?=
%s
]]>\n", UsrDat.FirstName,UsrDat.Surname1,UsrDat.Surname2,Content); diff --git a/swad_account.c b/swad_account.c index fb0d1027..4edb9483 100644 --- a/swad_account.c +++ b/swad_account.c @@ -73,7 +73,7 @@ static void Acc_ShowFormCheckIfIHaveAccount (const char *Title); static void Acc_WriteRowEmptyAccount (unsigned NumUsr,const char *ID,struct UsrData *UsrDat); static void Acc_ShowFormRequestNewAccountWithParams (const char *NewNicknameWithoutArroba, const char *NewEmail); -static bool Acc_GetParamsNewAccount (char *NewNicknameWithoutArroba, +static bool Acc_GetParamsNewAccount (char NewNicknameWithoutArroba[Nck_MAX_BYTES_NICKNAME_FROM_FORM + 1], char *NewEmail, char *NewEncryptedPassword); static void Acc_CreateNewEncryptedUsrCod (struct UsrData *UsrDat); @@ -331,7 +331,7 @@ static void Acc_ShowFormRequestNewAccountWithParams (const char *NewNicknameWith extern const char *Txt_HELP_nickname; extern const char *Txt_HELP_email; extern const char *Txt_Email; - char NewNicknameWithArroba[Nck_MAX_BYTES_NICKNAME_WITH_ARROBA+1]; + char NewNicknameWithArroba[Nck_MAX_BYTES_NICKNAME_FROM_FORM+1]; /***** Form to enter some data of the new user *****/ Act_FormStart (ActCreUsrAcc); @@ -548,9 +548,9 @@ static void Acc_PrintAccountSeparator (void) bool Acc_CreateMyNewAccountAndLogIn (void) { - char NewNicknameWithoutArroba[Nck_MAX_BYTES_NICKNAME_WITH_ARROBA+1]; - char NewEmail[Usr_MAX_BYTES_USR_EMAIL+1]; - char NewEncryptedPassword[Cry_LENGTH_ENCRYPTED_STR_SHA512_BASE64+1]; + char NewNicknameWithoutArroba[Nck_MAX_BYTES_NICKNAME_FROM_FORM + 1]; + char NewEmail[Usr_MAX_BYTES_USR_EMAIL + 1]; + char NewEncryptedPassword[Cry_LENGTH_ENCRYPTED_STR_SHA512_BASE64 + 1]; if (Acc_GetParamsNewAccount (NewNicknameWithoutArroba,NewEmail,NewEncryptedPassword)) { @@ -575,7 +575,8 @@ bool Acc_CreateMyNewAccountAndLogIn (void) if (Mai_UpdateEmailInDB (&Gbl.Usrs.Me.UsrDat,NewEmail)) { /* Email updated sucessfully */ - Str_Copy (Gbl.Usrs.Me.UsrDat.Email,NewEmail,Usr_MAX_BYTES_USR_EMAIL); + Str_Copy (Gbl.Usrs.Me.UsrDat.Email,NewEmail, + Usr_MAX_BYTES_USR_EMAIL); Gbl.Usrs.Me.UsrDat.EmailConfirmed = false; } @@ -595,7 +596,7 @@ bool Acc_CreateMyNewAccountAndLogIn (void) /*****************************************************************************/ // Return false on error -static bool Acc_GetParamsNewAccount (char *NewNicknameWithoutArroba, +static bool Acc_GetParamsNewAccount (char NewNicknameWithoutArroba[Nck_MAX_BYTES_NICKNAME_FROM_FORM + 1], char *NewEmail, char *NewEncryptedPassword) { @@ -604,16 +605,17 @@ static bool Acc_GetParamsNewAccount (char *NewNicknameWithoutArroba, extern const char *Txt_The_email_address_X_had_been_registered_by_another_user; extern const char *Txt_The_email_address_entered_X_is_not_valid; char Query[1024]; - char NewNicknameWithArroba[Nck_MAX_BYTES_NICKNAME_WITH_ARROBA+1]; - char NewPlainPassword[Pwd_MAX_LENGTH_PLAIN_PASSWORD+1]; + char NewNicknameWithArroba[Nck_MAX_BYTES_NICKNAME_FROM_FORM + 1]; + char NewPlainPassword[Pwd_MAX_LENGTH_PLAIN_PASSWORD + 1]; bool Error = false; /***** Step 1/3: Get new nickname from form *****/ - Par_GetParToText ("NewNick",NewNicknameWithArroba,Nck_MAX_BYTES_NICKNAME_WITH_ARROBA); + Par_GetParToText ("NewNick",NewNicknameWithArroba, + Nck_MAX_BYTES_NICKNAME_FROM_FORM); /* Remove arrobas at the beginning */ Str_Copy (NewNicknameWithoutArroba,NewNicknameWithArroba, - Nck_MAX_BYTES_NICKNAME_WITH_ARROBA); + Nck_MAX_BYTES_NICKNAME_FROM_FORM); Str_RemoveLeadingArrobas (NewNicknameWithoutArroba); /* Create a new version of the nickname with arroba */ diff --git a/swad_action.c b/swad_action.c index f6ebd116..172eff52 100644 --- a/swad_action.c +++ b/swad_action.c @@ -4593,9 +4593,10 @@ const char *Act_GetSubtitleAction (Act_Action_t Action) /********************* Get text for action from database *********************/ /*****************************************************************************/ -char *Act_GetActionTextFromDB (long ActCod,char *Txt) +char *Act_GetActionTextFromDB (long ActCod, + char ActTxt[Act_MAX_LENGTH_ACTION_TXT + 1]) { - extern const char *Txt_STR_LANG_ID[1+Txt_NUM_LANGUAGES]; + extern const char *Txt_STR_LANG_ID[1 + Txt_NUM_LANGUAGES]; char Query[1024]; MYSQL_RES *mysql_res; MYSQL_ROW row; @@ -4608,15 +4609,16 @@ char *Act_GetActionTextFromDB (long ActCod,char *Txt) { /***** Get text *****/ row = mysql_fetch_row (mysql_res); - Str_Copy (Txt,row[0],Act_MAX_LENGTH_ACTION_TXT); + Str_Copy (ActTxt,row[0], + Act_MAX_LENGTH_ACTION_TXT); } else // ActCod-Language not found on database - Txt[0] = '\0'; + ActTxt[0] = '\0'; /***** Free structure that stores the query result *****/ DB_FreeMySQLResult (&mysql_res); - return Txt; + return ActTxt; } /*****************************************************************************/ diff --git a/swad_action.h b/swad_action.h index 0c436f55..0207a005 100644 --- a/swad_action.h +++ b/swad_action.h @@ -1512,7 +1512,8 @@ struct Act_Actions bool Act_CheckIfIHavePermissionToExecuteAction (Act_Action_t Action); const char *Act_GetTitleAction (Act_Action_t Action); const char *Act_GetSubtitleAction (Act_Action_t Action); -char *Act_GetActionTextFromDB (long ActCod,char *Txt); +char *Act_GetActionTextFromDB (long ActCod, + char ActTxt[Act_MAX_LENGTH_ACTION_TXT + 1]); void Act_FormGoToStart (Act_Action_t NextAction); void Act_FormStart (Act_Action_t NextAction); diff --git a/swad_agenda.c b/swad_agenda.c index 5401862a..200f2603 100644 --- a/swad_agenda.c +++ b/swad_agenda.c @@ -96,7 +96,8 @@ static void Agd_PutFormsToRemEditOneEvent (struct AgendaEvent *AgdEvent); static void Agd_PutParams (void); static void Agd_GetListEvents (Agd_AgendaType_t AgendaType); static void Agd_GetDataOfEventByCod (struct AgendaEvent *AgdEvent); -static void Agd_GetEventTxtFromDB (struct AgendaEvent *AgdEvent,char *Txt); +static void Agd_GetEventTxtFromDB (struct AgendaEvent *AgdEvent, + char Txt[Cns_MAX_BYTES_TEXT + 1]); static void Agd_PutParamAgdCod (long AgdCod); static bool Agd_CheckIfSimilarEventExists (struct AgendaEvent *AgdEvent); static void Agd_CreateEvent (struct AgendaEvent *AgdEvent,const char *Txt); @@ -114,7 +115,7 @@ void Agd_PutFormLogInToShowUsrAgenda (void) void Agd_PutParamAgd (void) { - char Nickname[Nck_MAX_BYTES_NICKNAME_WITH_ARROBA+1]; + char Nickname[Nck_MAX_BYTES_NICKNAME_FROM_FORM+1]; sprintf (Nickname,"@%s",Gbl.Usrs.Other.UsrDat.Nickname); Par_PutHiddenParamString ("agd",Nickname); @@ -947,10 +948,12 @@ static void Agd_GetDataOfEventByCod (struct AgendaEvent *AgdEvent) Dat_PRESENT)); /* Get the event (row[7]) */ - Str_Copy (AgdEvent->Event,row[7],Agd_MAX_LENGTH_EVENT); + Str_Copy (AgdEvent->Event,row[7], + Agd_MAX_LENGTH_EVENT); /* Get the event (row[8]) */ - Str_Copy (AgdEvent->Location,row[8],Agd_MAX_LENGTH_LOCATION); + Str_Copy (AgdEvent->Location,row[8], + Agd_MAX_LENGTH_LOCATION); } else { @@ -989,7 +992,8 @@ void Agd_FreeListEvents (void) /*********************** Get event text from database ************************/ /*****************************************************************************/ -static void Agd_GetEventTxtFromDB (struct AgendaEvent *AgdEvent,char *Txt) +static void Agd_GetEventTxtFromDB (struct AgendaEvent *AgdEvent, + char Txt[Cns_MAX_BYTES_TEXT + 1]) { char Query[512]; MYSQL_RES *mysql_res; @@ -1007,7 +1011,8 @@ static void Agd_GetEventTxtFromDB (struct AgendaEvent *AgdEvent,char *Txt) { /* Get info text */ row = mysql_fetch_row (mysql_res); - Str_Copy (Txt,row[0],Cns_MAX_BYTES_TEXT); + Str_Copy (Txt,row[0], + Cns_MAX_BYTES_TEXT); } else Txt[0] = '\0'; @@ -1260,7 +1265,7 @@ void Agd_RequestCreatOrEditEvent (void) extern const char *Txt_Save; struct AgendaEvent AgdEvent; bool ItsANewEvent; - char Txt[Cns_MAX_BYTES_TEXT+1]; + char Txt[Cns_MAX_BYTES_TEXT + 1]; /***** Get parameters *****/ Agd_GetParamEventOrderType (); diff --git a/swad_agenda.h b/swad_agenda.h index f0f049b0..b2ecf9fb 100644 --- a/swad_agenda.h +++ b/swad_agenda.h @@ -52,8 +52,8 @@ struct AgendaEvent bool Hidden; time_t TimeUTC[Agd_NUM_DATES]; Dat_TimeStatus_t TimeStatus; - char Event[Agd_MAX_LENGTH_EVENT+1]; - char Location[Agd_MAX_LENGTH_LOCATION+1]; + char Event[Agd_MAX_LENGTH_EVENT + 1]; + char Location[Agd_MAX_LENGTH_LOCATION + 1]; }; typedef enum diff --git a/swad_announcement.c b/swad_announcement.c index 61edefc6..0f5462db 100644 --- a/swad_announcement.c +++ b/swad_announcement.c @@ -86,8 +86,8 @@ void Ann_ShowAllAnnouncements (void) unsigned NumAnn; long AnnCod; unsigned Roles; - char Subject[Cns_MAX_BYTES_SUBJECT+1]; - char Content[Cns_MAX_BYTES_TEXT+1]; + char Subject[Cns_MAX_BYTES_SUBJECT + 1]; + char Content[Cns_MAX_BYTES_TEXT + 1]; unsigned UnsignedNum; Ann_Status_t Status; bool ICanEdit = (Gbl.Usrs.Me.LoggedRole == Rol_SYS_ADM); @@ -149,10 +149,12 @@ void Ann_ShowAllAnnouncements (void) Lay_ShowErrorAndExit ("Error when reading roles of announcement."); /* Get the content (row[3]) */ - Str_Copy (Subject,row[3],Cns_MAX_BYTES_SUBJECT); + Str_Copy (Subject,row[3], + Cns_MAX_BYTES_SUBJECT); /* Get the content (row[4]) and insert links */ - Str_Copy (Content,row[4],Cns_MAX_BYTES_TEXT); + Str_Copy (Content,row[4], + Cns_MAX_BYTES_TEXT); Str_InsertLinks (Content,Cns_MAX_BYTES_TEXT,50); /* Show the announcement */ @@ -210,8 +212,8 @@ void Ann_ShowMyAnnouncementsNotMarkedAsSeen (void) unsigned NumAnnouncements; unsigned NumAnn; long AnnCod; - char Subject[Cns_MAX_BYTES_SUBJECT+1]; - char Content[Cns_MAX_BYTES_TEXT+1]; + char Subject[Cns_MAX_BYTES_SUBJECT + 1]; + char Content[Cns_MAX_BYTES_TEXT + 1]; /***** Select announcements not seen *****/ Rol_GetRolesInAllCrssIfNotYetGot (&Gbl.Usrs.Me.UsrDat); @@ -241,10 +243,12 @@ void Ann_ShowMyAnnouncementsNotMarkedAsSeen (void) Lay_ShowErrorAndExit ("Wrong code of announcement."); /* Get the content (row[1]) */ - Str_Copy (Subject,row[1],Cns_MAX_BYTES_SUBJECT); + Str_Copy (Subject,row[1], + Cns_MAX_BYTES_SUBJECT); /* Get the content (row[2]) and insert links */ - Str_Copy (Content,row[2],Cns_MAX_BYTES_TEXT); + Str_Copy (Content,row[2], + Cns_MAX_BYTES_TEXT); Str_InsertLinks (Content,Cns_MAX_BYTES_TEXT,50); /* Show the announcement */ diff --git a/swad_assignment.c b/swad_assignment.c index 098066f6..063cf241 100644 --- a/swad_assignment.c +++ b/swad_assignment.c @@ -452,8 +452,10 @@ static void Asg_WriteAsgAuthor (struct Assignment *Asg) "PHOTO15x20",Pho_ZOOM,false); /***** Write name *****/ - Str_Copy (FirstName,UsrDat.FirstName,Usr_MAX_BYTES_NAME); - Str_Copy (Surnames,UsrDat.Surname1,Usr_MAX_BYTES_SURNAMES); + Str_Copy (FirstName,UsrDat.FirstName, + Usr_MAX_BYTES_NAME); + Str_Copy (Surnames,UsrDat.Surname1, + Usr_MAX_BYTES_SURNAMES); if (UsrDat.Surname2[0]) { Str_Concat (Surnames," ",Usr_MAX_BYTES_SURNAMES); @@ -776,10 +778,12 @@ static void Asg_GetDataOfAssignment (struct Assignment *Asg,const char *Query) Asg->Open = (row[5][0] == '1'); /* Get the title of the assignment (row[6]) */ - Str_Copy (Asg->Title,row[6],Asg_MAX_LENGTH_ASSIGNMENT_TITLE); + Str_Copy (Asg->Title,row[6], + Asg_MAX_LENGTH_ASSIGNMENT_TITLE); /* Get the folder for the assignment files (row[7]) */ - Str_Copy (Asg->Folder,row[7],Asg_MAX_LENGTH_FOLDER); + Str_Copy (Asg->Folder,row[7], + Asg_MAX_LENGTH_FOLDER); Asg->SendWork = (Asg->Folder[0] != '\0'); /* Can I do this assignment? */ @@ -848,7 +852,8 @@ static void Asg_GetAssignmentTxtFromDB (long AsgCod,char Txt[Cns_MAX_BYTES_TEXT { /* Get info text */ row = mysql_fetch_row (mysql_res); - Str_Copy (Txt,row[0],Cns_MAX_BYTES_TEXT); + Str_Copy (Txt,row[0], + Cns_MAX_BYTES_TEXT); } else Txt[0] = '\0'; @@ -871,6 +876,7 @@ void Asg_GetNotifAssignment (char SummaryStr[Cns_MAX_BYTES_TEXT + 1],char **Cont char Query[512]; MYSQL_RES *mysql_res; MYSQL_ROW row; + size_t Length; SummaryStr[0] = '\0'; // Return nothing on error @@ -887,18 +893,19 @@ void Asg_GetNotifAssignment (char SummaryStr[Cns_MAX_BYTES_TEXT + 1],char **Cont row = mysql_fetch_row (mysql_res); /***** Get summary *****/ - Str_Copy (SummaryStr,row[0],Cns_MAX_BYTES_TEXT); - + Str_Copy (SummaryStr,row[0], + Cns_MAX_BYTES_TEXT); if (MaxChars) Str_LimitLengthHTMLStr (SummaryStr,MaxChars); /***** Get content *****/ if (GetContent) { - if ((*ContentStr = (char *) malloc (Cns_MAX_BYTES_TEXT + 1)) == NULL) + Length = strlen (row[1]); + if ((*ContentStr = (char *) malloc (Length + 1)) == NULL) Lay_ShowErrorAndExit ("Error allocating memory for notification content."); - - Str_Copy (*ContentStr,row[1],Cns_MAX_BYTES_TEXT); + Str_Copy (*ContentStr,row[1], + Length); } } mysql_free_result (mysql_res); diff --git a/swad_assignment.h b/swad_assignment.h index cd60bf41..88ae253c 100644 --- a/swad_assignment.h +++ b/swad_assignment.h @@ -52,9 +52,9 @@ struct Assignment long UsrCod; time_t TimeUTC[Dat_NUM_START_END_TIME]; bool Open; - char Title[Asg_MAX_LENGTH_ASSIGNMENT_TITLE+1]; + char Title[Asg_MAX_LENGTH_ASSIGNMENT_TITLE + 1]; Asg_SendWork_t SendWork; - char Folder[Asg_MAX_LENGTH_FOLDER+1]; + char Folder[Asg_MAX_LENGTH_FOLDER + 1]; bool IBelongToCrsOrGrps; // I can do this assignment // (it is associated to no groups // or, if associated to groups, diff --git a/swad_attendance.c b/swad_attendance.c index a6310c71..006fb715 100644 --- a/swad_attendance.c +++ b/swad_attendance.c @@ -107,7 +107,9 @@ static void Att_GetNumStdsTotalWhoAreInAttEvent (struct AttendanceEvent *Att); static unsigned Att_GetNumStdsFromAListWhoAreInAttEvent (long AttCod,long LstSelectedUsrCods[],unsigned NumStdsInList); static bool Att_CheckIfUsrIsInTableAttUsr (long AttCod,long UsrCod,bool *Present); static bool Att_CheckIfUsrIsPresentInAttEvent (long AttCod,long UsrCod); -static bool Att_CheckIfUsrIsPresentInAttEventAndGetComments (long AttCod,long UsrCod,char *CommentStd,char *CommentTch); +static bool Att_CheckIfUsrIsPresentInAttEventAndGetComments (long AttCod,long UsrCod, + char CommentStd[Cns_MAX_BYTES_TEXT + 1], + char CommentTch[Cns_MAX_BYTES_TEXT + 1]); static void Att_RegUsrInAttEventChangingComments (long AttCod,long UsrCod,bool Present, const char *CommentStd,const char *CommentTch); static void Att_RemoveUsrFromAttEvent (long AttCod,long UsrCod); @@ -141,7 +143,7 @@ static void Att_ListAttEventsForAStd (unsigned NumStd,struct UsrData *UsrDat); void Att_SeeAttEvents (void) { - char NicknameWithArroba[Nck_MAX_BYTES_NICKNAME_WITH_ARROBA+1]; + char NicknameWithArroba[Nck_MAX_BYTES_NICKNAME_FROM_FORM+1]; /***** Get parameters *****/ Att_GetParamAttOrderType (); @@ -492,8 +494,10 @@ static void Att_WriteAttEventAuthor (struct AttendanceEvent *Att) "PHOTO15x20",Pho_ZOOM,false); /***** Write name *****/ - Str_Copy (FirstName,UsrDat.FirstName,Usr_MAX_BYTES_NAME); - Str_Copy (Surnames,UsrDat.Surname1,Usr_MAX_BYTES_SURNAMES); + Str_Copy (FirstName,UsrDat.FirstName, + Usr_MAX_BYTES_NAME); + Str_Copy (Surnames,UsrDat.Surname1, + Usr_MAX_BYTES_SURNAMES); if (UsrDat.Surname2[0]) { Str_Concat (Surnames," ",Usr_MAX_BYTES_SURNAMES); @@ -785,7 +789,8 @@ bool Att_GetDataOfAttEventByCod (struct AttendanceEvent *Att) Att->CommentTchVisible = (row[7][0] == 'Y'); /* Get the title of the attendance event (row[8]) */ - Str_Copy (Att->Title,row[8],Att_MAX_LENGTH_ATTENDANCE_EVENT_TITLE); + Str_Copy (Att->Title,row[8], + Att_MAX_LENGTH_ATTENDANCE_EVENT_TITLE); } /***** Free structure that stores the query result *****/ @@ -856,7 +861,8 @@ static void Att_GetAttEventTxtFromDB (long AttCod,char Txt[Cns_MAX_BYTES_TEXT + row = mysql_fetch_row (mysql_res); /* Get info text */ - Str_Copy (Txt,row[0],Cns_MAX_BYTES_TEXT); + Str_Copy (Txt,row[0], + Cns_MAX_BYTES_TEXT); } else Txt[0] = '\0'; @@ -2493,7 +2499,9 @@ static bool Att_CheckIfUsrIsPresentInAttEvent (long AttCod,long UsrCod) /***************** Check if a student attended to an event *******************/ /*****************************************************************************/ -static bool Att_CheckIfUsrIsPresentInAttEventAndGetComments (long AttCod,long UsrCod,char *CommentStd,char *CommentTch) +static bool Att_CheckIfUsrIsPresentInAttEventAndGetComments (long AttCod,long UsrCod, + char CommentStd[Cns_MAX_BYTES_TEXT + 1], + char CommentTch[Cns_MAX_BYTES_TEXT + 1]) { char Query[256]; MYSQL_RES *mysql_res; @@ -2514,10 +2522,12 @@ static bool Att_CheckIfUsrIsPresentInAttEventAndGetComments (long AttCod,long Us Present = (row[0][0] == 'Y'); /* Get student's comment (row[1]) */ - Str_Copy (CommentStd,row[1],Cns_MAX_BYTES_TEXT); + Str_Copy (CommentStd,row[1], + Cns_MAX_BYTES_TEXT); /* Get teacher's comment (row[2]) */ - Str_Copy (CommentTch,row[2],Cns_MAX_BYTES_TEXT); + Str_Copy (CommentTch,row[2], + Cns_MAX_BYTES_TEXT); } else // User is not present { @@ -3450,8 +3460,8 @@ static void Att_ListAttEventsForAStd (unsigned NumStd,struct UsrData *UsrDat) bool Present; bool ShowCommentStd; bool ShowCommentTch; - char CommentStd[Cns_MAX_BYTES_TEXT+1]; - char CommentTch[Cns_MAX_BYTES_TEXT+1]; + char CommentStd[Cns_MAX_BYTES_TEXT + 1]; + char CommentTch[Cns_MAX_BYTES_TEXT + 1]; /***** Write number of student in the list *****/ fprintf (Gbl.F.Out,"");
/***** First name *****/
- Str_Copy (Name,UsrDat->FirstName,Usr_MAX_BYTES_NAME);
+ Str_Copy (Name,UsrDat->FirstName,
+ Usr_MAX_BYTES_NAME);
Str_LimitLengthHTMLStr (Name,20);
fprintf (Gbl.F.Out,"%s ",Name); /***** Surname 1 *****/ - Str_Copy (Name,UsrDat->Surname1,Usr_MAX_BYTES_NAME); + Str_Copy (Name,UsrDat->Surname1, + Usr_MAX_BYTES_NAME); Str_LimitLengthHTMLStr (Name,20); fprintf (Gbl.F.Out,"%s ",Name); /***** Surname 2 *****/ - Str_Copy (Name,UsrDat->Surname2,Usr_MAX_BYTES_NAME); + Str_Copy (Name,UsrDat->Surname2, + Usr_MAX_BYTES_NAME); Str_LimitLengthHTMLStr (Name,20); fprintf (Gbl.F.Out,"%s",Name); @@ -2601,7 +2609,7 @@ static void Rec_ShowFullName (struct UsrData *UsrDat) static void Rec_ShowNickname (struct UsrData *UsrDat,bool PutFormLinks) { extern const char *Txt_View_public_profile; - char NicknameWithArroba[Nck_MAX_BYTES_NICKNAME_WITH_ARROBA+1]; + char NicknameWithArroba[Nck_MAX_BYTES_NICKNAME_FROM_FORM+1]; fprintf (Gbl.F.Out," |
"
diff --git a/swad_search.c b/swad_search.c
index 6911faaa..68db7cf8 100644
--- a/swad_search.c
+++ b/swad_search.c
@@ -355,6 +355,7 @@ void Sch_PutFormToSearchInPageTopHeading (void)
ActionSearch = ActSysSch;
Gbl.Scope.Default = Sco_SCOPE_SYS;
}
+
Act_FormStart (ActionSearch);
Sco_GetScope ("ScopeSch");
Sco_PutParamScope ("ScopeSch",Gbl.Scope.Current);
diff --git a/swad_session.c b/swad_session.c
index 7f9e5f8c..9569cdcf 100644
--- a/swad_session.c
+++ b/swad_session.c
@@ -80,7 +80,8 @@ void Ses_GetNumSessions (void)
void Ses_CreateSession (void)
{
/***** Create a unique name for the session *****/
- Str_Copy (Gbl.Session.Id,Gbl.UniqueNameEncrypted,Ses_LENGTH_SESSION_ID);
+ Str_Copy (Gbl.Session.Id,Gbl.UniqueNameEncrypted,
+ Ses_LENGTH_SESSION_ID);
/***** Check that session is not open *****/
if (Ses_CheckIfSessionExists (Gbl.Session.Id))
@@ -315,7 +316,8 @@ bool Ses_GetSessionData (void)
Gbl.Search.WhatToSearch = (Sch_WhatToSearch_t) UnsignedNum;
/* Get search string (row[9]) */
- Str_Copy (Gbl.Search.Str,row[9],Sch_MAX_LENGTH_STRING_TO_FIND);
+ Str_Copy (Gbl.Search.Str,row[9],
+ Sch_MAX_LENGTH_STRING_TO_FIND);
}
Result = true;
@@ -428,8 +430,11 @@ unsigned Ses_GetHiddenParFromDB (Act_Action_t Action,const char *ParamName,char
{
/***** Get the value del parameter *****/
row = mysql_fetch_row (mysql_res);
- Str_Copy (ParamValue,row[0],MaxBytes);
+
ParameterIsTooBig = (strlen (row[0]) > MaxBytes);
+ if (!ParameterIsTooBig)
+ Str_Copy (ParamValue,row[0],
+ MaxBytes);
}
/***** Free structure that stores the query result *****/
diff --git a/swad_social.c b/swad_social.c
index 1186a77e..613de600 100644
--- a/swad_social.c
+++ b/swad_social.c
@@ -113,7 +113,7 @@ struct SocialComment
long NotCod; // Note code
time_t DateTimeUTC;
unsigned NumFavs; // Number of times (users) this comment has been favourited
- char Content[Cns_MAX_BYTES_LONG_TEXT+1];
+ char Content[Cns_MAX_BYTES_LONG_TEXT + 1];
struct Image Image;
};
@@ -1475,7 +1475,7 @@ static void Soc_GetAndWriteSocialPost (long PstCod)
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRows;
- char Content[Cns_MAX_BYTES_LONG_TEXT+1];
+ char Content[Cns_MAX_BYTES_LONG_TEXT + 1];
struct Image Image;
/***** Initialize image *****/
@@ -1493,7 +1493,8 @@ static void Soc_GetAndWriteSocialPost (long PstCod)
row = mysql_fetch_row (mysql_res);
/****** Get content (row[0]) *****/
- Str_Copy (Content,row[0],Cns_MAX_BYTES_LONG_TEXT);
+ Str_Copy (Content,row[0],
+ Cns_MAX_BYTES_LONG_TEXT);
/****** Get image name (row[1]), title (row[2]) and URL (row[3]) *****/
Img_GetImageNameTitleAndURLFromRow (row[1],row[2],row[3],&Image);
@@ -1982,7 +1983,8 @@ static void Soc_PutFormToWriteNewPost (void)
fprintf (Gbl.F.Out," ");
/* Write author's full name and nickname */
- Str_Copy (FullName,Gbl.Usrs.Me.UsrDat.FullName,Usr_MAX_BYTES_FULL_NAME);
+ Str_Copy (FullName,Gbl.Usrs.Me.UsrDat.FullName,
+ Usr_MAX_BYTES_FULL_NAME);
Str_LimitLengthHTMLStr (FullName,16);
fprintf (Gbl.F.Out," "
"%s"
@@ -4561,7 +4563,8 @@ static void Soc_GetDataOfSocialCommentFromRow (MYSQL_ROW row,struct SocialCommen
SocCom->DateTimeUTC = Dat_GetUNIXTimeFromStr (row[3]);
/***** Get content (row[4]) *****/
- Str_Copy (SocCom->Content,row[4],Cns_MAX_BYTES_LONG_TEXT);
+ Str_Copy (SocCom->Content,row[4],
+ Cns_MAX_BYTES_LONG_TEXT);
/***** Get number of times this comment has been favourited *****/
SocCom->NumFavs = Soc_GetNumTimesACommHasBeenFav (SocCom);
@@ -4654,7 +4657,7 @@ void Soc_GetNotifSocialPublishing (char SummaryStr[Cns_MAX_BYTES_TEXT + 1],
MYSQL_ROW row;
struct SocialPublishing SocPub;
struct SocialNote SocNot;
- char Content[Cns_MAX_BYTES_LONG_TEXT+1];
+ char Content[Cns_MAX_BYTES_LONG_TEXT + 1];
size_t Length;
bool ContentCopied = false;
@@ -4701,7 +4704,8 @@ void Soc_GetNotifSocialPublishing (char SummaryStr[Cns_MAX_BYTES_TEXT + 1],
row = mysql_fetch_row (mysql_res);
/****** Get content (row[0]) *****/
- Str_Copy (Content,row[0],Cns_MAX_BYTES_LONG_TEXT);
+ Str_Copy (Content,row[0],
+ Cns_MAX_BYTES_LONG_TEXT);
}
/***** Free structure that stores the query result *****/
@@ -4713,14 +4717,16 @@ void Soc_GetNotifSocialPublishing (char SummaryStr[Cns_MAX_BYTES_TEXT + 1],
Length = strlen (Content);
if ((*ContentStr = (char *) malloc (Length + 1)) != NULL)
{
- Str_Copy (*ContentStr,Content,Length);
+ Str_Copy (*ContentStr,Content,
+ Length);
ContentCopied = true;
}
}
/***** Copy summary string *****/
Str_LimitLengthHTMLStr (Content,MaxChars);
- Str_Copy (SummaryStr,Content,Cns_MAX_BYTES_TEXT);
+ Str_Copy (SummaryStr,Content,
+ Cns_MAX_BYTES_TEXT);
}
else
Soc_GetNoteSummary (&SocNot,SummaryStr,Soc_MAX_BYTES_SUMMARY);
@@ -4737,7 +4743,8 @@ void Soc_GetNotifSocialPublishing (char SummaryStr[Cns_MAX_BYTES_TEXT + 1],
row = mysql_fetch_row (mysql_res);
/****** Get content (row[0]) *****/
- Str_Copy (Content,row[0],Cns_MAX_BYTES_LONG_TEXT);
+ Str_Copy (Content,row[0],
+ Cns_MAX_BYTES_LONG_TEXT);
}
/***** Free structure that stores the query result *****/
@@ -4749,14 +4756,16 @@ void Soc_GetNotifSocialPublishing (char SummaryStr[Cns_MAX_BYTES_TEXT + 1],
Length = strlen (Content);
if ((*ContentStr = (char *) malloc (Length + 1)) != NULL)
{
- Str_Copy (*ContentStr,Content,Length);
+ Str_Copy (*ContentStr,Content,
+ Length);
ContentCopied = true;
}
}
/***** Copy summary string *****/
Str_LimitLengthHTMLStr (Content,MaxChars);
- Str_Copy (SummaryStr,Content,Cns_MAX_BYTES_TEXT);
+ Str_Copy (SummaryStr,Content,
+ Cns_MAX_BYTES_TEXT);
break;
}
@@ -4824,7 +4833,8 @@ static void Str_AnalyzeTxtAndStoreNotifyEventToMentionedUsrs (long PubCod,const
if (IsNickname)
{
/* Copy nickname */
- Str_Copy (UsrDat.Nickname,Nickname.PtrStart,Nickname.Length);
+ Str_Copy (UsrDat.Nickname,Nickname.PtrStart,
+ Nck_MAX_LENGTH_NICKNAME_WITHOUT_ARROBA);
if ((UsrDat.UsrCod = Nck_GetUsrCodFromNickname (UsrDat.Nickname)) > 0)
if (UsrDat.UsrCod != Gbl.Usrs.Me.UsrDat.UsrCod) // It's not me
diff --git a/swad_statistic.c b/swad_statistic.c
index a548cd49..4b2dd174 100644
--- a/swad_statistic.c
+++ b/swad_statistic.c
@@ -255,7 +255,8 @@ The IP address of the remote host making the request.
void Sta_GetRemoteAddr (void)
{
if (getenv ("REMOTE_ADDR"))
- Str_Copy (Gbl.IP,getenv ("REMOTE_ADDR"),Cns_MAX_LENGTH_IP);
+ Str_Copy (Gbl.IP,getenv ("REMOTE_ADDR"),
+ Cns_MAX_LENGTH_IP);
else
Gbl.IP[0] = '\0';
}
@@ -983,7 +984,8 @@ static void Sta_ShowHits (Sta_GlobalOrCourseAccesses_t GlobalOrCourse)
switch (Gbl.Stat.CountType)
{
case Sta_TOTAL_CLICKS:
- Str_Copy (StrQueryCountType,"COUNT(*)",Sta_MAX_LENGTH_COUNT_TYPE);
+ Str_Copy (StrQueryCountType,"COUNT(*)",
+ Sta_MAX_LENGTH_COUNT_TYPE);
break;
case Sta_DISTINCT_USRS:
sprintf (StrQueryCountType,"COUNT(DISTINCT(%s.UsrCod))",LogTable);
@@ -5451,10 +5453,14 @@ static void Sta_WriteRowStatsFileBrowsers (Brw_FileBrowser_t FileZone,const char
if (SizeOfFileZones.NumCrss == -1)
{
- Str_Copy (StrNumCrss ,"-",10);
- Str_Copy (StrNumFoldersPerCrs,"-",10);
- Str_Copy (StrNumFilesPerCrs ,"-",10);
- Str_Copy (FileSizePerCrsStr ,"-",Fil_MAX_BYTES_FILE_SIZE_STRING);
+ Str_Copy (StrNumCrss,"-",
+ 10);
+ Str_Copy (StrNumFoldersPerCrs,"-",
+ 10);
+ Str_Copy (StrNumFilesPerCrs,"-",
+ 10);
+ Str_Copy (FileSizePerCrsStr,"-",
+ Fil_MAX_BYTES_FILE_SIZE_STRING);
}
else
{
@@ -5474,16 +5480,21 @@ static void Sta_WriteRowStatsFileBrowsers (Brw_FileBrowser_t FileZone,const char
}
if (SizeOfFileZones.NumGrps == -1)
- Str_Copy (StrNumGrps,"-",10);
+ Str_Copy (StrNumGrps,"-",
+ 10);
else
sprintf (StrNumGrps,"%d",SizeOfFileZones.NumGrps);
if (SizeOfFileZones.NumUsrs == -1)
{
- Str_Copy (StrNumUsrs ,"-",10);
- Str_Copy (StrNumFoldersPerUsr,"-",10);
- Str_Copy (StrNumFilesPerUsr ,"-",10);
- Str_Copy (FileSizePerUsrStr ,"-",Fil_MAX_BYTES_FILE_SIZE_STRING);
+ Str_Copy (StrNumUsrs,"-",
+ 10);
+ Str_Copy (StrNumFoldersPerUsr,"-",
+ 10);
+ Str_Copy (StrNumFilesPerUsr,"-",
+ 10);
+ Str_Copy (FileSizePerUsrStr,"-",
+ Fil_MAX_BYTES_FILE_SIZE_STRING);
}
else
{
diff --git a/swad_string.c b/swad_string.c
index 1a555b32..83ba6b45 100644
--- a/swad_string.c
+++ b/swad_string.c
@@ -104,14 +104,14 @@ action="https://localhost/swad/es" method="post">
#define MAX_LINKS 1000
-#define MAX_BYTES_LIMITED_URL 1024 // Max. number of bytes of the URL shown on screen
+#define MAX_BYTES_LIMITED_URL (1024 - 1) // Max. number of bytes of the URL shown on screen
void Str_InsertLinks (char *Txt,unsigned long MaxLength,size_t MaxCharsURLOnScreen)
{
- extern const char *Txt_STR_LANG_ID[1+Txt_NUM_LANGUAGES];
- char ParamsStr[256+256+Ses_LENGTH_SESSION_ID+256];
- char Anchor1Nick[256+256+256+Ses_LENGTH_SESSION_ID+256+256];
- char Anchor2Nick[256+Cry_LENGTH_ENCRYPTED_STR_SHA256_BASE64];
+ extern const char *Txt_STR_LANG_ID[1 + Txt_NUM_LANGUAGES];
+ char ParamsStr[256 + 256 + Ses_LENGTH_SESSION_ID + 256];
+ char Anchor1Nick[256 + 256 + 256 + Ses_LENGTH_SESSION_ID + 256 + 256];
+ char Anchor2Nick[256 + Cry_LENGTH_ENCRYPTED_STR_SHA256_BASE64];
size_t TxtLength;
size_t TxtLengthWithInsertedAnchors;
@@ -232,8 +232,6 @@ void Str_InsertLinks (char *Txt,unsigned long MaxLength,size_t MaxCharsURLOnScre
/* Initialize anchors for this link */
Links[NumLinks].Anchor1Nick = NULL;
Links[NumLinks].Anchor2Nick = NULL;
- Links[NumLinks].Anchor1NickLength = 0;
- Links[NumLinks].Anchor2NickLength = 0;
/* Calculate length of this URL */
Links[NumLinks].NumActualBytes = (size_t) (Links[NumLinks].PtrEnd + 1 - Links[NumLinks].PtrStart);
@@ -244,7 +242,8 @@ void Str_InsertLinks (char *Txt,unsigned long MaxLength,size_t MaxCharsURLOnScre
/* Make a copy of this URL */
NumBytesToCopy = (Links[NumLinks].NumActualBytes < MAX_BYTES_LIMITED_URL) ? Links[NumLinks].NumActualBytes :
MAX_BYTES_LIMITED_URL;
- Str_Copy (LimitedURL,Links[NumLinks].PtrStart,NumBytesToCopy);
+ strncpy (LimitedURL,Links[NumLinks].PtrStart,NumBytesToCopy);
+ LimitedURL[NumBytesToCopy] = '\0';
/* Limit the number of characters on screen of the copy, and calculate its length in bytes */
LengthVisibleLink = Str_LimitLengthHTMLStr (LimitedURL,MaxCharsURLOnScreen);
@@ -314,9 +313,9 @@ void Str_InsertLinks (char *Txt,unsigned long MaxLength,size_t MaxCharsURLOnScre
Gbl.Form.Id,
ParamsStr);
Anchor1NickLength = strlen (Anchor1Nick);
- if ((Links[NumLinks].Anchor1Nick = (char *) malloc (Anchor1NickLength + 1)) == NULL)
+ if ((Links[NumLinks].Anchor1Nick = (char *) malloc (Anchor1NickLength+1)) == NULL)
Lay_ShowErrorAndExit ("Not enough memory to insert link.");
- Str_Copy (Links[NumLinks].Anchor1Nick,Anchor1Nick,Anchor1NickLength);
+ strcpy (Links[NumLinks].Anchor1Nick,Anchor1Nick);
Links[NumLinks].Anchor1NickLength = Anchor1NickLength;
/* Store second part of anchor */
@@ -327,9 +326,9 @@ void Str_InsertLinks (char *Txt,unsigned long MaxLength,size_t MaxCharsURLOnScre
Gbl.Usrs.Me.Logged ? Gbl.Form.UniqueId :
Gbl.Form.Id);
Anchor2NickLength = strlen (Anchor2Nick);
- if ((Links[NumLinks].Anchor2Nick = (char *) malloc (Anchor2NickLength + 1)) == NULL)
+ if ((Links[NumLinks].Anchor2Nick = (char *) malloc (Anchor2NickLength+1)) == NULL)
Lay_ShowErrorAndExit ("Not enough memory to insert link.");
- Str_Copy (Links[NumLinks].Anchor2Nick,Anchor2Nick,Anchor2NickLength);
+ strcpy (Links[NumLinks].Anchor2Nick,Anchor2Nick);
Links[NumLinks].Anchor2NickLength = Anchor2NickLength;
AnchorNickTotalLength = Anchor1NickLength + Anchor2NickLength + Anchor3NickLength;
@@ -407,7 +406,8 @@ void Str_InsertLinks (char *Txt,unsigned long MaxLength,size_t MaxCharsURLOnScre
/* Make a copy of this URL */
NumBytesToCopy = (Links[NumLink].NumActualBytes < MAX_BYTES_LIMITED_URL) ? Links[NumLink].NumActualBytes :
MAX_BYTES_LIMITED_URL;
- Str_Copy (LimitedURL,Links[NumLink].PtrStart,NumBytesToCopy);
+ strncpy (LimitedURL,Links[NumLink].PtrStart,NumBytesToCopy);
+ LimitedURL[NumBytesToCopy] = '\0';
/* Limit the length of the copy */
NumBytesToShow = Str_LimitLengthHTMLStr (LimitedURL,MaxCharsURLOnScreen);
@@ -985,7 +985,7 @@ void Str_ChangeFormat (Str_ChangeFrom_t ChangeFrom,Str_ChangeTo_t ChangeTo,
if (ChangeTo != Str_DONT_CHANGE)
{
/***** Allocate memory for a destination string where to do the changes *****/
- if ((StrDst = (char *) malloc (MaxLengthStr)) == NULL)
+ if ((StrDst = (char *) malloc (MaxLengthStr + 1)) == NULL)
Lay_ShowErrorAndExit ("Not enough memory to change the format of a string.");
/***** Make the change *****/
@@ -1366,7 +1366,7 @@ void Str_ChangeFormat (Str_ChangeFrom_t ChangeFrom,Str_ChangeTo_t ChangeTo,
Lay_ShowErrorAndExit ("Space allocated to string is full.");
/* Copy to appropiate place the special character string */
- Str_Copy (PtrDst,StrSpecialChar,LengthSpecStrDst);
+ strncpy (PtrDst,StrSpecialChar,LengthSpecStrDst);
/* Increment pointer to character after ';' */
PtrSrc += LengthSpecStrSrc;
@@ -1388,9 +1388,11 @@ void Str_ChangeFormat (Str_ChangeFrom_t ChangeFrom,Str_ChangeTo_t ChangeTo,
LengthStrDst++;
}
}
+ StrDst[LengthStrDst] = '\0';
/***** Copy destination string with changes to source string *****/
- Str_Copy (Str,StrDst,LengthStrDst); // Str <-- StrDst
+ strncpy (Str,StrDst,LengthStrDst); // Str <-- StrDst
+ Str[LengthStrDst] = '\0';
/***** Free memory used for the destination string *****/
free ((void *) StrDst);
@@ -2384,12 +2386,10 @@ size_t Str_GetLengthRootFileName (const char *FileName)
/************** Get the name of a file from a complete path ******************/
/*****************************************************************************/
// Split a full path in path (without ending '/' ) and a file name
-// PathWithoutFileName must have space for at least PATH_MAX+1 bytes
-// FileName must have space for at least NAME_MAX+1 bytes
-void Str_SplitFullPathIntoPathAndFileName (const char *FullPath,
- char *PathWithoutFileName,
- char *FileName)
+void Str_SplitFullPathIntoPathAndFileName (const char FullPath[PATH_MAX + 1],
+ char PathWithoutFileName[PATH_MAX + 1],
+ char FileName[NAME_MAX + 1])
{
const char *PtrFileName;
size_t LengthUntilFileName;
@@ -2403,16 +2403,19 @@ void Str_SplitFullPathIntoPathAndFileName (const char *FullPath,
PtrFileName = FullPath;
/***** Get PathWithoutFileName *****/
- LengthUntilFileName = (size_t) (PtrFileName - FullPath); // Last slash included
+ LengthUntilFileName = (size_t) (PtrFileName - FullPath); // Last slash included
if (LengthUntilFileName > 1)
+ {
Str_Copy (PathWithoutFileName,FullPath,
- LengthUntilFileName > PATH_MAX ? PATH_MAX :
- LengthUntilFileName - 1); // Do not copy ending slash
+ PATH_MAX);
+ PathWithoutFileName[LengthUntilFileName - 1] = '\0'; // Do not copy ending slash
+ }
else
PathWithoutFileName[0] = '\0';
/***** Get FileName *****/
- Str_Copy (FileName,PtrFileName,NAME_MAX);
+ Str_Copy (FileName,PtrFileName,
+ NAME_MAX);
}
/*****************************************************************************/
@@ -2751,10 +2754,9 @@ bool Str_ConvertFilFolLnkNameToValid (char *FileName)
FileName);
}
else // FileName is empty
- Str_Copy (Gbl.Message,
- Gbl.FileBrowser.UploadingWithDropzone ? Txt_UPLOAD_FILE_Invalid_name_NO_HTML :
- Txt_UPLOAD_FILE_Invalid_name,
- Lay_MAX_BYTES_ALERT);
+ sprintf (Gbl.Message,"%s",
+ Gbl.FileBrowser.UploadingWithDropzone ? Txt_UPLOAD_FILE_Invalid_name_NO_HTML :
+ Txt_UPLOAD_FILE_Invalid_name);
return FileNameIsOK;
}
@@ -2827,40 +2829,53 @@ void Str_CreateRandomAlphanumStr (char *Str,size_t Length)
Str[Length] = '\0';
}
-/*****************************************************************************/
-/********************** Get mailbox from email address ***********************/
-/*****************************************************************************/
-
-void Str_GetMailBox (const char *Email,char *MailBox,size_t MaxLength)
- {
- const char *Ptr;
-
- MailBox[0] = '\0'; // Return empty mailbox on error
-
- if ((Ptr = strchr (Email,(int) '@'))) // Find first '@' in address
- if (Ptr != Email) // '@' is not the first character in Email
- {
- Ptr++; // Skip '@'
- if (strchr (Ptr,(int) '@') == NULL) // No more '@' found
- Str_Copy (MailBox,Ptr,MaxLength);
- }
- }
-
/*****************************************************************************/
/****************************** Safe string copy *****************************/
/*****************************************************************************/
-void Str_Copy (char *Dst,const char *Src,size_t MaxLength)
+void Str_Copy (char *Dst,const char *Src,size_t DstSize)
{
- strncpy (Dst,Src,MaxLength);
- Dst[MaxLength] = '\0';
+ size_t LengthSrc = strlen (Src);
+
+ if (DstSize < LengthSrc)
+ {
+ sprintf (Gbl.Message,"Trying to copy %lu chars into a %lu-chars buffer.",
+ LengthSrc,DstSize);
+ Lay_ShowErrorAndExit (Gbl.Message);
+ }
+
+ // strncpy (Dst,Src,MaxLength);
+ // Dst[MaxLength] = '\0';
+ strcpy (Dst,Src);
}
/*****************************************************************************/
/************************** Safe string concatenation ************************/
/*****************************************************************************/
-void Str_Concat (char *Dst,const char *Src,size_t MaxLength)
+void Str_Concat (char *Dst,const char *Src,size_t DstSize)
{
- strncat (Dst,Src,MaxLength - strlen (Dst));
+ size_t LengthDst;
+ size_t LengthSrc;
+ size_t FreeSpace;
+
+ LengthDst = strlen (Dst);
+ if (LengthDst > DstSize)
+ {
+ sprintf (Gbl.Message,"%lu-chars buffer has %lu chars!",
+ DstSize,LengthSrc);
+ Lay_ShowErrorAndExit (Gbl.Message);
+ }
+
+ FreeSpace = DstSize - LengthDst;
+ LengthSrc = strlen (Src);
+ if (FreeSpace < LengthSrc)
+ {
+ sprintf (Gbl.Message,"Trying to concatenate %lu chars to a %lu-chars buffer with free space for only %lu chars!",
+ LengthSrc,DstSize,FreeSpace);
+ Lay_ShowErrorAndExit (Gbl.Message);
+ }
+
+ // strncat (Dst,Src,FreeSpace);
+ strcat (Dst,Src);
}
diff --git a/swad_string.h b/swad_string.h
index a518549f..c632143d 100644
--- a/swad_string.h
+++ b/swad_string.h
@@ -27,6 +27,7 @@
/********************************* Headers **********************************/
/*****************************************************************************/
+#include ' + FirstName +#define Usr_MAX_BYTES_USR_EMAIL (128 - 1) + #define Usr_BIRTHDAY_STR_DB_LENGTH (4+1+2+1+2) // "'%04u-%02u-%02u'" #define Usr_MAX_LENGTH_PHONE 16 diff --git a/swad_web_service.c b/swad_web_service.c index 060d3916..b9fa26ca 100644 --- a/swad_web_service.c +++ b/swad_web_service.c @@ -214,7 +214,7 @@ static int Svc_GetCurrentDegCodFromCurrentCrsCod (void); static bool Svc_GetSomeUsrDataFromUsrCod (struct UsrData *UsrDat,long CrsCod); static int Svc_CheckParamsNewAccount (char *NewNicknameWithArroba, // Input - char *NewNicknameWithoutArroba, // Output + char NewNicknameWithoutArroba[Nck_MAX_BYTES_NICKNAME_FROM_FORM + 1], // Output char *NewEmail, // Input-output char *NewPlainPassword, // Input char *NewEncryptedPassword); // Output @@ -553,12 +553,16 @@ static bool Svc_GetSomeUsrDataFromUsrCod (struct UsrData *UsrDat,long CrsCod) row = mysql_fetch_row (mysql_res); /* Get user's name */ - Str_Copy (UsrDat->Surname1 ,row[0],Usr_MAX_BYTES_NAME); - Str_Copy (UsrDat->Surname2 ,row[1],Usr_MAX_BYTES_NAME); - Str_Copy (UsrDat->FirstName,row[2],Usr_MAX_BYTES_NAME); + Str_Copy (UsrDat->Surname1,row[0], + Usr_MAX_BYTES_NAME); + Str_Copy (UsrDat->Surname2,row[1], + Usr_MAX_BYTES_NAME); + Str_Copy (UsrDat->FirstName,row[2], + Usr_MAX_BYTES_NAME); /* Get user's photo */ - Str_Copy (UsrDat->Photo,row[3],Cry_LENGTH_ENCRYPTED_STR_SHA256_BASE64); + Str_Copy (UsrDat->Photo,row[3], + Cry_LENGTH_ENCRYPTED_STR_SHA256_BASE64); /* Get user's brithday */ Dat_GetDateFromYYYYMMDD (&(UsrDat->Birthday),row[4]); @@ -637,8 +641,8 @@ int swad__createAccount (struct soap *soap, char *userNickname,char *userEmail,char *userPassword,char *appKey, // input struct swad__createAccountOutput *createAccountOut) // output { - char NewNicknameWithoutArroba[Nck_MAX_BYTES_NICKNAME_WITH_ARROBA+1]; - char NewEncryptedPassword[Cry_LENGTH_ENCRYPTED_STR_SHA512_BASE64+1]; + char NewNicknameWithoutArroba[Nck_MAX_BYTES_NICKNAME_FROM_FORM + 1]; + char NewEncryptedPassword[Cry_LENGTH_ENCRYPTED_STR_SHA512_BASE64 + 1]; int Result; int ReturnCode; @@ -690,7 +694,8 @@ int swad__createAccount (struct soap *soap, if (Mai_UpdateEmailInDB (&Gbl.Usrs.Me.UsrDat,userEmail)) { /* Email updated sucessfully */ - Str_Copy (Gbl.Usrs.Me.UsrDat.Email,userEmail,Usr_MAX_BYTES_USR_EMAIL); + Str_Copy (Gbl.Usrs.Me.UsrDat.Email,userEmail, + Usr_MAX_BYTES_USR_EMAIL); Gbl.Usrs.Me.UsrDat.EmailConfirmed = false; } @@ -708,7 +713,7 @@ int swad__createAccount (struct soap *soap, // Return false on error //char *userNickname,char *userEmail,char *userID,char *userPassword static int Svc_CheckParamsNewAccount (char *NewNicknameWithArroba, // Input - char *NewNicknameWithoutArroba, // Output + char NewNicknameWithoutArroba[Nck_MAX_BYTES_NICKNAME_FROM_FORM + 1], // Output char *NewEmail, // Input-output char *NewPlainPassword, // Input char *NewEncryptedPassword) // Output @@ -718,7 +723,7 @@ static int Svc_CheckParamsNewAccount (char *NewNicknameWithArroba, // Input /***** Step 1/3: Check new nickname *****/ /* Make a copy without possible starting arrobas */ Str_Copy (NewNicknameWithoutArroba,NewNicknameWithArroba, - Nck_MAX_BYTES_NICKNAME_WITH_ARROBA); + Nck_MAX_BYTES_NICKNAME_FROM_FORM); if (Nck_CheckIfNickWithArrobaIsValid (NewNicknameWithArroba)) // If new nickname is valid { /***** Remove arrobas at the beginning *****/ @@ -777,7 +782,7 @@ int swad__loginByUserPasswordKey (struct soap *soap, /***** Allocate space for strings *****/ loginByUserPasswordKeyOut->wsKey = (char *) soap_malloc (Gbl.soap,Svc_LENGTH_WS_KEY + 1); - loginByUserPasswordKeyOut->userNickname = (char *) soap_malloc (Gbl.soap,Nck_MAX_LENGTH_NICKNAME_WITHOUT_ARROBA+1); + loginByUserPasswordKeyOut->userNickname = (char *) soap_malloc (Gbl.soap,Nck_MAX_LENGTH_NICKNAME_WITHOUT_ARROBA + 1); loginByUserPasswordKeyOut->userID = (char *) soap_malloc (Gbl.soap,ID_MAX_LENGTH_USR_ID + 1); loginByUserPasswordKeyOut->userFirstname = (char *) soap_malloc (Gbl.soap,Usr_MAX_BYTES_NAME + 1); loginByUserPasswordKeyOut->userSurname1 = (char *) soap_malloc (Gbl.soap,Usr_MAX_BYTES_NAME + 1); @@ -802,7 +807,8 @@ int swad__loginByUserPasswordKey (struct soap *soap, return ReturnCode; /***** Check if user's email, @nickname or ID are valid *****/ - Str_Copy (UsrIDNickOrEmail,userID,Usr_MAX_BYTES_USR_LOGIN); + Str_Copy (UsrIDNickOrEmail,userID, + Usr_MAX_BYTES_USR_LOGIN); if (Nck_CheckIfNickWithArrobaIsValid (UsrIDNickOrEmail)) // 1: It's a nickname { Str_RemoveLeadingArrobas (UsrIDNickOrEmail); @@ -877,20 +883,26 @@ int swad__loginByUserPasswordKey (struct soap *soap, if (Gbl.Usrs.Me.UsrDat.IDs.Num) Str_Copy (loginByUserPasswordKeyOut->userID, - Gbl.Usrs.Me.UsrDat.IDs.List[0].ID,ID_MAX_LENGTH_USR_ID); // TODO: What user's ID? + Gbl.Usrs.Me.UsrDat.IDs.List[0].ID, // TODO: What user's ID? + ID_MAX_LENGTH_USR_ID); Str_Copy (loginByUserPasswordKeyOut->userSurname1, - Gbl.Usrs.Me.UsrDat.Surname1,Usr_MAX_BYTES_NAME); + Gbl.Usrs.Me.UsrDat.Surname1, + Usr_MAX_BYTES_NAME); Str_Copy (loginByUserPasswordKeyOut->userSurname2, - Gbl.Usrs.Me.UsrDat.Surname2,Usr_MAX_BYTES_NAME); + Gbl.Usrs.Me.UsrDat.Surname2, + Usr_MAX_BYTES_NAME); Str_Copy (loginByUserPasswordKeyOut->userFirstname, - Gbl.Usrs.Me.UsrDat.FirstName,Usr_MAX_BYTES_NAME); + Gbl.Usrs.Me.UsrDat.FirstName, + Usr_MAX_BYTES_NAME); Pho_BuildLinkToPhoto (&Gbl.Usrs.Me.UsrDat,PhotoURL); - Str_Copy (loginByUserPasswordKeyOut->userPhoto,PhotoURL,Cns_MAX_LENGTH_WWW); + Str_Copy (loginByUserPasswordKeyOut->userPhoto,PhotoURL, + Cns_MAX_LENGTH_WWW); Str_Copy (loginByUserPasswordKeyOut->userBirthday, - Gbl.Usrs.Me.UsrDat.Birthday.YYYYMMDD,Dat_LENGTH_YYYYMMDD); + Gbl.Usrs.Me.UsrDat.Birthday.YYYYMMDD, + Dat_LENGTH_YYYYMMDD); loginByUserPasswordKeyOut->userRole = Svc_RolRole_to_SvcRole[Gbl.Usrs.Me.UsrDat.RoleInCurrentCrsDB]; @@ -1020,7 +1032,7 @@ int swad__loginBySessionKey (struct soap *soap, loginBySessionKeyOut->userCode = (int) Gbl.Usrs.Me.UsrDat.UsrCod; Str_Copy (loginBySessionKeyOut->userNickname,Gbl.Usrs.Me.UsrDat.Nickname, - Nck_MAX_LENGTH_NICKNAME_WITHOUT_ARROBA); + Nck_MAX_LENGTH_NICKNAME_WITHOUT_ARROBA); if (Gbl.Usrs.Me.UsrDat.IDs.Num) Str_Copy (loginBySessionKeyOut->userID, @@ -1028,17 +1040,22 @@ int swad__loginBySessionKey (struct soap *soap, ID_MAX_LENGTH_USR_ID); Str_Copy (loginBySessionKeyOut->userSurname1, - Gbl.Usrs.Me.UsrDat.Surname1,Usr_MAX_BYTES_NAME); + Gbl.Usrs.Me.UsrDat.Surname1, + Usr_MAX_BYTES_NAME); Str_Copy (loginBySessionKeyOut->userSurname2, - Gbl.Usrs.Me.UsrDat.Surname2,Usr_MAX_BYTES_NAME); + Gbl.Usrs.Me.UsrDat.Surname2, + Usr_MAX_BYTES_NAME); Str_Copy (loginBySessionKeyOut->userFirstname, - Gbl.Usrs.Me.UsrDat.FirstName,Usr_MAX_BYTES_NAME); + Gbl.Usrs.Me.UsrDat.FirstName, + Usr_MAX_BYTES_NAME); Pho_BuildLinkToPhoto (&Gbl.Usrs.Me.UsrDat,PhotoURL); - Str_Copy (loginBySessionKeyOut->userPhoto,PhotoURL,Cns_MAX_LENGTH_WWW); + Str_Copy (loginBySessionKeyOut->userPhoto,PhotoURL, + Cns_MAX_LENGTH_WWW); Str_Copy (loginBySessionKeyOut->userBirthday, - Gbl.Usrs.Me.UsrDat.Birthday.YYYYMMDD,Dat_LENGTH_YYYYMMDD); + Gbl.Usrs.Me.UsrDat.Birthday.YYYYMMDD, + Dat_LENGTH_YYYYMMDD); loginBySessionKeyOut->userRole = Svc_RolRole_to_SvcRole[Gbl.Usrs.Me.UsrDat.RoleInCurrentCrsDB]; @@ -1080,7 +1097,8 @@ int swad__getNewPassword (struct soap *soap, return ReturnCode; /***** Check if user's email, @nickname or ID are valid *****/ - Str_Copy (UsrIDNickOrEmail,userID,Usr_MAX_BYTES_USR_LOGIN); + Str_Copy (UsrIDNickOrEmail,userID, + Usr_MAX_BYTES_USR_LOGIN); if (Nck_CheckIfNickWithArrobaIsValid (UsrIDNickOrEmail)) // 1: It's a nickname { Str_RemoveLeadingArrobas (UsrIDNickOrEmail); @@ -1208,13 +1226,13 @@ int swad__getCourses (struct soap *soap, /* Get course short name (row[1]) */ getCoursesOut->coursesArray.__ptr[NumRow].courseShortName = (char *) soap_malloc (Gbl.soap,Crs_MAX_LENGTH_COURSE_SHRT_NAME + 1); - Str_Copy (getCoursesOut->coursesArray.__ptr[NumRow].courseShortName, - row[1],Crs_MAX_LENGTH_COURSE_SHRT_NAME); + Str_Copy (getCoursesOut->coursesArray.__ptr[NumRow].courseShortName,row[1], + Crs_MAX_LENGTH_COURSE_SHRT_NAME); /* Get course full name (row[2]) */ getCoursesOut->coursesArray.__ptr[NumRow].courseFullName = (char *) soap_malloc (Gbl.soap,Crs_MAX_LENGTH_COURSE_FULL_NAME + 1); - Str_Copy (getCoursesOut->coursesArray.__ptr[NumRow].courseFullName, - row[2],Crs_MAX_LENGTH_COURSE_FULL_NAME); + Str_Copy (getCoursesOut->coursesArray.__ptr[NumRow].courseFullName,row[2], + Crs_MAX_LENGTH_COURSE_FULL_NAME); /* Get role (row[3]) */ if (sscanf (row[3],"%u",&Role) != 1) // Role in this course @@ -1311,7 +1329,8 @@ int swad__getCourseInfo (struct soap *soap, Inf_GetAndCheckInfoSrcFromDB (Gbl.CurrentCrs.Crs.CrsCod,Gbl.CurrentCrs.Info.Type,&InfoSrc,&MustBeRead); Length = strlen (NamesInWSForInfoSrc[InfoSrc]); getCourseInfo->infoSrc = (char *) soap_malloc (Gbl.soap,Length + 1); - Str_Copy (getCourseInfo->infoSrc,NamesInWSForInfoSrc[InfoSrc],Length); + Str_Copy (getCourseInfo->infoSrc,NamesInWSForInfoSrc[InfoSrc], + Length); /***** Set paths *****/ Hie_InitHierarchy (); @@ -1495,7 +1514,8 @@ int swad__findUsers (struct soap *soap, Role = Svc_SvcRole_to_RolRole[userRole]; /***** Query users beloging to course or group from database *****/ - Str_Copy (Gbl.Search.Str,filter,Sch_MAX_LENGTH_STRING_TO_FIND); + Str_Copy (Gbl.Search.Str,filter, + Sch_MAX_LENGTH_STRING_TO_FIND); if (Gbl.Search.Str[0]) // Search some users { @@ -1670,8 +1690,8 @@ int swad__getGroupTypes (struct soap *soap, /* Get group type name (row[1]) */ getGroupTypesOut->groupTypesArray.__ptr[NumRow].groupTypeName = (char *) soap_malloc (Gbl.soap,Grp_MAX_LENGTH_GROUP_TYPE_NAME + 1); - Str_Copy (getGroupTypesOut->groupTypesArray.__ptr[NumRow].groupTypeName, - row[1],Grp_MAX_LENGTH_GROUP_TYPE_NAME); + Str_Copy (getGroupTypesOut->groupTypesArray.__ptr[NumRow].groupTypeName,row[1], + Grp_MAX_LENGTH_GROUP_TYPE_NAME); /* Get whether enrollment is mandatory ('Y') or voluntary ('N') (row[2]) */ getGroupTypesOut->groupTypesArray.__ptr[NumRow].mandatory = (row[2][0] == 'Y') ? 1 : @@ -1781,8 +1801,8 @@ int swad__getGroups (struct soap *soap, /* Get group type name (row[1]) */ getGroupsOut->groupsArray.__ptr[NumRow].groupTypeName = (char *) soap_malloc (Gbl.soap,Grp_MAX_LENGTH_GROUP_TYPE_NAME + 1); - Str_Copy (getGroupsOut->groupsArray.__ptr[NumRow].groupTypeName, - row[1],Grp_MAX_LENGTH_GROUP_TYPE_NAME); + Str_Copy (getGroupsOut->groupsArray.__ptr[NumRow].groupTypeName,row[1], + Grp_MAX_LENGTH_GROUP_TYPE_NAME); /* Get group code (row[2]) */ GrpCod = Str_ConvertStrCodToLongCod (row[2]); @@ -1790,8 +1810,8 @@ int swad__getGroups (struct soap *soap, /* Get group name (row[3]) */ getGroupsOut->groupsArray.__ptr[NumRow].groupName = (char *) soap_malloc (Gbl.soap,Grp_MAX_LENGTH_GROUP_NAME + 1); - Str_Copy (getGroupsOut->groupsArray.__ptr[NumRow].groupName, - row[3],Grp_MAX_LENGTH_GROUP_NAME); + Str_Copy (getGroupsOut->groupsArray.__ptr[NumRow].groupName,row[3], + Grp_MAX_LENGTH_GROUP_NAME); /* Get max number of students of group (row[4]) and number of current students */ MaxStudents = Grp_ConvertToNumMaxStdsGrp (row[4]); @@ -1942,8 +1962,8 @@ int swad__sendMyGroups (struct soap *soap, /* Get group type name (row[1]) */ SendMyGroupsOut->groupsArray.__ptr[NumRow].groupTypeName = (char *) soap_malloc (Gbl.soap,Grp_MAX_LENGTH_GROUP_TYPE_NAME + 1); - Str_Copy (SendMyGroupsOut->groupsArray.__ptr[NumRow].groupTypeName, - row[1],Grp_MAX_LENGTH_GROUP_TYPE_NAME); + Str_Copy (SendMyGroupsOut->groupsArray.__ptr[NumRow].groupTypeName,row[1], + Grp_MAX_LENGTH_GROUP_TYPE_NAME); /* Get group code (row[2]) */ GrpCod = Str_ConvertStrCodToLongCod (row[2]); @@ -1951,8 +1971,8 @@ int swad__sendMyGroups (struct soap *soap, /* Get group name (row[3]) */ SendMyGroupsOut->groupsArray.__ptr[NumRow].groupName = (char *) soap_malloc (Gbl.soap,Grp_MAX_LENGTH_GROUP_NAME + 1); - Str_Copy (SendMyGroupsOut->groupsArray.__ptr[NumRow].groupName, - row[3],Grp_MAX_LENGTH_GROUP_NAME); + Str_Copy (SendMyGroupsOut->groupsArray.__ptr[NumRow].groupName,row[3], + Grp_MAX_LENGTH_GROUP_NAME); /* Get max number of students of group (row[4]) and number of current students */ MaxStudents = Grp_ConvertToNumMaxStdsGrp (row[4]); @@ -1998,7 +2018,8 @@ static void Svc_CopyUsrData (struct swad__user *Usr,struct UsrData *UsrDat,bool /* Copy user's nickname */ Length = strlen (UsrDat->Nickname); Usr->userNickname = (char *) soap_malloc (Gbl.soap,Length + 1); - Str_Copy (Usr->userNickname,UsrDat->Nickname,Length); + Str_Copy (Usr->userNickname,UsrDat->Nickname, + Length); /* Copy user's first ID */ if (UsrIDIsVisible && UsrDat->IDs.List) @@ -2007,28 +2028,33 @@ static void Svc_CopyUsrData (struct swad__user *Usr,struct UsrData *UsrDat,bool FirstID = "********"; Length = strlen (FirstID); Usr->userID = (char *) soap_malloc (Gbl.soap,Length + 1); - Str_Copy (Usr->userID,FirstID,Length); + Str_Copy (Usr->userID,FirstID, + Length); /* Copy user's surname1 */ Length = strlen (UsrDat->Surname1); Usr->userSurname1 = (char *) soap_malloc (Gbl.soap,Length + 1); - Str_Copy (Usr->userSurname1,UsrDat->Surname1,Length); + Str_Copy (Usr->userSurname1,UsrDat->Surname1, + Length); /* Copy user's surname2 */ Length = strlen (UsrDat->Surname2); Usr->userSurname2 = (char *) soap_malloc (Gbl.soap,Length + 1); - Str_Copy (Usr->userSurname2,UsrDat->Surname2,Length); + Str_Copy (Usr->userSurname2,UsrDat->Surname2, + Length); /* Copy user's first name */ Length = strlen (UsrDat->FirstName); Usr->userFirstname = (char *) soap_malloc (Gbl.soap,Length + 1); - Str_Copy (Usr->userFirstname,UsrDat->FirstName,Length); + Str_Copy (Usr->userFirstname,UsrDat->FirstName, + Length); /* User's photo URL */ Pho_BuildLinkToPhoto (UsrDat,PhotoURL); Length = strlen (PhotoURL); Usr->userPhoto = (char *) soap_malloc (Gbl.soap,Length + 1); - Str_Copy (Usr->userPhoto,PhotoURL,Length); + Str_Copy (Usr->userPhoto,PhotoURL, + Length); } /*****************************************************************************/ @@ -2123,23 +2149,27 @@ int swad__getAttendanceEvents (struct soap *soap, Length = strlen (Gbl.Usrs.Other.UsrDat.Surname1); getAttendanceEventsOut->eventsArray.__ptr[NumAttEvent].userSurname1 = (char *) soap_malloc (Gbl.soap,Length + 1); Str_Copy (getAttendanceEventsOut->eventsArray.__ptr[NumAttEvent].userSurname1, - Gbl.Usrs.Other.UsrDat.Surname1,Length); + Gbl.Usrs.Other.UsrDat.Surname1, + Length); Length = strlen (Gbl.Usrs.Other.UsrDat.Surname2); getAttendanceEventsOut->eventsArray.__ptr[NumAttEvent].userSurname2 = (char *) soap_malloc (Gbl.soap,Length + 1); Str_Copy (getAttendanceEventsOut->eventsArray.__ptr[NumAttEvent].userSurname2, - Gbl.Usrs.Other.UsrDat.Surname2,Length); + Gbl.Usrs.Other.UsrDat.Surname2, + Length); Length = strlen (Gbl.Usrs.Other.UsrDat.FirstName); getAttendanceEventsOut->eventsArray.__ptr[NumAttEvent].userFirstname = (char *) soap_malloc (Gbl.soap,Length + 1); Str_Copy (getAttendanceEventsOut->eventsArray.__ptr[NumAttEvent].userFirstname, - Gbl.Usrs.Other.UsrDat.FirstName,Length); + Gbl.Usrs.Other.UsrDat.FirstName, + Length); Pho_BuildLinkToPhoto (&Gbl.Usrs.Other.UsrDat,PhotoURL); Length = strlen (PhotoURL); getAttendanceEventsOut->eventsArray.__ptr[NumAttEvent].userPhoto = (char *) soap_malloc (Gbl.soap,Length + 1); Str_Copy (getAttendanceEventsOut->eventsArray.__ptr[NumAttEvent].userPhoto, - PhotoURL,Length); + PhotoURL, + Length); } else { @@ -2168,14 +2198,14 @@ int swad__getAttendanceEvents (struct soap *soap, /* Get title of the event (row[6]) */ Length = strlen (row[6]); getAttendanceEventsOut->eventsArray.__ptr[NumAttEvent].title = (char *) soap_malloc (Gbl.soap,Length + 1); - Str_Copy (getAttendanceEventsOut->eventsArray.__ptr[NumAttEvent].title, - row[6],Length); + Str_Copy (getAttendanceEventsOut->eventsArray.__ptr[NumAttEvent].title,row[6], + Length); /* Get Txt (row[7]) */ Length = strlen (row[7]); getAttendanceEventsOut->eventsArray.__ptr[NumAttEvent].text = (char *) soap_malloc (Gbl.soap,Length + 1); - Str_Copy (getAttendanceEventsOut->eventsArray.__ptr[NumAttEvent].text, - row[7],Length); + Str_Copy (getAttendanceEventsOut->eventsArray.__ptr[NumAttEvent].text,row[7], + Length); /* Get list of groups for this attendance event */ Svc_GetListGrpsInAttendanceEventFromDB (AttCod,&(getAttendanceEventsOut->eventsArray.__ptr[NumAttEvent].groups)); @@ -2323,7 +2353,8 @@ int swad__sendAttendanceEvent (struct soap *soap, return soap_receiver_fault (Gbl.soap, "Request forbidden", "Title of attendance event is empty"); - Str_Copy (Att.Title,title,Att_MAX_LENGTH_ATTENDANCE_EVENT_TITLE); + Str_Copy (Att.Title,title, + Att_MAX_LENGTH_ATTENDANCE_EVENT_TITLE); /* Create a list of groups selected */ Svc_GetLstGrpsSel (groups); @@ -2566,14 +2597,16 @@ int swad__getAttendanceUsers (struct soap *soap, Length = strlen (Gbl.Usrs.Other.UsrDat.Nickname); getAttendanceUsersOut->usersArray.__ptr[NumRow].userNickname = (char *) soap_malloc (Gbl.soap,Length + 1); Str_Copy (getAttendanceUsersOut->usersArray.__ptr[NumRow].userNickname, - Gbl.Usrs.Other.UsrDat.Nickname,Length); + Gbl.Usrs.Other.UsrDat.Nickname, + Length); if (Gbl.Usrs.Other.UsrDat.IDs.Num) { Length = strlen (Gbl.Usrs.Other.UsrDat.IDs.List[0].ID); // TODO: What user's ID? getAttendanceUsersOut->usersArray.__ptr[NumRow].userID = (char *) soap_malloc (Gbl.soap,Length + 1); Str_Copy (getAttendanceUsersOut->usersArray.__ptr[NumRow].userID, - Gbl.Usrs.Other.UsrDat.IDs.List[0].ID,Length); + Gbl.Usrs.Other.UsrDat.IDs.List[0].ID, + Length); } else { @@ -2584,23 +2617,27 @@ int swad__getAttendanceUsers (struct soap *soap, Length = strlen (Gbl.Usrs.Other.UsrDat.Surname1); getAttendanceUsersOut->usersArray.__ptr[NumRow].userSurname1 = (char *) soap_malloc (Gbl.soap,Length + 1); Str_Copy (getAttendanceUsersOut->usersArray.__ptr[NumRow].userSurname1, - Gbl.Usrs.Other.UsrDat.Surname1,Length); + Gbl.Usrs.Other.UsrDat.Surname1, + Length); Length = strlen (Gbl.Usrs.Other.UsrDat.Surname2); getAttendanceUsersOut->usersArray.__ptr[NumRow].userSurname2 = (char *) soap_malloc (Gbl.soap,Length + 1); Str_Copy (getAttendanceUsersOut->usersArray.__ptr[NumRow].userSurname2, - Gbl.Usrs.Other.UsrDat.Surname2,Length); + Gbl.Usrs.Other.UsrDat.Surname2, + Length); Length = strlen (Gbl.Usrs.Other.UsrDat.FirstName); getAttendanceUsersOut->usersArray.__ptr[NumRow].userFirstname = (char *) soap_malloc (Gbl.soap,Length + 1); Str_Copy (getAttendanceUsersOut->usersArray.__ptr[NumRow].userFirstname, - Gbl.Usrs.Other.UsrDat.FirstName,Length); + Gbl.Usrs.Other.UsrDat.FirstName, + Length); Pho_BuildLinkToPhoto (&Gbl.Usrs.Other.UsrDat,PhotoURL); Length = strlen (PhotoURL); getAttendanceUsersOut->usersArray.__ptr[NumRow].userPhoto = (char *) soap_malloc (Gbl.soap,Length + 1); Str_Copy (getAttendanceUsersOut->usersArray.__ptr[NumRow].userPhoto, - PhotoURL,Length); + PhotoURL, + Length); } else { @@ -2835,7 +2872,8 @@ int swad__getNotifications (struct soap *soap, NotifyEvent = Ntf_GetNotifyEventFromDB ((const char *) row[1]); getNotificationsOut->notificationsArray.__ptr[NumNotif].eventType = (char *) soap_malloc (Gbl.soap,Ntf_MAX_LENGTH_NOTIFY_EVENT + 1); Str_Copy (getNotificationsOut->notificationsArray.__ptr[NumNotif].eventType, - Ntf_WSNotifyEvents[NotifyEvent],Ntf_MAX_LENGTH_NOTIFY_EVENT); + Ntf_WSNotifyEvents[NotifyEvent], + Ntf_MAX_LENGTH_NOTIFY_EVENT); /* Get time of the event (row[2]) */ EventTime = 0L; @@ -2859,20 +2897,24 @@ int swad__getNotifications (struct soap *soap, getNotificationsOut->notificationsArray.__ptr[NumNotif].userSurname1 = (char *) soap_malloc (Gbl.soap,Usr_MAX_BYTES_NAME + 1); Str_Copy (getNotificationsOut->notificationsArray.__ptr[NumNotif].userSurname1, - Gbl.Usrs.Other.UsrDat.Surname1 ,Usr_MAX_BYTES_NAME); + Gbl.Usrs.Other.UsrDat.Surname1, + Usr_MAX_BYTES_NAME); getNotificationsOut->notificationsArray.__ptr[NumNotif].userSurname2 = (char *) soap_malloc (Gbl.soap,Usr_MAX_BYTES_NAME + 1); Str_Copy (getNotificationsOut->notificationsArray.__ptr[NumNotif].userSurname2, - Gbl.Usrs.Other.UsrDat.Surname2 ,Usr_MAX_BYTES_NAME); + Gbl.Usrs.Other.UsrDat.Surname2, + Usr_MAX_BYTES_NAME); getNotificationsOut->notificationsArray.__ptr[NumNotif].userFirstname = (char *) soap_malloc (Gbl.soap,Usr_MAX_BYTES_NAME + 1); Str_Copy (getNotificationsOut->notificationsArray.__ptr[NumNotif].userFirstname, - Gbl.Usrs.Other.UsrDat.FirstName,Usr_MAX_BYTES_NAME); + Gbl.Usrs.Other.UsrDat.FirstName, + Usr_MAX_BYTES_NAME); Pho_BuildLinkToPhoto (&Gbl.Usrs.Other.UsrDat,PhotoURL); getNotificationsOut->notificationsArray.__ptr[NumNotif].userPhoto = (char *) soap_malloc (Gbl.soap,Cns_MAX_LENGTH_WWW + 1); Str_Copy (getNotificationsOut->notificationsArray.__ptr[NumNotif].userPhoto, - PhotoURL,Cns_MAX_LENGTH_WWW); + PhotoURL, + Cns_MAX_LENGTH_WWW); } else { @@ -2927,8 +2969,8 @@ int swad__getNotifications (struct soap *soap, sprintf (getNotificationsOut->notificationsArray.__ptr[NumNotif].location,"%s: %s", Txt_Institution,Ins.ShrtName); else - Str_Copy (getNotificationsOut->notificationsArray.__ptr[NumNotif].location, - "-",Ntf_MAX_LENGTH_NOTIFY_LOCATION); + Str_Copy (getNotificationsOut->notificationsArray.__ptr[NumNotif].location,"-", + Ntf_MAX_LENGTH_NOTIFY_LOCATION); /* Get status (row[9]) */ if (sscanf (row[9],"%u",&Status) != 1) @@ -2944,7 +2986,8 @@ int swad__getNotifications (struct soap *soap, Length = strlen (SummaryStr); getNotificationsOut->notificationsArray.__ptr[NumNotif].summary = (char *) soap_malloc (Gbl.soap,Length + 1); Str_Copy (getNotificationsOut->notificationsArray.__ptr[NumNotif].summary, - SummaryStr,Length); + SummaryStr, + Length); if (ContentStr == NULL) { @@ -2956,7 +2999,8 @@ int swad__getNotifications (struct soap *soap, Length = strlen (ContentStr); getNotificationsOut->notificationsArray.__ptr[NumNotif].content = (char *) soap_malloc (Gbl.soap,Length + 1); Str_Copy (getNotificationsOut->notificationsArray.__ptr[NumNotif].content, - ContentStr,Length); + ContentStr, + Length); /* Free memory used by content string */ free ((void *) ContentStr); @@ -3097,7 +3141,7 @@ int swad__sendMessage (struct soap *soap, { int ReturnCode; long ReplyUsrCod = -1L; - char Nickname[Nck_MAX_BYTES_NICKNAME_WITH_ARROBA+1]; + char Nickname[Nck_MAX_BYTES_NICKNAME_FROM_FORM+1]; char Query[Svc_MAX_LENGTH_QUERY_RECIPIENTS + 1]; MYSQL_RES *mysql_res; MYSQL_ROW row; @@ -3195,7 +3239,7 @@ int swad__sendMessage (struct soap *soap, while (*Ptr) { /* Find next string in text until comma (leading and trailing spaces are removed) */ - Str_GetNextStringUntilComma (&Ptr,Nickname,Nck_MAX_BYTES_NICKNAME_WITH_ARROBA); + Str_GetNextStringUntilComma (&Ptr,Nickname,Nck_MAX_BYTES_NICKNAME_FROM_FORM); /* Check if string is a valid nickname */ if (Nck_CheckIfNickWithArrobaIsValid (Nickname)) // String is a nickname? @@ -3749,7 +3793,8 @@ static int Svc_GetTstQuestions (long CrsCod,long BeginTime,struct swad__getTests AnswerType = Tst_ConvertFromStrAnsTypDBToAnsTyp (row[1]); getTestsOut->questionsArray.__ptr[NumRow].answerType = (char *) soap_malloc (Gbl.soap,Tst_MAX_LENGTH_ANSWER_TYPE + 1); Str_Copy (getTestsOut->questionsArray.__ptr[NumRow].answerType, - Tst_StrAnswerTypesXML[AnswerType],Tst_MAX_LENGTH_ANSWER_TYPE); + Tst_StrAnswerTypesXML[AnswerType], + Tst_MAX_LENGTH_ANSWER_TYPE); /* Get shuffle (row[2]) */ getTestsOut->questionsArray.__ptr[NumRow].shuffle = (row[2][0] == 'Y') ? 1 : @@ -3842,13 +3887,13 @@ static int Svc_GetTstAnswers (long CrsCod,long BeginTime,struct swad__getTestsOu /* Get answer (row[3]) */ getTestsOut->answersArray.__ptr[NumRow].answerText = (char *) soap_malloc (Gbl.soap,Cns_MAX_BYTES_TEXT + 1); - Str_Copy (getTestsOut->answersArray.__ptr[NumRow].answerText, - row[3],Cns_MAX_BYTES_TEXT); + Str_Copy (getTestsOut->answersArray.__ptr[NumRow].answerText,row[3], + Cns_MAX_BYTES_TEXT); /* Get feedback (row[4]) */ getTestsOut->answersArray.__ptr[NumRow].answerFeedback = (char *) soap_malloc (Gbl.soap,Cns_MAX_BYTES_TEXT + 1); - Str_Copy (getTestsOut->answersArray.__ptr[NumRow].answerFeedback, - row[4],Cns_MAX_BYTES_TEXT); + Str_Copy (getTestsOut->answersArray.__ptr[NumRow].answerFeedback,row[4], + Cns_MAX_BYTES_TEXT); } } @@ -4077,7 +4122,8 @@ int swad__getTrivialQuestion (struct soap *soap, AnswerType = Tst_ConvertFromStrAnsTypDBToAnsTyp (row[1]); getTrivialQuestionOut->question.answerType = (char *) soap_malloc (Gbl.soap,Tst_MAX_LENGTH_ANSWER_TYPE + 1); Str_Copy (getTrivialQuestionOut->question.answerType, - Tst_StrAnswerTypesXML[AnswerType],Tst_MAX_LENGTH_ANSWER_TYPE); + Tst_StrAnswerTypesXML[AnswerType], + Tst_MAX_LENGTH_ANSWER_TYPE); /* Get shuffle (row[2]) */ getTrivialQuestionOut->question.shuffle = (row[2][0] == 'Y') ? 1 : @@ -4157,13 +4203,13 @@ int swad__getTrivialQuestion (struct soap *soap, /* Get answer (row[3]) */ getTrivialQuestionOut->answersArray.__ptr[NumRow].answerText = (char *) soap_malloc (Gbl.soap,Cns_MAX_BYTES_TEXT + 1); - Str_Copy (getTrivialQuestionOut->answersArray.__ptr[NumRow].answerText, - row[3],Cns_MAX_BYTES_TEXT); + Str_Copy (getTrivialQuestionOut->answersArray.__ptr[NumRow].answerText,row[3], + Cns_MAX_BYTES_TEXT); /* Get feedback (row[4]) */ getTrivialQuestionOut->answersArray.__ptr[NumRow].answerFeedback = (char *) soap_malloc (Gbl.soap,Cns_MAX_BYTES_TEXT + 1); - Str_Copy (getTrivialQuestionOut->answersArray.__ptr[NumRow].answerFeedback, - row[4],Cns_MAX_BYTES_TEXT); + Str_Copy (getTrivialQuestionOut->answersArray.__ptr[NumRow].answerFeedback,row[4], + Cns_MAX_BYTES_TEXT); } } @@ -4589,9 +4635,11 @@ int swad__getFile (struct soap *soap, URL); /***** Copy data into output structure *****/ - Str_Copy (getFileOut->fileName,FileMetadata.FilFolLnkName,NAME_MAX); + Str_Copy (getFileOut->fileName,FileMetadata.FilFolLnkName, + NAME_MAX); - Str_Copy (getFileOut->URL,URL,Cns_MAX_LENGTH_WWW); + Str_Copy (getFileOut->URL,URL, + Cns_MAX_LENGTH_WWW); getFileOut->size = (int) FileMetadata.Size; @@ -4609,7 +4657,8 @@ int swad__getFile (struct soap *soap, Usr_MAX_BYTES_FULL_NAME); Pho_BuildLinkToPhoto (&Gbl.Usrs.Other.UsrDat,PhotoURL); - Str_Copy (getFileOut->publisherPhoto,PhotoURL,Cns_MAX_LENGTH_WWW); + Str_Copy (getFileOut->publisherPhoto,PhotoURL, + Cns_MAX_LENGTH_WWW); } return SOAP_OK; @@ -4697,7 +4746,8 @@ int swad__getMarks (struct soap *soap, { Length = strlen (ContentStr); getMarksOut->content = (char *) soap_malloc (Gbl.soap,Length + 1); - Str_Copy (getMarksOut->content,ContentStr,Length); + Str_Copy (getMarksOut->content,ContentStr, + Length); free ((void *) ContentStr); ContentStr = NULL; } diff --git a/swad_xml.c b/swad_xml.c index de0cb554..954a0c4f 100644 --- a/swad_xml.c +++ b/swad_xml.c @@ -178,9 +178,10 @@ static void XML_GetElement (struct XMLElement *ParentElem) /* Copy content */ if (ContentLength) { - if ((ParentElem->Content = malloc (ContentLength+1)) == NULL) + if ((ParentElem->Content = malloc (ContentLength + 1)) == NULL) Lay_ShowErrorAndExit ("Not enough memory."); - Str_Copy (ParentElem->Content,StartContent,ContentLength); + strncpy (ParentElem->Content,StartContent,ContentLength); + ParentElem->Content[ContentLength] = '\0'; ParentElem->ContentLength = ContentLength; } @@ -214,9 +215,10 @@ static void XML_GetElement (struct XMLElement *ParentElem) /***** Get child tag name *****/ ChildElem->TagNameLength = strcspn (Gbl.XMLPtr,">/ \t"); - if ((ChildElem->TagName = malloc (ChildElem->TagNameLength+1)) == NULL) + if ((ChildElem->TagName = malloc (ChildElem->TagNameLength + 1)) == NULL) Lay_ShowErrorAndExit ("Not enough memory."); - Str_Copy (ChildElem->TagName,Gbl.XMLPtr,ChildElem->TagNameLength); + strncpy (ChildElem->TagName,Gbl.XMLPtr,ChildElem->TagNameLength); + ChildElem->TagName[ChildElem->TagNameLength] = '\0'; Gbl.XMLPtr += ChildElem->TagNameLength; /* @@ -333,9 +335,10 @@ static void XML_GetAttributes (struct XMLElement *Elem) /***** Get attribute name *****/ Attribute->AttributeNameLength = strcspn (Gbl.XMLPtr,"="); - if ((Attribute->AttributeName = malloc (Attribute->AttributeNameLength+1)) == NULL) + if ((Attribute->AttributeName = malloc (Attribute->AttributeNameLength + 1)) == NULL) Lay_ShowErrorAndExit ("Not enough memory."); - Str_Copy (Attribute->AttributeName,Gbl.XMLPtr,Attribute->AttributeNameLength); + strncpy (Attribute->AttributeName,Gbl.XMLPtr,Attribute->AttributeNameLength); + Attribute->AttributeName[Attribute->AttributeNameLength] = '\0'; Gbl.XMLPtr += Attribute->AttributeNameLength; /* End of attribute name: |