[Bug]: TypeError in ThemingDefaults::getColorPrimary() — preg_match() under PHP 8.4 on unset user primary_color
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 77/100
Línea de trabajo
Empieza en apps/theming/lib/ThemingDefaults.php, alrededor de la línea 196, donde getColorPrimary() lee el primary_color del usuario y lo pasa a preg_match(). Comprueba las pruebas relacionadas con ThemingDefaults y si getColorBackground() maneja la entrada de la misma manera. Confirma que un color no definido recurre al valor predeterminado global sin producir un error y luego ejecuta las pruebas relevantes de theming.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
⚠️ 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.
- Lenguaje dominante
- PHP
- Estrellas
- 37.4k
- Forks
- 5.3k
- Merge medio
- 2 d 7 h
- PR fusionados (30 d)
- 744
Preparar el entorno
Inicia el contenedor de desarrollo del proyecto en tu navegador, con tu propia cuenta de GitHub.
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de nextcloud/server
-
[Bug]: DAV Forbidden/InvalidPath responses break on "&" in the message (DOMDocument::createElementNS(): unterminated entity reference)Posiblemente ocupada @th-joerger la tomó hace 4 días. Abierto0. Needs triage 35-feedback bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
Los mantenedores suelen responder en 1 día
-
[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)Posiblemente ocupada @lazerg la tomó hace 6 días. Abierto0. Needs triage 34-feedback bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 77/100
nextcloud/server#65904 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
[Bug]: Contradictory notifications when cancelling welcome email confirmationPosiblemente ocupada @Jashan32 la tomó hace 7 días. Abierto0. Needs triage 36-feedback bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 67/100
Los mantenedores suelen responder en 1 día
-
`OutOfOfficeEventDispatcherJob` is not cleaned up correctlyPosiblemente ocupada @MishowHD la tomó hace 7 días. Abierto1. to develop bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 1 día
Todos los issues de nextcloud/server
Issues similares
-
good first issue priority:low type:docs
Dificultad 1/5 1-3 horas Aptitud para principiantes 95/100
crazy-goat/rabbit-stream#969 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
opensourcepos/opensourcepos#4801 ·
Los mantenedores suelen responder en 1 día
-
backend docs
Dificultad 2/5 1-3 horas Aptitud para principiantes 67/100
Open-Locker/Open-Locker#368 ·
Los mantenedores suelen responder en 1 día
-
enhancement priority Sales
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
novalo-dev/Prestashop-MCP-Server#190 ·
Los mantenedores suelen responder en 1 día
-
sync-en
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 1 día