Fix: store route_hashtable keys on the heap

This commit is contained in:
kamkow1
2025-06-22 15:54:10 +02:00
parent 68dcc80d1c
commit e230bb01c0

13
main.c
View File

@ -133,7 +133,7 @@ void route_hashtable_put_blogs(Baked_Resource *resource, void *udata)
{
if ((strlen(resource->key) >= strlen("blog-"))
&& strncmp(resource->key, "blog-", strlen("blog-")) == 0) {
char path[MG_PATH_MAX];
char *path = malloc(MG_PATH_MAX);
snprintf(path, MG_PATH_MAX, "/%s", resource->key);
shput(route_hashtable.value, path, &route_generic_blog);
route_hashtable.value[shgeti(route_hashtable.value, path)].context_data = (void *)resource;
@ -144,11 +144,11 @@ void init_route_hashtable(void)
{
lockx(&route_hashtable);
shdefault(route_hashtable.value, &route_page_not_found);
shput(route_hashtable.value, "/", &route_home);
shput(route_hashtable.value, "/page-missing", &route_page_not_found);
shput(route_hashtable.value, "/blog", &route_blog);
shput(route_hashtable.value, clonestr("/"), &route_home);
shput(route_hashtable.value, clonestr("/page-missing"), &route_page_not_found);
shput(route_hashtable.value, clonestr("/blog"), &route_blog);
#if MY_DEBUG
shput(route_hashtable.value, "/build-id", &route_build_id);
shput(route_hashtable.value, clonestr("/build-id"), &route_build_id);
#endif
baked_resource_each(&route_hashtable_put_blogs, nil);
@ -158,6 +158,9 @@ void init_route_hashtable(void)
void free_route_hashtable(void)
{
lockx(&route_hashtable);
for (size_t i = 0; i < shlen(route_hashtable.value); i++) {
free(route_hashtable.value[i].key);
}
shfree(route_hashtable.value);
unlockx(&route_hashtable);
}