- hr->method = (char *) odr_malloc(o, i+1);
- memcpy (hr->method, o->buf, i);
- hr->method[i] = '\0';
- /* path */
- po = i+1;
- for (i = po; o->buf[i] != ' '; i++)
- if (i >= o->size-5)
- {
- o->error = OHTTP;
- return 0;
- }
- hr->path = (char *) odr_malloc(o, i - po + 1);
- memcpy (hr->path, o->buf+po, i - po);
- hr->path[i - po] = '\0';
- /* HTTP version */
- i++;
- if (i > o->size-5 || memcmp(o->buf+i, "HTTP/", 5))
+ hr->method = odr_strdupn(o, buf, i);
+ po = ++i;
+ while (i < size && !strchr("\r\n", buf[i]))
+ {
+ if (buf[i] == ' ')
+ lspace = i;
+ i++;
+ }
+ if (!lspace || i >= size || lspace >= size - 5 ||
+ memcmp(buf + lspace + 1, "HTTP/", 5))