diff --git a/administrator/manifests/files/joomla.xml b/administrator/manifests/files/joomla.xml
index 16a7a99410033..62e9e58b0dcb4 100644
--- a/administrator/manifests/files/joomla.xml
+++ b/administrator/manifests/files/joomla.xml
@@ -6,7 +6,7 @@
www.joomla.org
(C) 2019 Open Source Matters, Inc.
GNU General Public License version 2 or later; see LICENSE.txt
- 4.4.1-rc2
+ 4.4.1
2023-11
FILES_JOOMLA_XML_DESCRIPTION
diff --git a/libraries/src/Language/LanguageHelper.php b/libraries/src/Language/LanguageHelper.php
index 8dba582a12ab2..75e8157d250b4 100644
--- a/libraries/src/Language/LanguageHelper.php
+++ b/libraries/src/Language/LanguageHelper.php
@@ -420,11 +420,14 @@ public static function parseIniFile($fileName, $debug = false)
if (!\function_exists('parse_ini_file') || $isParseIniFileDisabled) {
$contents = file_get_contents($fileName);
- $strings = @parse_ini_string($contents);
+ $strings = @parse_ini_string($contents, false, INI_SCANNER_RAW);
} else {
- $strings = @parse_ini_file($fileName);
+ $strings = @parse_ini_file($fileName, false, INI_SCANNER_RAW);
}
+ // Ini files are processed in the "RAW" mode of parse_ini_string, leaving escaped quotes untouched - lets postprocess them
+ $strings = str_replace('\"', '"', $strings);
+
// Restore error tracking to what it was before.
if ($debug === true) {
ini_set('track_errors', $trackErrors);
diff --git a/libraries/src/Version.php b/libraries/src/Version.php
index 8dc84e356f84a..86afe408750c3 100644
--- a/libraries/src/Version.php
+++ b/libraries/src/Version.php
@@ -66,7 +66,7 @@ final class Version
* @var string
* @since 3.8.0
*/
- public const EXTRA_VERSION = 'rc2';
+ public const EXTRA_VERSION = '';
/**
* Development status.
@@ -74,7 +74,7 @@ final class Version
* @var string
* @since 3.5
*/
- public const DEV_STATUS = 'Release Candidate';
+ public const DEV_STATUS = 'Stable';
/**
* Code name.