Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-ports-gnome
Path: blob/main/security/fcrackzip/files/patch-main.c
16155 views
1
--- main.c.orig 2005-09-10 19:58:44 UTC
2
+++ main.c
3
@@ -44,13 +44,112 @@ static int modul = 1;
4
5
static FILE *dict_file;
6
7
+char *
8
+path_for_shell (char *dest, const char *str)
9
+{
10
+ /* backslash shell special charatcers */
11
+
12
+ char ch, *p = dest;
13
+ size_t len = strlen(str);
14
+ int i;
15
+
16
+ for (i = 0; i < len; i++)
17
+ {
18
+ ch = str[i];
19
+
20
+ switch (ch)
21
+ {
22
+ /* ASCII table order */
23
+ case 0x20: /* space */
24
+ case '!':
25
+ case '"':
26
+ case '#':
27
+ case '$':
28
+ case '&':
29
+ case 0x27: /* single quote */
30
+ case '(':
31
+ case ')':
32
+ case '*':
33
+ case '+':
34
+ case 0x2C: /* comma */
35
+ case ':':
36
+ case ';':
37
+ case '<':
38
+ case '>':
39
+ case '?':
40
+ case '[':
41
+ case '\\':
42
+ case ']':
43
+ case '^':
44
+ case '`':
45
+ case '{':
46
+ case '|':
47
+ case '}':
48
+ case '~':
49
+ /* backslash special characters */
50
+ *p++ = '\\';
51
+ *p++ = ch;
52
+ break;
53
+ default:
54
+ *p++ = ch;
55
+ }
56
+ }
57
+
58
+ /* terminate string */
59
+ *p = '\0';
60
+
61
+ return dest;
62
+}
63
+
64
+char *
65
+escape_pw (char *dest, const char *str)
66
+{
67
+ /* backslash shell special charatcers */
68
+
69
+ char ch, *p = dest;
70
+ size_t len = strlen(str);
71
+ int i;
72
+
73
+ for (i = 0; i < len; i++)
74
+ {
75
+ ch = str[i];
76
+
77
+ switch (ch)
78
+ {
79
+ /* ASCII table order */
80
+ case '"':
81
+ case '$':
82
+ case 0x27: /* single quote */
83
+ case '\\':
84
+ case '`':
85
+ /* backslash special characters */
86
+ *p++ = '\\';
87
+ *p++ = ch;
88
+ break;
89
+ default:
90
+ *p++ = ch;
91
+ }
92
+ }
93
+
94
+ /* terminate string */
95
+ *p = '\0';
96
+
97
+ return dest;
98
+}
99
+
100
int REGPARAM
101
check_unzip (const char *pw)
102
{
103
char buff[1024];
104
+ char path[1024];
105
+ char escpw[256];
106
int status;
107
108
- sprintf (buff, "unzip -qqtP \"%s\" %s " DEVNULL, pw, file_path[0]);
109
+ escape_pw (escpw, pw);
110
+ path_for_shell (path, file_path[0]);
111
+
112
+ sprintf (buff, "unzip -qqtP \"%s\" %s " DEVNULL, escpw, path);
113
+
114
status = system (buff);
115
116
#undef REDIR
117
118