Remove "?" or "#" starting suffixes from path
These suffixes may break loading the correct html template.
This commit is contained in:
parent
0196588f51
commit
42d97e03b3
2 changed files with 33 additions and 1 deletions
28
src/http.c
28
src/http.c
|
@ -116,10 +116,17 @@ char *c_simple_http_request_response(
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t generated_size = 0;
|
size_t generated_size = 0;
|
||||||
|
char *stripped_path = c_simple_http_strip_path(
|
||||||
|
request_path, request_path_idx);
|
||||||
char *generated_buf = c_simple_http_path_to_generated(
|
char *generated_buf = c_simple_http_path_to_generated(
|
||||||
request_path,
|
stripped_path ? stripped_path : request_path,
|
||||||
templates,
|
templates,
|
||||||
&generated_size);
|
&generated_size);
|
||||||
|
|
||||||
|
if (stripped_path) {
|
||||||
|
free(stripped_path);
|
||||||
|
}
|
||||||
|
|
||||||
if (!generated_buf || generated_size == 0) {
|
if (!generated_buf || generated_size == 0) {
|
||||||
fprintf(stderr, "ERROR Unable to generate response html for path \"%s\"!\n",
|
fprintf(stderr, "ERROR Unable to generate response html for path \"%s\"!\n",
|
||||||
request_path);
|
request_path);
|
||||||
|
@ -132,4 +139,23 @@ char *c_simple_http_request_response(
|
||||||
return generated_buf;
|
return generated_buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char *c_simple_http_strip_path(const char *path, size_t path_size) {
|
||||||
|
size_t idx = 0;
|
||||||
|
for (; idx < path_size && path[idx] != 0; ++idx) {
|
||||||
|
if (path[idx] == '?' || path[idx] == '#') {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (idx >= path_size || path[idx] == 0) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *stripped_path = malloc(idx + 1);
|
||||||
|
memcpy(stripped_path, path, idx);
|
||||||
|
stripped_path[idx] = 0;
|
||||||
|
|
||||||
|
return stripped_path;
|
||||||
|
}
|
||||||
|
|
||||||
// vim: ts=2 sts=2 sw=2
|
// vim: ts=2 sts=2 sw=2
|
||||||
|
|
|
@ -37,6 +37,12 @@ char *c_simple_http_request_response(
|
||||||
size_t *out_size
|
size_t *out_size
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/// Takes a PATH string and returns a "bare" path.
|
||||||
|
/// This will simply omit the first instance of "?" or "#" and the rest of the
|
||||||
|
/// string.
|
||||||
|
/// Must be free'd if returns non-NULL.
|
||||||
|
char *c_simple_http_strip_path(const char *path, size_t path_size);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// vim: ts=2 sts=2 sw=2
|
// vim: ts=2 sts=2 sw=2
|
||||||
|
|
Loading…
Reference in a new issue