(reader io.Reader, boundary string)
| 1752 | } |
| 1753 | |
| 1754 | func parseMultipartQueue(reader io.Reader, boundary string) ([]multipartPartPayload, error) { |
| 1755 | if strings.TrimSpace(boundary) == "" { |
| 1756 | return nil, fmt.Errorf("multipart boundary is empty") |
| 1757 | } |
| 1758 | |
| 1759 | data, err := io.ReadAll(reader) |
| 1760 | if err != nil { |
| 1761 | return nil, err |
| 1762 | } |
| 1763 | |
| 1764 | queue, parseErr := parseMultipartQueueBytes(data, boundary) |
| 1765 | if parseErr == nil { |
| 1766 | return queue, nil |
| 1767 | } |
| 1768 | |
| 1769 | closingBoundary := []byte("--" + boundary + "--") |
| 1770 | if !bytes.Contains(data, closingBoundary) { |
| 1771 | patchedData := append([]byte{}, data...) |
| 1772 | patchedData = append(patchedData, []byte("\r\n--"+boundary+"--\r\n")...) |
| 1773 | if patchedQueue, patchedErr := parseMultipartQueueBytes(patchedData, boundary); patchedErr == nil { |
| 1774 | return patchedQueue, nil |
| 1775 | } |
| 1776 | } |
| 1777 | |
| 1778 | return nil, parseErr |
| 1779 | } |
| 1780 | |
| 1781 | func parseMultipartQueueBytes(data []byte, boundary string) ([]multipartPartPayload, error) { |
| 1782 | mr := multipart.NewReader(bytes.NewReader(data), boundary) |
no test coverage detected