Fix GH-20076: open_basedir prohibits opening :memory:?cache=shared#20080
Fix GH-20076: open_basedir prohibits opening :memory:?cache=shared#20080ndossche wants to merge 1 commit intophp:PHP-8.3from
Conversation
|
Fails for some reason, marking as draft until I figured it out. |
| return estrdup(filename); | ||
| } | ||
| if (*filename && strcmp(filename, ":memory:")) { | ||
| if (*filename && strncmp(filename, ":memory:", sizeof(":memory:")-1) != 0) { |
There was a problem hiding this comment.
Is this 100% safe and wouldn't be something like :memory:/path processed like regular filepath?
There was a problem hiding this comment.
It seems this is not only theoretical, but also the real reason why the CI is failing - a file (instead of in-memory DB) is created.
There was a problem hiding this comment.
The official condition is in https://github.com/sqlite/sqlite/blob/version-3.50.4/src/btree.c#L2552.
I even wonder what is :memory:?cache=shared, I did not find any testcase for it in Sqlite codebase.
There was a problem hiding this comment.
The "cache" connection parameter lets you specify the "shared key" to connect to in-memory database created in a different process.
Ref: https://www.sqlite.org/inmemorydb.html#sharedmemdb
The value could be anything, on production we're using UUID generated at deploy time.
There was a problem hiding this comment.
The reason why this does not work is in https://www.sqlite.org/sharedcache.html#shared_cache_and_in_memory_databases.
There was a problem hiding this comment.
The interesting point is that it works on Linux (tested multiple times)
PHP Version 8.4.5
Linux 1bb44a69f3cb 4.18.0-553.el8_10.x86_64 #1 SMP Fri May 24 13:05:10 UTC 2024 x86_64
PDO Driver for SQLite 3.x enabled
SQLite Library 3.48.0
No description provided.