Change filename sanitization

This commit is contained in:
dogeystamp 2021-08-04 16:46:48 -04:00
parent c04c8c5b8a
commit e48958d9ff
No known key found for this signature in database
GPG Key ID: 4B11A996ADE99001
2 changed files with 21 additions and 13 deletions

18
README
View File

@ -1,6 +1,6 @@
MinRSS
======
MinRSS (minimal RSS) is an RSS feed reader inspired by suckless.org's
MinRSS (minimal RSS) is an RSS feed reader for Linux inspired by suckless.org's
IRC clients ii and sic. Instead of presenting RSS articles as entries
in a menu, it saves them as files in folders.
@ -12,12 +12,6 @@ rss
|--post
`--other_post
Compatibility
-------------
This program is designed to work on Linux, but it should be possible
to make it run on other operating systems. If you can do that
successfully, please contact me about it.
Requirements
------------
You need libcurl and libxml2 to compile MinRSS.
@ -39,3 +33,13 @@ Using MinRSS
Make a directory to store your RSS feeds, then cd into it. Then, enter
the minrss command to download the RSS feeds. Your feeds will be
available as folders in your current working directory.
Compatibility
-------------
This program is designed to work on Linux, but it should be possible
to make it run on other operating systems. If you can do that
successfully, please contact me about it.
Note that if you use MinRSS on different systems, it will be possible for
attackers to write malicious filenames, so you should rewrite sanitize()
accordingly.

16
util.c
View File

@ -54,17 +54,21 @@ san(char *str, int rep)
unsigned long long int len = strlen(str);
unsigned long long int offset = 0;
len = len > 255 ? 255 : len;
char *dup = ecalloc(len + 1, sizeof(char));
strcpy(dup, str);
for (unsigned long long int i = 0; i < len; i++) {
if ((dup[i] >= 'a' && dup[i] <= 'z') ||
(dup[i] >= 'A' && dup[i] <= 'Z') ||
(dup[i] >= '0' && dup[i] <= '9') ||
dup[i] == '-' || dup[i] == '_')
char c = dup[i];
if ((c >= 'a' && c <= 'z') ||
(c >= 'A' && c <= 'Z') ||
(c >= '0' && c <= '9') ||
(c == '.' && i - offset != 0) ||
c == '-' || c == '_' ||
c == ' ')
dup[i - offset] = dup[i];
else if (dup[i] == ' ')
dup[i - offset] = '_';
else
offset++;
}