- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
int main ()
{
char address[128], fname[128], command[128];
FILE *tempfile;
strcpy(fname , tmpnam(NULL));
tempfile = fopen (fname, "w"); /* create temporary file */
if (tempfile == NULL) /* error - didn't create file */
{
printf("Internal failure #1 please report %d\n", errno);
exit (1);
}
fprintf(tempfile, "Thank you very much for caring about our cause\n");
fprintf(tempfile, "this letter is just to tell you how much we\n");
fprintf(tempfile, "really think you are wonderful for caring.\n\n");
fprintf(tempfile, "Sincerely,\n\n");
fprintf(tempfile, "Jane Doe, Executive Thanker\n");
fclose (tempfile);
gets(address); /* read in email address */
sprintf(command, "mail -s \"thanks for caring\" %s < %s\n",
address, fname); /* create the command */
system (command); /* execute command */
remove (fname); /* clean up */
exit (0);
}
JloJle4Ka 03.02.2023 16:18 # 0
Desktop 03.02.2023 16:19 # −3
JloJle4Ka 03.02.2023 16:21 # −3
Desktop 03.02.2023 16:19 # −3
JloJle4Ka 03.02.2023 16:24 # −3
Desktop 03.02.2023 16:24 # +1
cepreu_monoJlb 03.02.2023 17:09 # −1
hormand 03.02.2023 22:57 # 0
cepreu_monoJlb 03.02.2023 17:08 # 0
Soul_re@ver 03.02.2023 16:25 # 0
L_tmpnam вполне может быть больше 128 и тогда строка 9 может распидорасить стек.
Вторая проблема:
Строка 10 — TOCTOU, используй tmpfile, блджад.
Soul_re@ver 03.02.2023 16:29 # 0
gets может распидорасить стек на длинных адресах.
sprintf тоже распидорасит стек скорее всего.
дальше не читал. system с пользовательским вводом. Тут даже mysql_real_escape_strings не вызвали, так запихали.
Soul_re@ver 03.02.2023 16:32 # 0
PE3yC 03.02.2023 16:42 # +1
проверь
cepreu_monoJlb 03.02.2023 17:07 # 0
PE3yC 03.02.2023 16:40 # 0
а почему это говно не на баше?
guest6_uebok 03.02.2023 22:18 # 0
hormand 03.02.2023 22:56 # 0
guest6 04.02.2023 13:25 # 0
inkanus_gray 09.02.2023 20:21 # 0
Самая главшая лажа - пытаться сделать код кросскомпилируемым. Не стоит растягивать свой анус, пытаясь сделать код кросскомпилируемым. Стоит юзать апи конкретно той операционки, под которую конкретно пишешь данный софт.