Comments (4)
I cannot test for a bug without example code that introduces the issue. However...
This sounds like a possible double free issue, where you are freeing a FIOBJ object more than once.
This will cause the custom allocator to mark used memory as available and possibly to allocate the same memory to a new variable (causing 2 variables to use the same memory).
Note that all the FIOBJ
objects in the HTTP handle are owned by the handle. If you place them into an array or a Hash, you will need to call fiobj_dup
in order to acquire another reference.
P.S.
Why not setup a public_folder
in the http_listen
settings and place that file in the public folder?
Alternatively, consider using the http_sendfile2
function to send a file from a public folder. If the function fails you can still handle the HTTP request manually (this is what the public_folder
setting does)...
Since the code already exists (including protection against tree transversal), it could make life easier for you.
from facil.io.
I actually use http_sendfile2
for this. :-)
I free all FIOBJs at the end of the on_http_request
method, after using any of them. No arrays, no hashes. Are there any other methods that modify them internally?
from facil.io.
I free all
FIOBJ
s at the end of the on_http_request method
I hope you meant to write that you free all the temporary FIOBJ
objects that you yourself created.
Remember that all the FIOBJ
objects that come from the HTTP handle are managed by the facil.io framework and should NOT be freed.
For example:
h->path
must NOT be freed.- Any header value set using
http_set_header
should NOT be freed, since you moved the memory ownership to the HTTP handle... however: header names, unless cached, should be freed as their ownership remains with you. - Any
FIOBJ
header / cookie value collected from theh->headers
orh->cookies
hash is still owned by the hash and must NOT be freed.
Unless I could reproduce the issue or see some example code, I won't be able to debug the issue... but I hope this helps.
Happy New Year!
from facil.io.
I hope you meant to write that you free all the temporary
FIOBJ
objects that you yourself created.
Yes, sure. Sorry for the confusion. :-)
I think I found the problem. It was, not surprisingly, in my own code. For those having similar issues later, I even quoted the bad part in my initial comment:
char* path_str_clean = path_str.data;
Modifying facil.io-supplied strings from a copy created this way will most likely break somewhere in the code. Fix:
char* path_str_clean = strdup(path_str.data);
I should probably stop writing issues here. Most of them show a lack of basic understanding on my side. 🙄
Happy new year to you as well! I promise: I'll do better in the future.
from facil.io.
Related Issues (20)
- A route handler for Facil.io
- Build facil.io into an DLL? HOT 4
- Compile on Apple Silicon M1 HOT 3
- In the example there is facil_run but I don't see this function? HOT 2
- Do you need a main() function if you are just building the shared object library? HOT 1
- fiobj_mustache.c: No folder argument HOT 1
- Passing variables to Mustache does not seem to work HOT 4
- Support for redis UNIX sockets HOT 1
- How to install this framework?
- crashed on FIOBJ_TYPE_IS(fiobj_null(), FIOBJ_T_NUMBER) HOT 2
- C++ compilation support? HOT 2
- Facil and linux epoll HOT 2
- How to receive an img file? HOT 1
- make breaking on macos m1 HOT 1
- compiling facil to shared library to be called from julia HOT 16
- trying to build native binaries for julia HOT 4
- Get form parameter
- Unlimited threads in facil.io - 0.7.x HTTP / WebSockets Server HOT 1
- OpenSSL Not Detected HOT 4
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from facil.io.