/* vi: set sw=4 ts=4: */ | |
/* | |
* Licensed under GPLv2 or later, see file LICENSE in this source tree. | |
*/ | |
#include "libbb.h" | |
#include "bb_archive.h" | |
const char* FAST_FUNC strip_unsafe_prefix(const char *str) | |
{ | |
const char *cp = str; | |
while (1) { | |
char *cp2; | |
if (*cp == '/') { | |
cp++; | |
continue; | |
} | |
if (is_prefixed_with(cp, "/../"+1)) { | |
cp += 3; | |
continue; | |
} | |
cp2 = strstr(cp, "/../"); | |
if (!cp2) | |
break; | |
cp = cp2 + 4; | |
} | |
if (cp != str) { | |
static smallint warned = 0; | |
if (!warned) { | |
warned = 1; | |
bb_error_msg("removing leading '%.*s' from member names", | |
(int)(cp - str), str); | |
} | |
} | |
return cp; | |
} |