diff --git a/control/HTTPResponse.php b/control/HTTPResponse.php
index 5489a8949..9e7c12190 100644
--- a/control/HTTPResponse.php
+++ b/control/HTTPResponse.php
@@ -234,12 +234,14 @@ class SS_HTTPResponse {
}
if(in_array($this->statusCode, self::$redirect_codes) && headers_sent($file, $line)) {
- $url = $this->headers['Location'];
+ $url = (string)$this->headers['Location'];
+ $urlATT = Convert::raw2htmlatt($url);
+ $urlJS = Convert::raw2js($url);
echo
- "
Redirecting to "
- . "$url... (output started on $file, line $line)
-
- ";
+ "Redirecting to "
+ . "$urlATT... (output started on $file, line $line)
+
+ ";
} else {
$line = $file = null;
if(!headers_sent($file, $line)) {
diff --git a/docs/en/changelogs/3.0.10.md b/docs/en/changelogs/3.0.10.md
new file mode 100644
index 000000000..427b54498
--- /dev/null
+++ b/docs/en/changelogs/3.0.10.md
@@ -0,0 +1,12 @@
+# 3.0.10
+
+## Overview
+
+ * Security: Partially cached content from stage or other reading modes is no longer emitted to live
+
+## Upgrading
+
+ * If relying on partial caching of content between logged in users, be aware that the cache is now automatically
+ segmented based on both the current member ID, and the versioned reading mode. If this is not an appropriate
+ method (such as if the same content is served to logged in users within partial caching) then it is necessary
+ to adjust the config value of `SSViewer::global_key` to something more or less sensitive.
\ No newline at end of file
diff --git a/docs/en/reference/form-field-types.md b/docs/en/reference/form-field-types.md
index 3d45812fc..5aeef002f 100644
--- a/docs/en/reference/form-field-types.md
+++ b/docs/en/reference/form-field-types.md
@@ -28,7 +28,7 @@ This is a highlevel overview of available `[api:FormField]` subclasses. An autom
* `[api:DatetimeField]`: Combined date- and time field.
* `[api:EmailField]`: Text input field with validation for correct email format according to RFC 2822.
* `[api:GroupedDropdownField]`: Grouped dropdown, using