[Bug]: TypeError in ThemingDefaults::getColorPrimary() — preg_match() under PHP 8.4 on unset user primary_color
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 77/100
Direzione di ricerca
Inizia da apps/theming/lib/ThemingDefaults.php, intorno alla riga 196, dove getColorPrimary() legge il primary_color dell’utente e lo passa a preg_match(). Controlla i test correlati a ThemingDefaults e verifica se getColorBackground() gestisce l’input allo stesso modo. Conferma che un colore non impostato ricade sul valore predefinito globale senza errori, quindi esegui i test pertinenti di theming.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
⚠️ This issue respects the following points: ⚠️
- This is a bug, not a question or a configuration/webserver/proxy issue.
- This issue is not already reported on Github OR Nextcloud Community Forum (I've searched it).
- Nextcloud Server is up to date. See Maintenance and Release Schedule for supported versions.
- I agree to follow Nextcloud's Code of Conduct.
Bug description
When accessing /apps/files/ (or any page initializing user capabilities/theming) under PHP 8.4+, Nextcloud crashes with a fatal TypeError (HTTP 500) if the logged-in user does not have a custom primary_color configured.
In apps/theming/lib/ThemingDefaults.php line 196-197:
$userPrimaryColor = $this->userConfig->getValueString($user->getUID(), Application::APP_ID, 'primary_color');
if (preg_match('/^\#([0-9a-f]{3}|[0-9a-f]{6})$/i', $userPrimaryColor)) {
return $userPrimaryColor;
}
Under PHP 8.4+, preg_match enforces strict types and no longer tolerates non-string types or certain uninitialized proxy representations from getValueString(), throwing:
TypeError: preg_match(): Argument #2 ($subject) must be of type string, string given at /var/www/html/apps/theming/lib/ThemingDefaults.php#197
Steps to reproduce
- Run Nextcloud Server 34.x on PHP 8.4 (e.g. official
nextcloud:34.0.5Apache Docker image). - Log in as an admin or normal user who has never set a custom theming primary color.
- Access
/apps/files/. - The page fails with HTTP 500 Internal Server Error.
Expected behavior
Nextcloud should fall back gracefully to the global system primary color ($defaultColor) without throwing a fatal TypeError.
Nextcloud Server version
34
Operating system
Debian/Ubuntu
PHP engine version
PHP 8.4
Web server
Apache (supported)
Database engine version
PostgreSQL
Is this bug present after an update or on a fresh install?
Updated from a MINOR version (ex. 32.0.1 to 32.0.2)
Are you using the Nextcloud Server Encryption module?
Encryption is Disabled
What user-backends are you using?
- Default user-backend (database)
Nextcloud Logs
{
"reqId": "n6FAHxGdzIB0H4OyzO55",
"level": 3,
"time": "2026-11-04T03:10:52+00:00",
"remoteAddr": "x.x.x.x",
"user": "admin",
"app": "index",
"method": "GET",
"url": "/apps/files/",
"message": "preg_match(): Argument #2 ($subject) must be of type string, string given",
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/27.2 Safari/605.1.15",
"version": "34.0.5.1",
"exception": {
"Exception": "TypeError",
"Message": "preg_match(): Argument #2 ($subject) must be of type string, string given",
"Code": 0,
"Trace": [
{
"function": "preg_match",
"file": "/var/www/html/apps/theming/lib/ThemingDefaults.php",
"line": 197,
"args": ["/^\\#([0-9a-f]{3}|[0-9a-f]{6})$/i", ""]
},
{
"file": "/var/www/html/apps/theming/lib/Capabilities.php",
"line": 88,
"function": "getColorPrimary",
"class": "OCA\\Theming\\ThemingDefaults",
"type": "->"
},
{
"file": "/var/www/html/lib/private/CapabilitiesManager.php",
"line": 60,
"function": "getCapabilities",
"class": "OCA\\Theming\\Capabilities",
"type": "->"
},
{
"file": "/var/www/html/lib/private/Template/JSConfigHelper.php",
"line": 141,
"function": "getCapabilities",
"class": "OC\\CapabilitiesManager",
"type": "->"
},
{
"file": "/var/www/html/lib/private/TemplateLayout.php",
"line": 251,
"function": "getConfig",
"class": "OC\\Template\\JSConfigHelper",
"type": "->"
},
{
"file": "/var/www/html/apps/files/lib/Controller/ViewController.php",
"line": 202,
"function": "dispatchTyped",
"class": "OC\\EventDispatcher\\EventDispatcher",
"type": "->"
}
],
"File": "/var/www/html/apps/theming/lib/ThemingDefaults.php",
"Line": 197
}
}
Suggested Fix
Add defensive type checks and explicit casting in apps/theming/lib/ThemingDefaults.php:
--- a/apps/theming/lib/ThemingDefaults.php
+++ b/apps/theming/lib/ThemingDefaults.php
@@ -194,7 +194,7 @@ class ThemingDefaults extends \OC_Defaults {
// user-defined primary color
if (!empty($user)) {
$userPrimaryColor = $this->userConfig->getValueString($user->getUID(), Application::APP_ID, 'primary_color');
- if (preg_match('/^\#([0-9a-f]{3}|[0-9a-f]{6})$/i', $userPrimaryColor)) {
+ if (!empty($userPrimaryColor) && is_string($userPrimaryColor) && preg_match('/^\#([0-9a-f]{3}|[0-9a-f]{6})$/i', (string)$userPrimaryColor)) {
return $userPrimaryColor;
}
}
Similarly for getColorBackground() if applicable.
- Lingua principale
- PHP
- Stelle
- 37.4k
- Fork
- 5.3k
- Merge medio
- 2g 7h
- PR unite (30g)
- 744
Preparare l'ambiente
Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di nextcloud/server
-
[Bug]: Detection::detectString() / detectContent() never use finfo – missing use finfo; (regression from #54077)Forse già presa @lazerg l’ha presa 1 giorno fa. Aperta0. Needs triage 35-feedback bug
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 62/100
I maintainer di solito rispondono entro 1 giorno
-
[Bug]: DAV Forbidden/InvalidPath responses break on "&" in the message (DOMDocument::createElementNS(): unterminated entity reference)Forse già presa @th-joerger l’ha presa 3 giorni fa. Aperta0. Needs triage 35-feedback bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
I maintainer di solito rispondono entro 1 giorno
-
[Bug]: Files folder-tree API eagerly lists the children of every subfolder at the last requested depth, then discards them (N extra directory listings per request)Forse già presa @lazerg l’ha presa 5 giorni fa. Aperta0. Needs triage 34-feedback bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 77/100
nextcloud/server#65904 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
[Bug]: Contradictory notifications when cancelling welcome email confirmationForse già presa @Jashan32 l’ha presa 6 giorni fa. Aperta0. Needs triage 36-feedback bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 67/100
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di nextcloud/server
Issue simili
-
Author mapping step: "create new user" and "assign to existing user" fields have no spacing between themForse già presa @umeshnevase l’ha presa oggi. Aperta
Difficoltà 1/5 1-3 ore Idoneità per principianti 78/100
WordPress/wordpress-importer#275 ·
-
security/openvpn-legacy: read-only user can stop a running VPNForse già presa @besendorf l’ha presa oggi. Apertaincomplete
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
opnsense/plugins#5887 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
jira-created
Difficoltà 2/5 1-3 ore Idoneità per principianti 77/100
-
No Code Attached Yet
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 90/100
joomla/joomla-cms#48786 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
Icinga/icingaweb2-module-director#3188 ·
I maintainer di solito rispondono entro 4 giorni