mirror of
https://github.com/sheumann/hush.git
synced 2024-08-15 02:29:00 +00:00
37 lines
631 B
C
37 lines
631 B
C
|
/* 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 (strncmp(cp, "/../"+1, 3) == 0) {
|
||
|
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;
|
||
|
}
|