Re: [mimetic-users] content-disposition filename parameter
Brought to you by:
tat0o
|
From: 김대성 <ad9...@gm...> - 2015-11-04 04:22:06
|
From 518f4caeac4d0a9e62a7240f00ad7c076e25b31c Mon Sep 17 00:00:00 2001
From: ad960009 <ad9...@gm...>
Date: Mon, 2 Nov 2015 14:42:24 +0900
Subject: [PATCH] [bugfix] Ignore ';' in quoted filename parameter string
Issue: Content-Dispostion: attachment; filename="!@#$%^&_ -=-[]{};',.xlsx"
I get filename "!@#$%^&_ -=-[]{}
---
mimetic/contentdisposition.cxx | 10 ++++++++++
mimetic/contenttype.cxx | 11 +++++++++++
test/t.contentdisposition.cxx | 15 +++++++++++++++
test/t.contentdisposition.h | 1 +
4 files changed, 37 insertions(+)
diff --git a/mimetic/contentdisposition.cxx b/mimetic/contentdisposition.cxx
index 15ace62..3179bcc 100644
--- a/mimetic/contentdisposition.cxx
+++ b/mimetic/contentdisposition.cxx
@@ -85,6 +85,16 @@ void ContentDisposition::set(const string& val)
string sparam;
while(stok.next(sparam))
{
+ size_t quoted_cnt = std::count(sparam.begin(), sparam.end(), '\"');
+ while (quoted_cnt & 0x01)
+ {
+ string nextToken;
+ if (stok.next(nextToken))
+ sparam += ";" + nextToken;
+ else
+ break;
+ quoted_cnt += std::count(nextToken.begin(), nextToken.end(), '\"');
+ }
Param p(sparam);
m_paramList.push_back(p);
}
diff --git a/mimetic/contenttype.cxx b/mimetic/contenttype.cxx
index 81c36c0..45110c6 100644
--- a/mimetic/contenttype.cxx
+++ b/mimetic/contenttype.cxx
@@ -162,6 +162,17 @@ void ContentType::set(const string& val)
stok.setSource(¶ms);
while(stok.next(paramValue))
{
+ size_t quoted_cnt = std::count(sparam.begin(), sparam.end(), '\"');
+ while (quoted_cnt & 0x01)
+ {
+ string nextToken;
+ if (stok.next(nextToken))
+ sparam += ";" + nextToken;
+ else
+ break;
+ quoted_cnt += std::count(nextToken.begin(), nextToken.end(), '\"');
+ }
+
ContentType::Param p(paramValue);
m_paramList.push_back(p);
}
diff --git a/test/t.contentdisposition.cxx b/test/t.contentdisposition.cxx
index 096af99..10e0453 100644
--- a/test/t.contentdisposition.cxx
+++ b/test/t.contentdisposition.cxx
@@ -6,6 +6,21 @@ namespace mimetic
{
using namespace std;
+void contentdisposition::parser2()
+{
+ ContentDisposition* pCd;
+
+ pCd = new ContentDisposition("attachment; filename=\"()<>@,;:\\[]?=.jpeg\";"
+ "modification-date=\"Wed, 12 Feb 1997 16:29:51 -0500\";");
+
+ TEST_ASSERT_EQUALS_P(pCd->type(), "attachment");
+ TEST_ASSERT_EQUALS_P(pCd->param("filename"), "()<>@,;:\\[]?=.jpeg");
+ TEST_ASSERT_EQUALS_P(pCd->param("modification-date"),
+ "Wed, 12 Feb 1997 16:29:51 -0500");
+
+ delete pCd;
+}
+
void contentdisposition::parser1()
{
ContentDisposition* pCd;
diff --git a/test/t.contentdisposition.h b/test/t.contentdisposition.h
index bf7ad65..c953131 100644
--- a/test/t.contentdisposition.h
+++ b/test/t.contentdisposition.h
@@ -11,6 +11,7 @@ struct TEST_CLASS( contentdisposition)
{
void TEST_FUNCTION( parser0 );
void TEST_FUNCTION( parser1 );
+ void TEST_FUNCTION( parser2 );
};
}
--
1.9.1
|