1 /* vi: set sw=4 ts=4: */
2 /*
3  * Licensed under GPLv2 or later, see file LICENSE in this source tree.
4  */
5 #include "libbb.h"
6 #include "bb_archive.h"
7 
strip_unsafe_prefix(const char * str)8 const char* FAST_FUNC strip_unsafe_prefix(const char *str)
9 {
10 	const char *cp = str;
11 	while (1) {
12 		char *cp2;
13 		if (*cp == '/') {
14 			cp++;
15 			continue;
16 		}
17 		if (is_prefixed_with(cp, "/../"+1)) {
18 			cp += 3;
19 			continue;
20 		}
21 		cp2 = strstr(cp, "/../");
22 		if (!cp2)
23 			break;
24 		cp = cp2 + 4;
25 	}
26 	if (cp != str) {
27 		static smallint warned = 0;
28 		if (!warned) {
29 			warned = 1;
30 			bb_error_msg("removing leading '%.*s' from member names",
31 				(int)(cp - str), str);
32 		}
33 	}
34 	return cp;
35 }
36