uri: added function uri_safe_local()
This commit is contained in:
parent
554b2b0ed9
commit
af964e8929
30
src/uri.c
30
src/uri.c
@ -22,6 +22,7 @@
|
||||
|
||||
#include <glib.h>
|
||||
|
||||
#include <assert.h>
|
||||
#include <string.h>
|
||||
|
||||
bool uri_has_scheme(const char *uri)
|
||||
@ -45,6 +46,35 @@ uri_get_suffix(const char *uri)
|
||||
return suffix;
|
||||
}
|
||||
|
||||
static const char *
|
||||
verify_uri_segment(const char *p)
|
||||
{
|
||||
const char *q;
|
||||
|
||||
if (*p == 0 || *p == '/' || *p == '.')
|
||||
return NULL;
|
||||
|
||||
q = strchr(p + 1, '/');
|
||||
return q != NULL ? q : "";
|
||||
}
|
||||
|
||||
bool
|
||||
uri_safe_local(const char *uri)
|
||||
{
|
||||
while (true) {
|
||||
uri = verify_uri_segment(uri);
|
||||
if (uri == NULL)
|
||||
return false;
|
||||
|
||||
if (*uri == 0)
|
||||
return true;
|
||||
|
||||
assert(*uri == '/');
|
||||
|
||||
++uri;
|
||||
}
|
||||
}
|
||||
|
||||
char *
|
||||
uri_remove_auth(const char *uri)
|
||||
{
|
||||
|
12
src/uri.h
12
src/uri.h
@ -35,6 +35,18 @@ G_GNUC_PURE
|
||||
const char *
|
||||
uri_get_suffix(const char *uri);
|
||||
|
||||
/**
|
||||
* Returns true if this is a safe "local" URI:
|
||||
*
|
||||
* - non-empty
|
||||
* - does not begin or end with a slash
|
||||
* - no double slashes
|
||||
* - no path component begins with a dot
|
||||
*/
|
||||
G_GNUC_PURE
|
||||
bool
|
||||
uri_safe_local(const char *uri);
|
||||
|
||||
/**
|
||||
* Removes HTTP username and password from the URI. This may be
|
||||
* useful for displaying an URI without disclosing secrets. Returns
|
||||
|
Loading…
Reference in New Issue
Block a user