libs/web: merge luci.http.protocol fix from Fonosfera
[project/luci.git] / libs / web / luasrc / http / protocol.lua
index d8ef09f7ae36ebf6326d3777c3472835c921828a..0d41550b23709029935b6aec1a2136febec0d587 100644 (file)
@@ -434,23 +434,21 @@ function mimedecode_message_body( src, msg, filecb )
                        until not spos
 
                        if found then
-                               if #data > 78 then
-                                       lchunk = data:sub( #data - 78 + 1, #data )
-                                       data   = data:sub( 1, #data - 78 )
-
-                                       if store then
-                                               store( field, data, false )
-                                       else
-                                               return nil, "Invalid MIME section header"
-                                       end
-                               else
-                                       lchunk, data = data, nil
-                               end
+                               -- We found at least some boundary. Save
+                               -- the unparsed remaining data for the
+                               -- next chunk.
+                               lchunk, data = data, nil
                        else
+                               -- There was a complete chunk without a boundary. Parse it as headers or
+                               -- append it as data, depending on our current state.
                                if inhdr then
                                        lchunk, eof = parse_headers( data, field )
                                        inhdr = not eof
                                else
+                                       -- We're inside data, so append the data. Note that we only append
+                                       -- lchunk, not all of data, since there is a chance that chunk
+                                       -- contains half a boundary. Assuming that each chunk is at least the
+                                       -- boundary in size, this should prevent problems
                                        store( field, lchunk, false )
                                        lchunk, chunk = chunk, nil
                                end