mirror of
https://github.com/tbamud/tbamud.git
synced 2026-04-30 04:41:51 +02:00
Compare commits
2 Commits
copilot/fi
...
copilot/fi
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bf9105aa4a | ||
|
|
fd81fadaed |
29
src/genolc.c
29
src/genolc.c
@@ -277,10 +277,7 @@ int sprintascii(char *out, bitvector_t bits)
|
||||
return j;
|
||||
}
|
||||
|
||||
/* converts illegal filename chars into appropriate equivalents.
|
||||
* Uses an allowlist: alphanumerics, underscore, hyphen, and dot are kept;
|
||||
* spaces are converted to underscores; all other characters (including shell
|
||||
* metacharacters such as ; | & ` $ > < \n) are silently dropped. */
|
||||
/* converts illegal filename chars into appropriate equivalents */
|
||||
static void fix_filename(const char *str, char *outbuf, size_t maxlen)
|
||||
{
|
||||
const char *in = str;
|
||||
@@ -288,17 +285,21 @@ static void fix_filename(const char *str, char *outbuf, size_t maxlen)
|
||||
int count = 0;
|
||||
|
||||
while (*in) {
|
||||
if (isalnum((unsigned char)*in) || *in == '_' || *in == '-' || *in == '.') {
|
||||
/* Safe characters kept as-is */
|
||||
*out++ = *in;
|
||||
if (++count == maxlen - 1) break;
|
||||
} else if (*in == ' ') {
|
||||
/* Spaces become underscores */
|
||||
*out++ = '_';
|
||||
if (++count == maxlen - 1) break;
|
||||
}
|
||||
/* All other characters, including shell metacharacters, are dropped */
|
||||
switch(*in) {
|
||||
case ' ': *out = '_'; out++; break;
|
||||
case '(': *out = '{'; out++; break;
|
||||
case ')': *out = '}'; out++; break;
|
||||
|
||||
/* skip the following */
|
||||
case '\'': break;
|
||||
case '"': break;
|
||||
|
||||
/* Legal character */
|
||||
default: *out = *in; out++;break;
|
||||
}
|
||||
in++;
|
||||
count++;
|
||||
if (count == maxlen - 1) break;
|
||||
}
|
||||
*out = '\0';
|
||||
}
|
||||
|
||||
@@ -405,7 +405,7 @@ int load_char(const char *name, struct char_data *ch)
|
||||
|
||||
case 'P':
|
||||
if (!strcmp(tag, "Page")) GET_PAGE_LENGTH(ch) = atoi(line);
|
||||
else if (!strcmp(tag, "Pass")) strcpy(GET_PASSWD(ch), line);
|
||||
else if (!strcmp(tag, "Pass")) { strncpy(GET_PASSWD(ch), line, MAX_PWD_LENGTH); GET_PASSWD(ch)[MAX_PWD_LENGTH] = '\0'; }
|
||||
else if (!strcmp(tag, "Plyd")) ch->player.time.played = atoi(line);
|
||||
else if (!strcmp(tag, "PfIn")) POOFIN(ch) = strdup(line);
|
||||
else if (!strcmp(tag, "PfOt")) POOFOUT(ch) = strdup(line);
|
||||
|
||||
Reference in New Issue
Block a user