From 774c3fb6d0bfd4fa528e9ec4d8598fe37b618a34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20Ca=C3=B1as=20Vargas?= Date: Thu, 19 Dec 2019 01:42:24 +0100 Subject: [PATCH] Version19.96 --- swad_RSS.c | 2 +- swad_account.c | 6 ++-- swad_changelog.h | 6 ++-- swad_exam.c | 2 +- swad_file_browser.c | 10 +++--- swad_info.c | 10 +++--- swad_mark.c | 2 +- swad_media.c | 78 ++++++++++++++++++++++++++------------------- swad_media.h | 2 +- swad_message.c | 62 +++++++++++++++++++++-------------- swad_photo.c | 2 +- swad_report.c | 10 +++--- swad_user.c | 4 +-- swad_user.h | 2 +- swad_zip.c | 2 +- 15 files changed, 113 insertions(+), 87 deletions(-) diff --git a/swad_RSS.c b/swad_RSS.c index 649207b9..c73d6e26 100644 --- a/swad_RSS.c +++ b/swad_RSS.c @@ -60,7 +60,7 @@ static void RSS_WriteExamAnnouncements (FILE *FileRSS,struct Course *Crs); void RSS_UpdateRSSFileForACrs (struct Course *Crs) { char PathRelPublRSSDir[PATH_MAX + 1]; - char PathRelPublRSSFile[PATH_MAX + 1]; + char PathRelPublRSSFile[PATH_MAX + 1 + NAME_MAX + 1]; FILE *FileRSS; char RSSLink[Cns_MAX_BYTES_WWW + 1]; struct tm *tm; diff --git a/swad_account.c b/swad_account.c index 1177dd92..ddabe23a 100644 --- a/swad_account.c +++ b/swad_account.c @@ -75,7 +75,7 @@ extern struct Globals Gbl; 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, +static void Acc_ShowFormRequestNewAccountWithParams (const char NewNicknameWithoutArroba[Nck_MAX_BYTES_NICKNAME_FROM_FORM + 1], const char *NewEmail); static bool Acc_GetParamsNewAccount (char NewNicknameWithoutArroba[Nck_MAX_BYTES_NICKNAME_FROM_FORM + 1], char *NewEmail, @@ -343,7 +343,7 @@ void Acc_ShowFormCreateMyAccount (void) /************ Show form to create a new account using parameters *************/ /*****************************************************************************/ -static void Acc_ShowFormRequestNewAccountWithParams (const char *NewNicknameWithoutArroba, +static void Acc_ShowFormRequestNewAccountWithParams (const char NewNicknameWithoutArroba[Nck_MAX_BYTES_NICKNAME_FROM_FORM + 1], const char *NewEmail) { extern const char *Hlp_PROFILE_SignUp; @@ -632,7 +632,7 @@ static bool Acc_GetParamsNewAccount (char NewNicknameWithoutArroba[Nck_MAX_BYTES extern const char *Txt_The_nickname_entered_X_is_not_valid_; 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 NewNicknameWithArroba[Nck_MAX_BYTES_NICKNAME_FROM_FORM + 1]; + char NewNicknameWithArroba[1 + Nck_MAX_BYTES_NICKNAME_FROM_FORM + 1]; char NewPlainPassword[Pwd_MAX_BYTES_PLAIN_PASSWORD + 1]; bool Error = false; diff --git a/swad_changelog.h b/swad_changelog.h index 2b3dc34a..d9ad1319 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -492,14 +492,16 @@ enscript -2 --landscape --color --file-align=2 --highlight --line-numbers -o - * En OpenSWAD: ps2pdf source.ps destination.pdf */ -#define Log_PLATFORM_VERSION "SWAD 19.95.2 (2019-12-18)" +#define Log_PLATFORM_VERSION "SWAD 19.96 (2019-12-19)" #define CSS_FILE "swad19.95.css" #define JS_FILE "swad19.91.1.js" /* // TODO: Hacer un nuevo rol en los TFG: tutor externo (profesor de áreas no vinculadas con el centro, profesionales de empresas, etc.) // TODO: Impedir la creación y edición de proyectos si no son editables. +// TODO: No se puede entrar con DNI '1' suponiendo que no tenga password ¿por qué? - Version 19.95.2: Dec 18, 2019 Buf fixes in swad.sql. (? lines) + Version 19.96: Dec 19, 2019 Bug fixes and code refactoring. (249423 lines) + Version 19.95.2: Dec 18, 2019 Bug fixes. (? lines) 1 change necessary in database: DROP TABLE IF EXISTS log; diff --git a/swad_exam.c b/swad_exam.c index 2c1b38b0..6164559c 100644 --- a/swad_exam.c +++ b/swad_exam.c @@ -1553,7 +1553,7 @@ void Exa_GetSummaryAndContentExamAnnouncement (char SummaryStr[Ntf_MAX_BYTES_SUM long ExaCod,bool GetContent) { extern const char *Txt_hours_ABBREVIATION; - char CrsNameAndDate[Hie_MAX_BYTES_FULL_NAME + (2 + Cns_MAX_BYTES_DATE + 6) + 1]; + char CrsNameAndDate[Hie_MAX_BYTES_FULL_NAME + (2 + Cns_MAX_BYTES_DATE + 7) + 1]; char StrExamDate[Cns_MAX_BYTES_DATE + 1]; /***** Initializations *****/ diff --git a/swad_file_browser.c b/swad_file_browser.c index b134a1f2..af07cc5b 100644 --- a/swad_file_browser.c +++ b/swad_file_browser.c @@ -5078,7 +5078,7 @@ void Brw_CreateDirDownloadTmp (void) static unsigned NumDir = 0; // When this function is called several times in the same execution of the program, each time a new directory is created // This happens when the trees of assignments and works of several users are being listed char PathUniqueDirL[PATH_MAX + 1]; - char PathUniqueDirR[PATH_MAX + 1]; + char PathUniqueDirR[PATH_MAX + 1 + NAME_MAX + 1]; /* Example: /var/www/html/swad/tmp/SS/ujCNWsy4ZOdmgMKYBe0sKPAJu6szaZOQlIlJs_QIY */ @@ -8689,8 +8689,8 @@ void Brw_RenFolderFileBrowser (void) extern const char *Txt_You_can_not_rename_this_folder; char OldPathInTree[PATH_MAX + 1 + NAME_MAX + 1]; char NewPathInTree[PATH_MAX + 1 + NAME_MAX + 1]; - char OldPath[PATH_MAX + 1 + PATH_MAX + 1]; - char NewPath[PATH_MAX + 1 + PATH_MAX + 1]; + char OldPath[PATH_MAX + 1 + PATH_MAX + 1 + NAME_MAX + 1]; + char NewPath[PATH_MAX + 1 + PATH_MAX + 1 + NAME_MAX + 1]; /***** Get parameters related to file browser *****/ Brw_GetParAndInitFileBrowser (); @@ -8852,7 +8852,7 @@ static bool Brw_RcvFileInFileBrw (Brw_UploadType_t UploadType) char SrcFileName[PATH_MAX + 1]; char PathUntilFileName[PATH_MAX + 1]; char Path[PATH_MAX + 1 + PATH_MAX + 1]; - char PathTmp[PATH_MAX + 1]; + char PathTmp[PATH_MAX + 1 + PATH_MAX + 4 + 1]; char PathCompleteInTreeIncludingFile[PATH_MAX + 1 + NAME_MAX + 1]; char MIMEType[Brw_MAX_BYTES_MIME_TYPE + 1]; bool AdminMarks; @@ -9044,7 +9044,7 @@ void Brw_RecLinkFileBrowser (void) char FileName[NAME_MAX + 1]; char Path[PATH_MAX + 1 + PATH_MAX + 1]; FILE *FileURL; - char PathCompleteInTreeIncludingFile[PATH_MAX + 1 + NAME_MAX + 1]; + char PathCompleteInTreeIncludingFile[PATH_MAX + 1 + NAME_MAX + 4 + 1]; long FilCod = -1L; // Code of new file in database char FileNameToShow[NAME_MAX + 1]; struct FileMetadata FileMetadata; diff --git a/swad_info.c b/swad_info.c index 14c843fe..1fe77e3e 100644 --- a/swad_info.c +++ b/swad_info.c @@ -724,7 +724,7 @@ void Inf_RemoveUsrFromCrsInfoRead (long UsrCod,long CrsCod) static bool Inf_CheckPage (long CrsCod,Inf_InfoType_t InfoType) { char PathRelDirHTML[PATH_MAX + 1]; - char PathRelFileHTML[PATH_MAX + 1]; + char PathRelFileHTML[PATH_MAX + 1 + 10 + 1]; // TODO !!!!!!!!!!!! If the page is hosted in server ==> it should be created a temporary public directory // and host the page in a private directory !!!!!!!!!!!!!!!!! @@ -758,7 +758,7 @@ static bool Inf_CheckPage (long CrsCod,Inf_InfoType_t InfoType) static bool Inf_CheckAndShowPage (void) { char PathRelDirHTML[PATH_MAX + 1]; - char PathRelFileHTML[PATH_MAX + 1]; + char PathRelFileHTML[PATH_MAX + 1 + 10 + 1]; char URL[PATH_MAX + 1]; // TODO !!!!!!!!!!!! If the page is hosted in server ==> it should be created a temporary public directory @@ -821,7 +821,7 @@ static void Inf_BuildPathPage (long CrsCod,Inf_InfoType_t InfoType,char PathDir[ int Inf_WritePageIntoHTMLBuffer (char **HTMLBuffer) { char PathRelDirHTML[PATH_MAX + 1]; - char PathRelFileHTML[PATH_MAX + 1]; + char PathRelFileHTML[PATH_MAX + 1 + 10 + 1]; FILE *FileHTML; bool FileExists = false; size_t Length; @@ -2249,10 +2249,10 @@ void Inf_ReceivePagInfo (void) struct Param *Param; char SourceFileName[PATH_MAX + 1]; char PathRelDirHTML[PATH_MAX + 1]; - char PathRelFileHTML[PATH_MAX + 1]; + char PathRelFileHTML[PATH_MAX + 1 + 10 + 1]; char PathRelFileZIP[PATH_MAX + 1 + NAME_MAX + 1]; char MIMEType[Brw_MAX_BYTES_MIME_TYPE + 1]; - char StrUnzip[128 + PATH_MAX * 2 + 1]; + char StrUnzip[128 + PATH_MAX + 1 + NAME_MAX + 1 + PATH_MAX + 1]; bool WrongType = false; bool FileIsOK = false; diff --git a/swad_mark.c b/swad_mark.c index 305cb23e..196ffb7c 100644 --- a/swad_mark.c +++ b/swad_mark.c @@ -706,7 +706,7 @@ void Mrk_GetNotifMyMarks (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1], char FullPathInTreeFromDBMarksTable[PATH_MAX + 1]; char PathUntilFileName[PATH_MAX + 1]; char FileName[NAME_MAX + 1]; - char PathMarks[PATH_MAX + 1]; + char PathMarks[PATH_MAX + 1 + Cns_MAX_DECIMAL_DIGITS_LONG + 1 + 3 + 1 + Cns_MAX_DECIMAL_DIGITS_LONG + 1 + PATH_MAX + 1]; char FileNameUsrMarks[PATH_MAX + 1]; FILE *FileUsrMarks; size_t SizeOfMyMarks; diff --git a/swad_media.c b/swad_media.c index 121b65d4..73c18bb1 100644 --- a/swad_media.c +++ b/swad_media.c @@ -1521,16 +1521,16 @@ static void Med_ShowJPG (struct Media *Media, { extern const char *Txt_File_not_found; char FileNameMedia[NAME_MAX + 1]; - char FullPathMediaPriv[PATH_MAX + 1]; + char *FullPathMediaPriv; char *URL; /***** Build private path to JPG *****/ snprintf (FileNameMedia,sizeof (FileNameMedia), "%s.%s", Media->Name,Med_Extensions[Med_JPG]); - snprintf (FullPathMediaPriv,sizeof (FullPathMediaPriv), - "%s/%s", - PathMedPriv,FileNameMedia); + if (asprintf (&FullPathMediaPriv,"%s/%s", + PathMedPriv,FileNameMedia) < 0) + Lay_NotEnoughMemoryExit (); /***** Check if private media file exists *****/ if (Fil_CheckIfPathExists (FullPathMediaPriv)) @@ -1551,6 +1551,8 @@ static void Med_ShowJPG (struct Media *Media, } else HTM_Txt (Txt_File_not_found); + + free (FullPathMediaPriv); } /*****************************************************************************/ @@ -1563,7 +1565,8 @@ static void Med_ShowGIF (struct Media *Media, { extern const char *Txt_File_not_found; char FileNameMedia[NAME_MAX + 1]; - char FullPathMediaPriv[PATH_MAX + 1]; + char *FullPathGIFPriv; + char *FullPathPNGPriv; char *URL; char *URL_GIF; char *URL_PNG; @@ -1572,16 +1575,16 @@ static void Med_ShowGIF (struct Media *Media, snprintf (FileNameMedia,sizeof (FileNameMedia), "%s.%s", Media->Name,Med_Extensions[Med_GIF]); - snprintf (FullPathMediaPriv,sizeof (FullPathMediaPriv), // The animated GIF image - "%s/%s", - PathMedPriv,FileNameMedia); + if (asprintf (&FullPathGIFPriv,"%s/%s", // The animated GIF image + PathMedPriv,FileNameMedia) < 0) + Lay_NotEnoughMemoryExit (); /***** Check if private media file exists *****/ - if (Fil_CheckIfPathExists (FullPathMediaPriv)) // The animated GIF image + if (Fil_CheckIfPathExists (FullPathGIFPriv)) // The animated GIF image { /***** Create symbolic link from temporary public directory to private file in order to gain access to it for showing/downloading *****/ - Brw_CreateTmpPublicLinkToPrivateFile (FullPathMediaPriv,FileNameMedia); + Brw_CreateTmpPublicLinkToPrivateFile (FullPathGIFPriv,FileNameMedia); /***** Create URL pointing to symbolic link *****/ if (asprintf (&URL,"%s/%s/%s", @@ -1596,18 +1599,18 @@ static void Med_ShowGIF (struct Media *Media, snprintf (FileNameMedia,sizeof (FileNameMedia), "%s.png", Media->Name); - snprintf (FullPathMediaPriv,sizeof (FullPathMediaPriv), - "%s/%s", - PathMedPriv,FileNameMedia); + if (asprintf (&FullPathPNGPriv,"%s/%s", + PathMedPriv,FileNameMedia) < 0) + Lay_NotEnoughMemoryExit (); if (asprintf (&URL_PNG,"%s/%s",URL,FileNameMedia) < 0) // The static PNG image Lay_NotEnoughMemoryExit (); /***** Check if private media file exists *****/ - if (Fil_CheckIfPathExists (FullPathMediaPriv)) // The static PNG image + if (Fil_CheckIfPathExists (FullPathPNGPriv)) // The static PNG image { /***** Create symbolic link from temporary public directory to private file in order to gain access to it for showing/downloading *****/ - Brw_CreateTmpPublicLinkToPrivateFile (FullPathMediaPriv,FileNameMedia); + Brw_CreateTmpPublicLinkToPrivateFile (FullPathPNGPriv,FileNameMedia); /***** Show static PNG and animated GIF *****/ HTM_DIV_Begin ("class=\"MED_PLAY\"" @@ -1630,6 +1633,8 @@ static void Med_ShowGIF (struct Media *Media, else HTM_Txt (Txt_File_not_found); + free (FullPathPNGPriv); + /***** Free URLs *****/ free (URL_PNG); free (URL_GIF); @@ -1637,6 +1642,8 @@ static void Med_ShowGIF (struct Media *Media, } else HTM_Txt (Txt_File_not_found); + + free (FullPathGIFPriv); } /*****************************************************************************/ @@ -1649,16 +1656,16 @@ static void Med_ShowVideo (struct Media *Media, { extern const char *Txt_File_not_found; char FileNameMediaPriv[NAME_MAX + 1]; - char FullPathMediaPriv[PATH_MAX + 1]; + char *FullPathMediaPriv; char URL_Video[PATH_MAX + 1]; /***** Build private path to video *****/ snprintf (FileNameMediaPriv,sizeof (FileNameMediaPriv), "%s.%s", Media->Name,Med_Extensions[Media->Type]); - snprintf (FullPathMediaPriv,sizeof (FullPathMediaPriv), - "%s/%s", - PathMedPriv,FileNameMediaPriv); + if (asprintf (&FullPathMediaPriv,"%s/%s", + PathMedPriv,FileNameMediaPriv) < 0) + Lay_NotEnoughMemoryExit (); /***** Check if private media file exists *****/ if (Fil_CheckIfPathExists (FullPathMediaPriv)) @@ -1689,6 +1696,8 @@ static void Med_ShowVideo (struct Media *Media, } else HTM_Txt (Txt_File_not_found); + + free (FullPathMediaPriv); } /*****************************************************************************/ @@ -1824,7 +1833,7 @@ void Med_RemoveMediaFromAllRows (unsigned NumMedia,MYSQL_RES *mysql_res) void Med_RemoveMedia (long MedCod) { char PathMedPriv[PATH_MAX + 1]; - char FullPathMediaPriv[PATH_MAX + 1]; + char *FullPathMediaPriv; struct Media Media; /***** Trivial case *****/ @@ -1860,34 +1869,37 @@ void Med_RemoveMedia (long MedCod) { case Med_JPG: /***** Remove private JPG file *****/ - snprintf (FullPathMediaPriv,sizeof (FullPathMediaPriv), - "%s/%s.%s", - PathMedPriv,Media.Name,Med_Extensions[Med_JPG]); + if (asprintf (&FullPathMediaPriv,"%s/%s.%s", + PathMedPriv,Media.Name,Med_Extensions[Med_JPG]) < 0) + Lay_NotEnoughMemoryExit (); unlink (FullPathMediaPriv); - + free (FullPathMediaPriv); break; case Med_GIF: /***** Remove private GIF file *****/ - snprintf (FullPathMediaPriv,sizeof (FullPathMediaPriv), - "%s/%s.%s", - PathMedPriv,Media.Name,Med_Extensions[Med_GIF]); + if (asprintf (&FullPathMediaPriv,"%s/%s.%s", + PathMedPriv,Media.Name,Med_Extensions[Med_GIF]) < 0) + Lay_NotEnoughMemoryExit (); unlink (FullPathMediaPriv); + free (FullPathMediaPriv); /***** Remove private PNG file *****/ - snprintf (FullPathMediaPriv,sizeof (FullPathMediaPriv), - "%s/%s.png", - PathMedPriv,Media.Name); + if (asprintf (&FullPathMediaPriv,"%s/%s.png", + PathMedPriv,Media.Name) < 0) + Lay_NotEnoughMemoryExit (); unlink (FullPathMediaPriv); + free (FullPathMediaPriv); break; case Med_MP4: case Med_WEBM: case Med_OGG: /***** Remove private video file *****/ - snprintf (FullPathMediaPriv,sizeof (FullPathMediaPriv), - "%s/%s.%s", - PathMedPriv,Media.Name,Med_Extensions[Media.Type]); + if (asprintf (&FullPathMediaPriv,"%s/%s.%s", + PathMedPriv,Media.Name,Med_Extensions[Media.Type]) < 0) + Lay_NotEnoughMemoryExit (); unlink (FullPathMediaPriv); + free (FullPathMediaPriv); break; default: diff --git a/swad_media.h b/swad_media.h index 16e056c0..3c5744fd 100644 --- a/swad_media.h +++ b/swad_media.h @@ -120,7 +120,7 @@ struct Media }; /***** Parameters used in a form to upload an image/video *****/ -#define Med_MAX_BYTES_PARAM_UPLOAD_MEDIA (16 - 1) +#define Med_MAX_BYTES_PARAM_UPLOAD_MEDIA (32 - 1) struct ParamUploadMedia { char Action [Med_MAX_BYTES_PARAM_UPLOAD_MEDIA + 1]; diff --git a/swad_message.c b/swad_message.c index 22121ba2..3a9afee4 100644 --- a/swad_message.c +++ b/swad_message.c @@ -1592,42 +1592,54 @@ static bool Msg_CheckIfReceivedMsgIsDeletedForAllItsRecipients (long MsgCod) static unsigned Msg_GetNumUnreadMsgs (long FilterCrsCod,const char *FilterFromToSubquery) { - char SubQuery[Msg_MAX_BYTES_MESSAGES_QUERY + 1]; + char *SubQuery; unsigned NumMsgs; /***** Get number of unread messages from database *****/ if (FilterCrsCod >= 0) // If origin course selected { if (FilterFromToSubquery[0]) - sprintf (SubQuery,"SELECT msg_rcv.MsgCod FROM msg_rcv,msg_snt,usr_data" - " WHERE msg_rcv.UsrCod=%ld AND msg_rcv.Open='N'" - " AND msg_rcv.MsgCod=msg_snt.MsgCod" - " AND msg_snt.CrsCod=%ld" - " AND msg_snt.UsrCod=usr_data.UsrCod%s", - Gbl.Usrs.Me.UsrDat.UsrCod, - FilterCrsCod, - FilterFromToSubquery); + { + if (asprintf (&SubQuery,"SELECT msg_rcv.MsgCod FROM msg_rcv,msg_snt,usr_data" + " WHERE msg_rcv.UsrCod=%ld AND msg_rcv.Open='N'" + " AND msg_rcv.MsgCod=msg_snt.MsgCod" + " AND msg_snt.CrsCod=%ld" + " AND msg_snt.UsrCod=usr_data.UsrCod%s", + Gbl.Usrs.Me.UsrDat.UsrCod, + FilterCrsCod, + FilterFromToSubquery) < 0) + Lay_NotEnoughMemoryExit (); + } else - sprintf (SubQuery,"SELECT msg_rcv.MsgCod FROM msg_rcv,msg_snt" - " WHERE msg_rcv.UsrCod=%ld AND msg_rcv.Open='N'" - " AND msg_rcv.MsgCod=msg_snt.MsgCod" - " AND msg_snt.CrsCod=%ld", - Gbl.Usrs.Me.UsrDat.UsrCod, - FilterCrsCod); + { + if (asprintf (&SubQuery,"SELECT msg_rcv.MsgCod FROM msg_rcv,msg_snt" + " WHERE msg_rcv.UsrCod=%ld AND msg_rcv.Open='N'" + " AND msg_rcv.MsgCod=msg_snt.MsgCod" + " AND msg_snt.CrsCod=%ld", + Gbl.Usrs.Me.UsrDat.UsrCod, + FilterCrsCod) < 0) + Lay_NotEnoughMemoryExit (); + } } else // If no origin course selected { if (FilterFromToSubquery[0]) - sprintf (SubQuery,"SELECT msg_rcv.MsgCod FROM msg_rcv,msg_snt,usr_data" - " WHERE msg_rcv.UsrCod=%ld AND msg_rcv.Open='N'" - " AND msg_rcv.MsgCod=msg_snt.MsgCod" - " AND msg_snt.UsrCod=usr_data.UsrCod%s", - Gbl.Usrs.Me.UsrDat.UsrCod, - FilterFromToSubquery); + { + if (asprintf (&SubQuery,"SELECT msg_rcv.MsgCod FROM msg_rcv,msg_snt,usr_data" + " WHERE msg_rcv.UsrCod=%ld AND msg_rcv.Open='N'" + " AND msg_rcv.MsgCod=msg_snt.MsgCod" + " AND msg_snt.UsrCod=usr_data.UsrCod%s", + Gbl.Usrs.Me.UsrDat.UsrCod, + FilterFromToSubquery) < 0) + Lay_NotEnoughMemoryExit (); + } else - sprintf (SubQuery,"SELECT MsgCod FROM msg_rcv" - " WHERE UsrCod=%ld AND Open='N'", - Gbl.Usrs.Me.UsrDat.UsrCod); + { + if (asprintf (&SubQuery,"SELECT MsgCod FROM msg_rcv" + " WHERE UsrCod=%ld AND Open='N'", + Gbl.Usrs.Me.UsrDat.UsrCod) < 0) + Lay_NotEnoughMemoryExit (); + } } if (Gbl.Msg.FilterContent[0]) @@ -1644,6 +1656,8 @@ static unsigned Msg_GetNumUnreadMsgs (long FilterCrsCod,const char *FilterFromTo "SELECT COUNT(*) FROM (%s) AS T", SubQuery); + free (SubQuery); + return NumMsgs; } diff --git a/swad_photo.c b/swad_photo.c index c47383e6..df527610 100644 --- a/swad_photo.c +++ b/swad_photo.c @@ -1587,7 +1587,7 @@ static void Pho_ComputeAveragePhoto (long DegCod,Usr_Sex_t Sex,Rol_Role_t Role, char PathRelAvgPhoto[PATH_MAX + 1]; char FileNamePhotoNames[PATH_MAX + 1]; FILE *FilePhotoNames = NULL; // Initialized to avoid warning - char StrCallToProgram[256]; // Call to photo processing program + char StrCallToProgram[3 * (PATH_MAX + 1)]; // Call to photo processing program int ReturnCode; /* To compute execution time of this function */ struct timeval tvStartComputingStat; diff --git a/swad_report.c b/swad_report.c index 6b20cd03..f7861df2 100644 --- a/swad_report.c +++ b/swad_report.c @@ -66,10 +66,8 @@ struct Rep_CurrentTimeUTC { - char StrDate[10 + 1]; // Example: 2016-10-02 - // 1234567890 - char StrTime[8 + 1]; // Example: 19:03:49 - // 12345678 + char StrDate[3 * (Cns_MAX_DECIMAL_DIGITS_INT + 1)]; // Example: 2016-10-02 + char StrTime[3 * (Cns_MAX_DECIMAL_DIGITS_INT + 1)]; // Example: 19:03:49 unsigned Date; // Example: 20161002 unsigned Time; // Example: 190349 }; @@ -374,8 +372,8 @@ static void Rep_GetCurrentDateTimeUTC (struct Rep_Report *Report) static void Rep_CreateNewReportFile (struct Rep_Report *Report) { char PathUniqueDirL[PATH_MAX + 1]; - char PathUniqueDirR[PATH_MAX + 1]; - char PathFileReport[PATH_MAX + 1]; + char PathUniqueDirR[PATH_MAX + 1 + Cry_BYTES_ENCRYPTED_STR_SHA256_BASE64 + 1]; + char PathFileReport[PATH_MAX + 1 + Cry_BYTES_ENCRYPTED_STR_SHA256_BASE64 + 1 + NAME_MAX + 1]; char Permalink[128 + Cry_BYTES_ENCRYPTED_STR_SHA256_BASE64 + NAME_MAX]; diff --git a/swad_user.c b/swad_user.c index 94290e9c..585129e4 100644 --- a/swad_user.c +++ b/swad_user.c @@ -9193,7 +9193,7 @@ void Usr_PutSelectorNumColsClassPhoto (void) /********** Build the relative path of a user from his user's code ***********/ /*****************************************************************************/ -void Usr_ConstructPathUsr (long UsrCod,char PathUsr[PATH_MAX + 1]) +void Usr_ConstructPathUsr (long UsrCod,char PathUsr[PATH_MAX + 1 + Cns_MAX_DECIMAL_DIGITS_LONG + 1]) { char PathAboveUsr[PATH_MAX + 1]; @@ -9207,7 +9207,7 @@ void Usr_ConstructPathUsr (long UsrCod,char PathUsr[PATH_MAX + 1]) Fil_CreateDirIfNotExists (PathAboveUsr); /***** Path for user *****/ - snprintf (PathUsr,PATH_MAX + 1, + snprintf (PathUsr,PATH_MAX + 1 + Cns_MAX_DECIMAL_DIGITS_LONG + 1, "%s/%ld", PathAboveUsr,UsrCod); } diff --git a/swad_user.h b/swad_user.h index 2f8f7d8a..00c90fc3 100644 --- a/swad_user.h +++ b/swad_user.h @@ -504,7 +504,7 @@ void Usr_SeeStdClassPhotoPrn (void); void Usr_SeeTchClassPhotoPrn (void); void Usr_PutSelectorNumColsClassPhoto (void); -void Usr_ConstructPathUsr (long UsrCod,char PathUsr[PATH_MAX + 1]); +void Usr_ConstructPathUsr (long UsrCod,char PathUsr[PATH_MAX + 1 + Cns_MAX_DECIMAL_DIGITS_LONG + 1]); bool Usr_ChkIfUsrCodExists (long UsrCod); void Usr_ShowWarningNoUsersFound (Rol_Role_t Role); diff --git a/swad_zip.c b/swad_zip.c index 8aaa884d..aa14dee9 100644 --- a/swad_zip.c +++ b/swad_zip.c @@ -256,7 +256,7 @@ static void ZIP_CreateDirCompressionUsr (struct UsrData *UsrDat) char FullNameAndUsrID[NAME_MAX + 1]; char PathFolderUsrInsideCrs[128 + PATH_MAX + NAME_MAX]; char LinkTmpUsr[PATH_MAX + 1]; - char Link[PATH_MAX + 1]; + char Link[PATH_MAX + 1 + Cns_MAX_DECIMAL_DIGITS_UINT + 1]; unsigned NumTry; bool Success;