Could you show us the input to MIME.Message in this case? If I test with a trivial message, I get the expected result:
Pike v7.4 release 13 running Hilfe v3.5 (Incremental Pike Frontend)
MIME.Message("Content-Disposition: form-data; name="1"\n\n")->disp_params;
(1) Result: ([ /* 1 element */ "name":"1" ])
/ Marcus Comstedt (ACROSS) (Hail Ilpalazzo!)
Previous text:
2003-02-01 18:27: Subject: MIME.Message problem with 7.4
Hi list,
There is a problem with Pike 7.4 and disp_params variable in MIME.Message. The following code from Caudium doesn't work with Pike 7.4. I tried to copy 7.2's MIME.pmod to Pike 7.4 MIME/module.pmod and then it was working.
The difference between two MIME version is that when it works I have part->disp_params=([ /* 1 element */ "name":"1" ]), part->getdata="Upload to attachments", part->headers=([ /* 1 element */ "content-disposition":"form-data; name="1"" ])
and when it doesn't work, this mapping is empty.
FYI, Here is the code (from protocols/http.pike and protocols/http2.pike):
case "multipart/form-data": // perror("Multipart/form-data post detected\n"); object messg = MIME.Message(data, request_headers); write("data=%O, request_headers=%O\n", data, request_headers); foreach(messg->body_parts||({}), object part) { write("part->disp_params=%O, part->getdata=%O, part->headers=%O\n", part->disp_params, part->getdata(), part->headers); if(part->disp_params->filename) { variables[part->disp_params->name]=part->getdata(); string fname=part->disp_params->filename; if( part->headers["content-disposition"] ) { array fntmp=part->headers["content-disposition"]/";"; if( sizeof(fntmp) >= 3 && search(fntmp[2],"=") != -1 ) { fname=((fntmp[2]/"=")[1]); fname=fname[1..(sizeof(fname)-2)]; }
} variables[part->disp_params->name+".filename"]=fname; if(!misc->files) misc->files = ({ part->disp_params->name }); else misc->files += ({ part->disp_params->name }); } else { if(variables[part->disp_params->name]) variables[part->disp_params->name] += "\0" + part->getdata(); else variables[part->disp_params->name] = part->getdata(); } } break;
Thanks for your help.
-- David Gourdelier
/ Brevbäraren