summaryrefslogtreecommitdiffstats
path: root/library/http
diff options
context:
space:
mode:
authordkf <donal.k.fellows@manchester.ac.uk>2009-09-10 21:20:00 (GMT)
committerdkf <donal.k.fellows@manchester.ac.uk>2009-09-10 21:20:00 (GMT)
commit5a6e90c59531d0de0bb1a203987bf1e8972b4ddc (patch)
treeebe61937ea738384d242238013689df1a19bac65 /library/http
parent71c8cdedc9efe9c3ee31c2592cbd4cc63c6472b0 (diff)
downloadtcl-5a6e90c59531d0de0bb1a203987bf1e8972b4ddc.zip
tcl-5a6e90c59531d0de0bb1a203987bf1e8972b4ddc.tar.gz
tcl-5a6e90c59531d0de0bb1a203987bf1e8972b4ddc.tar.bz2
Correct handling of quoted charset names. [Bug 2849860]
Diffstat (limited to 'library/http')
-rw-r--r--library/http/http.tcl12
1 files changed, 9 insertions, 3 deletions
diff --git a/library/http/http.tcl b/library/http/http.tcl
index 654d8b0..18487fb 100644
--- a/library/http/http.tcl
+++ b/library/http/http.tcl
@@ -8,7 +8,7 @@
# See the file "license.terms" for information on usage and redistribution of
# this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# RCS: @(#) $Id: http.tcl,v 1.76 2009/04/19 18:27:59 patthoyts Exp $
+# RCS: @(#) $Id: http.tcl,v 1.77 2009/09/10 21:20:01 dkf Exp $
package require Tcl 8.6
# Keep this in sync with pkgIndex.tcl and with the install directories in
@@ -1030,8 +1030,14 @@ proc http::Event {sock token} {
content-type {
set state(type) [string trim [string tolower $value]]
# grab the optional charset information
- regexp -nocase {charset\s*=\s*(\S+?);?} \
- $state(type) -> state(charset)
+ if {[regexp -nocase \
+ {charset\s*=\s*\"((?:[^""]|\\\")*)\"} \
+ $state(type) -> cs]} {
+ set state(charset) [string map {{\"} \"} $cs]
+ } else {
+ regexp -nocase {charset\s*=\s*(\S+?);?} \
+ $state(type) -> state(charset)
+ }
}
content-length {
set state(totalsize) [string trim $value]