libs/web: merge luci.http.protocol fix from Fonosfera
authorJo-Philipp Wich <jow@openwrt.org>
Wed, 29 Aug 2012 13:06:58 +0000 (13:06 +0000)
committerJo-Philipp Wich <jow@openwrt.org>
Wed, 29 Aug 2012 13:06:58 +0000 (13:06 +0000)
See http://trac.fonosfera.org/fon-ng/changeset/2102/trunk/luci/libs/http .

libs/web/luasrc/http/protocol.lua

index d8ef09f..0d41550 100644 (file)
@@ -434,23 +434,21 @@ function mimedecode_message_body( src, msg, filecb )
                        until not spos
 
                        if found then
                        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
                        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
                                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
                                        store( field, lchunk, false )
                                        lchunk, chunk = chunk, nil
                                end