#include "multipart_parser.h"
+#define READ_BLOCK 4096
enum part {
PART_UNKNOWN,
filecopy(void)
{
int len;
- char buf[4096];
+ char buf[READ_BLOCK];
if (!st.filedata)
{
main_upload(int argc, char *argv[])
{
int rem, len;
- char buf[4096];
+ bool done = false;
+ char buf[READ_BLOCK];
multipart_parser *p;
p = init_parser();
while ((len = read(0, buf, sizeof(buf))) > 0)
{
- rem = multipart_parser_execute(p, buf, len);
-
- if (rem < len)
- break;
+ if (!done) {
+ rem = multipart_parser_execute(p, buf, len);
+ done = (rem < len);
+ }
}
multipart_parser_free(p);
- /* read remaining post data */
- while ((len = read(0, buf, sizeof(buf))) > 0);
-
return 0;
}
{
char *fields[] = { "sessionid", NULL, "path", NULL, "filename", NULL, "mimetype", NULL };
unsigned long long size = 0;
- char *p, buf[4096];
+ char *p, buf[READ_BLOCK];
ssize_t len = 0;
struct stat s;
int rfd;
return failure(403, 0, "Requested path is not a regular file or block device");
for (p = fields[5]; p && *p; p++)
- if (!isalnum(*p) && !strchr(" ()<>@,;:[]?.=%", *p))
+ if (!isalnum(*p) && !strchr(" ()<>@,;:[]?.=%-", *p))
return failure(400, 0, "Invalid characters in filename");
for (p = fields[7]; p && *p; p++)
fflush(stdout);
do {
- len = splice(fds[0], NULL, 1, NULL, 4096, SPLICE_F_MORE);
+ len = splice(fds[0], NULL, 1, NULL, READ_BLOCK, SPLICE_F_MORE);
} while (len > 0);
waitpid(pid, &status, 0);