inetcomm: Unquote parameter values.
This commit is contained in:
parent
e446351d4c
commit
979a43e49d
|
@ -268,6 +268,39 @@ static void unfold_header(char *header, int len)
|
||||||
*(start - 1) = '\0';
|
*(start - 1) = '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char *unquote_string(const char *str)
|
||||||
|
{
|
||||||
|
int quoted = 0;
|
||||||
|
char *ret, *cp;
|
||||||
|
|
||||||
|
while(*str == ' ' || *str == '\t') str++;
|
||||||
|
|
||||||
|
if(*str == '"')
|
||||||
|
{
|
||||||
|
quoted = 1;
|
||||||
|
str++;
|
||||||
|
}
|
||||||
|
ret = strdupA(str);
|
||||||
|
for(cp = ret; *cp; cp++)
|
||||||
|
{
|
||||||
|
if(*cp == '\\')
|
||||||
|
memmove(cp, cp + 1, strlen(cp + 1) + 1);
|
||||||
|
else if(*cp == '"')
|
||||||
|
{
|
||||||
|
if(!quoted)
|
||||||
|
{
|
||||||
|
WARN("quote in unquoted string\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*cp = '\0';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static void add_param(header_t *header, const char *p)
|
static void add_param(header_t *header, const char *p)
|
||||||
{
|
{
|
||||||
const char *key = p, *value, *cp = p;
|
const char *key = p, *value, *cp = p;
|
||||||
|
@ -293,7 +326,7 @@ static void add_param(header_t *header, const char *p)
|
||||||
|
|
||||||
param = HeapAlloc(GetProcessHeap(), 0, sizeof(*param));
|
param = HeapAlloc(GetProcessHeap(), 0, sizeof(*param));
|
||||||
param->name = name;
|
param->name = name;
|
||||||
param->value = strdupA(value);
|
param->value = unquote_string(value);
|
||||||
list_add_tail(&header->params, ¶m->entry);
|
list_add_tail(&header->params, ¶m->entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -36,7 +36,8 @@ static char msg1[] =
|
||||||
"MIME-Version: 1.0\r\n"
|
"MIME-Version: 1.0\r\n"
|
||||||
"Content-Type: multipart/mixed;\r\n"
|
"Content-Type: multipart/mixed;\r\n"
|
||||||
" boundary=\"------------1.5.0.6\";\r\n"
|
" boundary=\"------------1.5.0.6\";\r\n"
|
||||||
" stuff=\"du;nno\"\r\n"
|
" stuff=\"du;nno\";\r\n"
|
||||||
|
" morestuff=\"so\\\\me\\\"thing\\\"\"\r\n"
|
||||||
"foo: bar\r\n"
|
"foo: bar\r\n"
|
||||||
"From: Huw Davies <huw@codeweavers.com>\r\n"
|
"From: Huw Davies <huw@codeweavers.com>\r\n"
|
||||||
"From: Me <xxx@codeweavers.com>\r\n"
|
"From: Me <xxx@codeweavers.com>\r\n"
|
||||||
|
@ -90,7 +91,7 @@ static void test_CreateBody(void)
|
||||||
LARGE_INTEGER off;
|
LARGE_INTEGER off;
|
||||||
ULARGE_INTEGER pos;
|
ULARGE_INTEGER pos;
|
||||||
ENCODINGTYPE enc;
|
ENCODINGTYPE enc;
|
||||||
ULONG count;
|
ULONG count, found_param, i;
|
||||||
MIMEPARAMINFO *param_info;
|
MIMEPARAMINFO *param_info;
|
||||||
IMimeAllocator *alloc;
|
IMimeAllocator *alloc;
|
||||||
|
|
||||||
|
@ -119,7 +120,7 @@ static void test_CreateBody(void)
|
||||||
ok(hr == S_OK, "ret %08x\n", hr);
|
ok(hr == S_OK, "ret %08x\n", hr);
|
||||||
off.QuadPart = 0;
|
off.QuadPart = 0;
|
||||||
IStream_Seek(in, off, STREAM_SEEK_CUR, &pos);
|
IStream_Seek(in, off, STREAM_SEEK_CUR, &pos);
|
||||||
ok(pos.u.LowPart == 328, "pos %u\n", pos.u.LowPart);
|
ok(pos.u.LowPart == 359, "pos %u\n", pos.u.LowPart);
|
||||||
|
|
||||||
hr = IMimeBody_IsContentType(body, "multipart", "mixed");
|
hr = IMimeBody_IsContentType(body, "multipart", "mixed");
|
||||||
ok(hr == S_OK, "ret %08x\n", hr);
|
ok(hr == S_OK, "ret %08x\n", hr);
|
||||||
|
@ -153,9 +154,27 @@ static void test_CreateBody(void)
|
||||||
hr = IMimeBody_GetParameters(body, "Content-Type", &count, ¶m_info);
|
hr = IMimeBody_GetParameters(body, "Content-Type", &count, ¶m_info);
|
||||||
ok(hr == S_OK, "ret %08x\n", hr);
|
ok(hr == S_OK, "ret %08x\n", hr);
|
||||||
todo_wine /* native adds a charset parameter */
|
todo_wine /* native adds a charset parameter */
|
||||||
ok(count == 3, "got %d\n", count);
|
ok(count == 4, "got %d\n", count);
|
||||||
ok(param_info != NULL, "got %p\n", param_info);
|
ok(param_info != NULL, "got %p\n", param_info);
|
||||||
|
|
||||||
|
found_param = 0;
|
||||||
|
for(i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
if(!strcmp(param_info[i].pszName, "morestuff"))
|
||||||
|
{
|
||||||
|
found_param++;
|
||||||
|
ok(!strcmp(param_info[i].pszData, "so\\me\"thing\""),
|
||||||
|
"got %s\n", param_info[i].pszData);
|
||||||
|
}
|
||||||
|
else if(!strcmp(param_info[i].pszName, "stuff"))
|
||||||
|
{
|
||||||
|
found_param++;
|
||||||
|
ok(!strcmp(param_info[i].pszData, "du;nno"),
|
||||||
|
"got %s\n", param_info[i].pszData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ok(found_param == 2, "matched %d params\n", found_param);
|
||||||
|
|
||||||
hr = IMimeAllocator_FreeParamInfoArray(alloc, count, param_info, TRUE);
|
hr = IMimeAllocator_FreeParamInfoArray(alloc, count, param_info, TRUE);
|
||||||
ok(hr == S_OK, "ret %08x\n", hr);
|
ok(hr == S_OK, "ret %08x\n", hr);
|
||||||
IMimeAllocator_Release(alloc);
|
IMimeAllocator_Release(alloc);
|
||||||
|
|
Loading…
Reference in New Issue