Line | Source | Count |
1 | | - |
2 | | - |
3 | | - |
4 | | - |
5 | | - |
6 | | - |
7 | | - |
8 | | - |
9 | | - |
10 | char * | - |
11 | _ssh_compat_realpath(const char *path, char *resolved) | - |
12 | { | - |
13 | struct stat sb; | - |
14 | char *p, *q, *s; | - |
15 | size_t left_len, resolved_len; | - |
16 | unsigned symlinks; | - |
17 | int serrno, slen, mem_allocated; | - |
18 | char left[ | - |
19 | 4096 | - |
20 | ], next_token[ | - |
21 | 4096 | - |
22 | ], symlink[ | - |
23 | 4096 | - |
24 | ]; | - |
25 | | - |
26 | if (path[0] == '\0'TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
27 | | - |
28 | (*__errno_location ()) | - |
29 | = | - |
30 | 2 | - |
31 | ; | - |
32 | return never executed: return ( ((void *)0) ); (never executed: return ( ((void *)0) ); | 0 |
33 | ((void *)0) never executed: return ( ((void *)0) ); | 0 |
34 | ); never executed: return ( ((void *)0) ); | 0 |
35 | } | - |
36 | | - |
37 | serrno = | - |
38 | (*__errno_location ()) | - |
39 | ; | - |
40 | | - |
41 | if (resolved == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
42 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
43 | ) { | - |
44 | resolved = malloc( | - |
45 | 4096 | - |
46 | ); | - |
47 | if (resolved == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
48 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
49 | ) | - |
50 | return never executed: return ( ((void *)0) ); (never executed: return ( ((void *)0) ); | 0 |
51 | ((void *)0) never executed: return ( ((void *)0) ); | 0 |
52 | ); never executed: return ( ((void *)0) ); | 0 |
53 | mem_allocated = 1; | - |
54 | } never executed: end of block else | 0 |
55 | mem_allocated = 0; never executed: mem_allocated = 0; | 0 |
56 | | - |
57 | symlinks = 0; | - |
58 | if (path[0] == '/'TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
59 | resolved[0] = '/'; | - |
60 | resolved[1] = '\0'; | - |
61 | if (path[1] == '\0'TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
62 | return never executed: return (resolved); (resolved);never executed: return (resolved); | 0 |
63 | resolved_len = 1; | - |
64 | left_len = strlcpy(left, path + 1, sizeof(left)); | - |
65 | } never executed: end of block else { | 0 |
66 | if (getcwd(resolved, TRUE | never evaluated | FALSE | never evaluated |
| 0 |
67 | 4096TRUE | never evaluated | FALSE | never evaluated |
| 0 |
68 | ) == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
69 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
70 | ) { | - |
71 | if (mem_allocatedTRUE | never evaluated | FALSE | never evaluated |
) | 0 |
72 | free(resolved); never executed: free(resolved); | 0 |
73 | else | - |
74 | strlcpy(resolved, ".", never executed: strlcpy(resolved, ".", 4096 ); | 0 |
75 | 4096 never executed: strlcpy(resolved, ".", 4096 ); | 0 |
76 | ); never executed: strlcpy(resolved, ".", 4096 ); | 0 |
77 | return never executed: return ( ((void *)0) ); (never executed: return ( ((void *)0) ); | 0 |
78 | ((void *)0) never executed: return ( ((void *)0) ); | 0 |
79 | ); never executed: return ( ((void *)0) ); | 0 |
80 | } | - |
81 | resolved_len = strlen(resolved); | - |
82 | left_len = strlcpy(left, path, sizeof(left)); | - |
83 | } never executed: end of block | 0 |
84 | if (left_len >= sizeof(left)TRUE | never evaluated | FALSE | never evaluated |
|| resolved_len >= TRUE | never evaluated | FALSE | never evaluated |
| 0 |
85 | 4096TRUE | never evaluated | FALSE | never evaluated |
| 0 |
86 | ) { | - |
87 | | - |
88 | (*__errno_location ()) | - |
89 | = | - |
90 | 36 | - |
91 | ; | - |
92 | goto never executed: goto err; err;never executed: goto err; | 0 |
93 | } | - |
94 | | - |
95 | | - |
96 | | - |
97 | | - |
98 | while (left_len != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
99 | | - |
100 | | - |
101 | | - |
102 | | - |
103 | p = | - |
104 | (__extension__ (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
105 | '/'TRUE | never evaluated | FALSE | never evaluated |
| 0 |
106 | )TRUE | never evaluated | FALSE | never evaluated |
&& !__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
107 | leftTRUE | never evaluated | FALSE | never evaluated |
| 0 |
108 | )TRUE | never evaluated | FALSE | never evaluated |
&& (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
109 | '/'TRUE | never evaluated | FALSE | never evaluated |
| 0 |
110 | ) == '\0'TRUE | never evaluated | FALSE | never evaluated |
? (char *) __rawmemchr ( | 0 |
111 | left | - |
112 | , | - |
113 | '/' | - |
114 | ) : __builtin_strchr ( | - |
115 | left | - |
116 | , | - |
117 | '/' | - |
118 | ))) | - |
119 | ; | - |
120 | s = pTRUE | never evaluated | FALSE | never evaluated |
? p : left + left_len; | 0 |
121 | if (s - left >= (ptrdiff_t)sizeof(next_token)TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
122 | | - |
123 | (*__errno_location ()) | - |
124 | = | - |
125 | 36 | - |
126 | ; | - |
127 | goto never executed: goto err; err;never executed: goto err; | 0 |
128 | } | - |
129 | memcpy(next_token, left, s - left); | - |
130 | next_token[s - left] = '\0'; | - |
131 | left_len -= s - left; | - |
132 | if (p != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
133 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
134 | ) | - |
135 | memmove(left, s + 1, left_len + 1); never executed: memmove(left, s + 1, left_len + 1); | 0 |
136 | if (resolved[resolved_len - 1] != '/'TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
137 | if (resolved_len + 1 >= TRUE | never evaluated | FALSE | never evaluated |
| 0 |
138 | 4096TRUE | never evaluated | FALSE | never evaluated |
| 0 |
139 | ) { | - |
140 | | - |
141 | (*__errno_location ()) | - |
142 | = | - |
143 | 36 | - |
144 | ; | - |
145 | goto never executed: goto err; err;never executed: goto err; | 0 |
146 | } | - |
147 | resolved[resolved_len++] = '/'; | - |
148 | resolved[resolved_len] = '\0'; | - |
149 | } never executed: end of block | 0 |
150 | if (next_token[0] == '\0'TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
151 | continue; never executed: continue; | 0 |
152 | else if ( | - |
153 | __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
154 | next_tokenTRUE | never evaluated | FALSE | never evaluated |
| 0 |
155 | ) && __builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
156 | "."TRUE | never evaluated | FALSE | never evaluated |
| 0 |
157 | ) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
158 | next_tokenTRUE | never evaluated | FALSE | never evaluated |
| 0 |
159 | ), __s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
160 | "."TRUE | never evaluated | FALSE | never evaluated |
| 0 |
161 | ), (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
162 | next_tokenTRUE | never evaluated | FALSE | never evaluated |
| 0 |
163 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
164 | next_tokenTRUE | never evaluated | FALSE | never evaluated |
| 0 |
165 | ) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
166 | "."TRUE | never evaluated | FALSE | never evaluated |
| 0 |
167 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
168 | "."TRUE | never evaluated | FALSE | never evaluated |
| 0 |
169 | ) == 1) || __s2_len >= 4)) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
170 | next_tokenTRUE | never evaluated | FALSE | never evaluated |
| 0 |
171 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
172 | "."TRUE | never evaluated | FALSE | never evaluated |
| 0 |
173 | ) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
174 | next_tokenTRUE | never evaluated | FALSE | never evaluated |
| 0 |
175 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
176 | next_tokenTRUE | never evaluated | FALSE | never evaluated |
| 0 |
177 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
178 | next_tokenTRUE | never evaluated | FALSE | never evaluated |
| 0 |
179 | ) == 1) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
180 | next_tokenTRUE | never evaluated | FALSE | never evaluated |
| 0 |
181 | ), __s1_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
182 | "."TRUE | never evaluated | FALSE | never evaluated |
| 0 |
183 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
184 | "."TRUE | never evaluated | FALSE | never evaluated |
| 0 |
185 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
186 | "."TRUE | never evaluated | FALSE | never evaluated |
| 0 |
187 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
188 | next_tokenTRUE | never evaluated | FALSE | never evaluated |
| 0 |
189 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
190 | "."TRUE | never evaluated | FALSE | never evaluated |
| 0 |
191 | ) : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
192 | "."TRUE | never evaluated | FALSE | never evaluated |
| 0 |
193 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
194 | next_tokenTRUE | never evaluated | FALSE | never evaluated |
| 0 |
195 | ))[0] - __s2[0]); if (__s1_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
196 | next_tokenTRUE | never evaluated | FALSE | never evaluated |
| 0 |
197 | ))[1] - __s2[1]); if (__s1_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
198 | next_tokenTRUE | never evaluated | FALSE | never evaluated |
| 0 |
199 | ))[2] - __s2[2]); if (__s1_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( next_token ))[3] - __s2[3]); | 0 |
200 | next_tokenTRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( next_token ))[3] - __s2[3]); | 0 |
201 | ))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
202 | "."TRUE | never evaluated | FALSE | never evaluated |
| 0 |
203 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
204 | "."TRUE | never evaluated | FALSE | never evaluated |
| 0 |
205 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
206 | "."TRUE | never evaluated | FALSE | never evaluated |
| 0 |
207 | ) == 1) && (__s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
208 | "."TRUE | never evaluated | FALSE | never evaluated |
| 0 |
209 | ), __s2_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
210 | next_tokenTRUE | never evaluated | FALSE | never evaluated |
| 0 |
211 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
212 | next_tokenTRUE | never evaluated | FALSE | never evaluated |
| 0 |
213 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
214 | next_tokenTRUE | never evaluated | FALSE | never evaluated |
| 0 |
215 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
216 | next_tokenTRUE | never evaluated | FALSE | never evaluated |
| 0 |
217 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
218 | "."TRUE | never evaluated | FALSE | never evaluated |
| 0 |
219 | ) : -(__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
220 | next_tokenTRUE | never evaluated | FALSE | never evaluated |
| 0 |
221 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
222 | "."TRUE | never evaluated | FALSE | never evaluated |
| 0 |
223 | ))[0] - __s2[0]); if (__s2_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
224 | "."TRUE | never evaluated | FALSE | never evaluated |
| 0 |
225 | ))[1] - __s2[1]); if (__s2_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
226 | "."TRUE | never evaluated | FALSE | never evaluated |
| 0 |
227 | ))[2] - __s2[2]); if (__s2_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( "." ))[3] - __s2[3]); | 0 |
228 | "."TRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( "." ))[3] - __s2[3]); | 0 |
229 | ))[3] - __s2[3]); } } __result; }))) : __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
230 | next_tokenTRUE | never evaluated | FALSE | never evaluated |
| 0 |
231 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
232 | "."TRUE | never evaluated | FALSE | never evaluated |
| 0 |
233 | )))); }) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
234 | == 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
235 | continue; never executed: continue; | 0 |
236 | else if ( | - |
237 | __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
238 | next_tokenTRUE | never evaluated | FALSE | never evaluated |
| 0 |
239 | ) && __builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
240 | ".."TRUE | never evaluated | FALSE | never evaluated |
| 0 |
241 | ) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
242 | next_tokenTRUE | never evaluated | FALSE | never evaluated |
| 0 |
243 | ), __s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
244 | ".."TRUE | never evaluated | FALSE | never evaluated |
| 0 |
245 | ), (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
246 | next_tokenTRUE | never evaluated | FALSE | never evaluated |
| 0 |
247 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
248 | next_tokenTRUE | never evaluated | FALSE | never evaluated |
| 0 |
249 | ) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
250 | ".."TRUE | never evaluated | FALSE | never evaluated |
| 0 |
251 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
252 | ".."TRUE | never evaluated | FALSE | never evaluated |
| 0 |
253 | ) == 1) || __s2_len >= 4)) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
254 | next_tokenTRUE | never evaluated | FALSE | never evaluated |
| 0 |
255 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
256 | ".."TRUE | never evaluated | FALSE | never evaluated |
| 0 |
257 | ) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
258 | next_tokenTRUE | never evaluated | FALSE | never evaluated |
| 0 |
259 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
260 | next_tokenTRUE | never evaluated | FALSE | never evaluated |
| 0 |
261 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
262 | next_tokenTRUE | never evaluated | FALSE | never evaluated |
| 0 |
263 | ) == 1) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
264 | next_tokenTRUE | never evaluated | FALSE | never evaluated |
| 0 |
265 | ), __s1_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
266 | ".."TRUE | never evaluated | FALSE | never evaluated |
| 0 |
267 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
268 | ".."TRUE | never evaluated | FALSE | never evaluated |
| 0 |
269 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
270 | ".."TRUE | never evaluated | FALSE | never evaluated |
| 0 |
271 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
272 | next_tokenTRUE | never evaluated | FALSE | never evaluated |
| 0 |
273 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
274 | ".."TRUE | never evaluated | FALSE | never evaluated |
| 0 |
275 | ) : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
276 | ".."TRUE | never evaluated | FALSE | never evaluated |
| 0 |
277 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
278 | next_tokenTRUE | never evaluated | FALSE | never evaluated |
| 0 |
279 | ))[0] - __s2[0]); if (__s1_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
280 | next_tokenTRUE | never evaluated | FALSE | never evaluated |
| 0 |
281 | ))[1] - __s2[1]); if (__s1_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
282 | next_tokenTRUE | never evaluated | FALSE | never evaluated |
| 0 |
283 | ))[2] - __s2[2]); if (__s1_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( next_token ))[3] - __s2[3]); | 0 |
284 | next_tokenTRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( next_token ))[3] - __s2[3]); | 0 |
285 | ))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
286 | ".."TRUE | never evaluated | FALSE | never evaluated |
| 0 |
287 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
288 | ".."TRUE | never evaluated | FALSE | never evaluated |
| 0 |
289 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
290 | ".."TRUE | never evaluated | FALSE | never evaluated |
| 0 |
291 | ) == 1) && (__s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
292 | ".."TRUE | never evaluated | FALSE | never evaluated |
| 0 |
293 | ), __s2_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
294 | next_tokenTRUE | never evaluated | FALSE | never evaluated |
| 0 |
295 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
296 | next_tokenTRUE | never evaluated | FALSE | never evaluated |
| 0 |
297 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
298 | next_tokenTRUE | never evaluated | FALSE | never evaluated |
| 0 |
299 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
300 | next_tokenTRUE | never evaluated | FALSE | never evaluated |
| 0 |
301 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
302 | ".."TRUE | never evaluated | FALSE | never evaluated |
| 0 |
303 | ) : -(__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
304 | next_tokenTRUE | never evaluated | FALSE | never evaluated |
| 0 |
305 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
306 | ".."TRUE | never evaluated | FALSE | never evaluated |
| 0 |
307 | ))[0] - __s2[0]); if (__s2_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
308 | ".."TRUE | never evaluated | FALSE | never evaluated |
| 0 |
309 | ))[1] - __s2[1]); if (__s2_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
310 | ".."TRUE | never evaluated | FALSE | never evaluated |
| 0 |
311 | ))[2] - __s2[2]); if (__s2_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( ".." ))[3] - __s2[3]); | 0 |
312 | ".."TRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( ".." ))[3] - __s2[3]); | 0 |
313 | ))[3] - __s2[3]); } } __result; }))) : __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
314 | next_tokenTRUE | never evaluated | FALSE | never evaluated |
| 0 |
315 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
316 | ".."TRUE | never evaluated | FALSE | never evaluated |
| 0 |
317 | )))); }) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
318 | == 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
319 | | - |
320 | | - |
321 | | - |
322 | | - |
323 | if (resolved_len > 1TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
324 | resolved[resolved_len - 1] = '\0'; | - |
325 | q = strrchr(resolved, '/') + 1; | - |
326 | *q = '\0'; | - |
327 | resolved_len = q - resolved; | - |
328 | } never executed: end of block | 0 |
329 | continue; never executed: continue; | 0 |
330 | } | - |
331 | | - |
332 | | - |
333 | | - |
334 | | - |
335 | | - |
336 | | - |
337 | resolved_len = strlcat(resolved, next_token, | - |
338 | 4096 | - |
339 | ); | - |
340 | if (resolved_len >= TRUE | never evaluated | FALSE | never evaluated |
| 0 |
341 | 4096TRUE | never evaluated | FALSE | never evaluated |
| 0 |
342 | ) { | - |
343 | | - |
344 | (*__errno_location ()) | - |
345 | = | - |
346 | 36 | - |
347 | ; | - |
348 | goto never executed: goto err; err;never executed: goto err; | 0 |
349 | } | - |
350 | if (lstat(resolved, &sb) != 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
351 | if ( | - |
352 | (*TRUE | never evaluated | FALSE | never evaluated |
__errno_location ()) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
353 | == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
354 | 2TRUE | never evaluated | FALSE | never evaluated |
| 0 |
355 | && p == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
356 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
357 | ) { | - |
358 | | - |
359 | (*__errno_location ()) | - |
360 | = serrno; | - |
361 | return never executed: return (resolved); (resolved);never executed: return (resolved); | 0 |
362 | } | - |
363 | goto never executed: goto err; err;never executed: goto err; | 0 |
364 | } | - |
365 | if ( | - |
366 | ((((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
367 | sb.st_modeTRUE | never evaluated | FALSE | never evaluated |
| 0 |
368 | )) & 0170000) == (0120000))TRUE | never evaluated | FALSE | never evaluated |
| 0 |
369 | ) { | - |
370 | if (symlinks++ > 32TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
371 | | - |
372 | (*__errno_location ()) | - |
373 | = | - |
374 | 40 | - |
375 | ; | - |
376 | goto never executed: goto err; err;never executed: goto err; | 0 |
377 | } | - |
378 | slen = readlink(resolved, symlink, sizeof(symlink) - 1); | - |
379 | if (slen < 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
380 | goto never executed: goto err; err;never executed: goto err; | 0 |
381 | symlink[slen] = '\0'; | - |
382 | if (symlink[0] == '/'TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
383 | resolved[1] = 0; | - |
384 | resolved_len = 1; | - |
385 | } never executed: end of block else if (resolved_len > 1TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
386 | | - |
387 | resolved[resolved_len - 1] = '\0'; | - |
388 | q = strrchr(resolved, '/') + 1; | - |
389 | *q = '\0'; | - |
390 | resolved_len = q - resolved; | - |
391 | } never executed: end of block | 0 |
392 | | - |
393 | | - |
394 | | - |
395 | | - |
396 | | - |
397 | | - |
398 | if (p != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
399 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
400 | ) { | - |
401 | if (symlink[slen - 1] != '/'TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
402 | if (slen + 1 >=TRUE | never evaluated | FALSE | never evaluated |
| 0 |
403 | (ptrdiff_t)sizeof(symlink)TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
404 | | - |
405 | (*__errno_location ()) | - |
406 | = | - |
407 | 36 | - |
408 | ; | - |
409 | goto never executed: goto err; err;never executed: goto err; | 0 |
410 | } | - |
411 | symlink[slen] = '/'; | - |
412 | symlink[slen + 1] = 0; | - |
413 | } never executed: end of block | 0 |
414 | left_len = strlcat(symlink, left, sizeof(symlink)); | - |
415 | if (left_len >= sizeof(symlink)TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
416 | | - |
417 | (*__errno_location ()) | - |
418 | = | - |
419 | 36 | - |
420 | ; | - |
421 | goto never executed: goto err; err;never executed: goto err; | 0 |
422 | } | - |
423 | } never executed: end of block | 0 |
424 | left_len = strlcpy(left, symlink, sizeof(left)); | - |
425 | } never executed: end of block | 0 |
426 | } never executed: end of block | 0 |
427 | | - |
428 | | - |
429 | | - |
430 | | - |
431 | | - |
432 | if (resolved_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& resolved[resolved_len - 1] == '/'TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
433 | resolved[resolved_len - 1] = '\0'; never executed: resolved[resolved_len - 1] = '\0'; | 0 |
434 | return never executed: return (resolved); (resolved);never executed: return (resolved); | 0 |
435 | | - |
436 | err: | - |
437 | if (mem_allocatedTRUE | never evaluated | FALSE | never evaluated |
) | 0 |
438 | free(resolved); never executed: free(resolved); | 0 |
439 | return never executed: return ( ((void *)0) ); (never executed: return ( ((void *)0) ); | 0 |
440 | ((void *)0) never executed: return ( ((void *)0) ); | 0 |
441 | ); never executed: return ( ((void *)0) ); | 0 |
442 | } | - |
| | |