fix unbounded memory consumption vulnerability (#111)

Co-authored-by: Helena Mariano <31138349+helenamariano@users.noreply.github.com>
This commit is contained in:
Helena Mariano
2022-07-18 15:47:08 +10:00
committed by GitHub
parent b19021ade3
commit 42bcff6668
5 changed files with 8 additions and 5 deletions
+1 -1
View File
@@ -40,7 +40,7 @@ func ConvertDocx(r io.Reader) (string, map[string]string, error) {
size = si.Size() size = si.Size()
ra = f ra = f
} else { } else {
b, err := ioutil.ReadAll(r) b, err := ioutil.ReadAll(io.LimitReader(r, maxBytes))
if err != nil { if err != nil {
return "", nil, nil return "", nil, nil
} }
+3
View File
@@ -0,0 +1,3 @@
package docconv
const maxBytes = 20 << 20 // 20MB
+1 -1
View File
@@ -14,7 +14,7 @@ func ConvertODT(r io.Reader) (string, map[string]string, error) {
meta := make(map[string]string) meta := make(map[string]string)
var textBody string var textBody string
b, err := ioutil.ReadAll(r) b, err := ioutil.ReadAll(io.LimitReader(r, maxBytes))
if err != nil { if err != nil {
return "", nil, err return "", nil, err
} }
+1 -1
View File
@@ -21,7 +21,7 @@ func ConvertPages(r io.Reader) (string, map[string]string, error) {
meta := make(map[string]string) meta := make(map[string]string)
var textBody string var textBody string
b, err := ioutil.ReadAll(r) b, err := ioutil.ReadAll(io.LimitReader(r, maxBytes))
if err != nil { if err != nil {
return "", nil, fmt.Errorf("error reading data: %v", err) return "", nil, fmt.Errorf("error reading data: %v", err)
} }
+2 -2
View File
@@ -25,7 +25,7 @@ func ConvertXML(r io.Reader) (string, map[string]string, error) {
func XMLToText(r io.Reader, breaks []string, skip []string, strict bool) (string, error) { func XMLToText(r io.Reader, breaks []string, skip []string, strict bool) (string, error) {
var result string var result string
dec := xml.NewDecoder(r) dec := xml.NewDecoder(io.LimitReader(r, maxBytes))
dec.Strict = strict dec.Strict = strict
for { for {
t, err := dec.Token() t, err := dec.Token()
@@ -76,7 +76,7 @@ func XMLToText(r io.Reader, breaks []string, skip []string, strict bool) (string
// XMLToMap converts XML to a nested string map. // XMLToMap converts XML to a nested string map.
func XMLToMap(r io.Reader) (map[string]string, error) { func XMLToMap(r io.Reader) (map[string]string, error) {
m := make(map[string]string) m := make(map[string]string)
dec := xml.NewDecoder(r) dec := xml.NewDecoder(io.LimitReader(r, maxBytes))
var tagName string var tagName string
for { for {
t, err := dec.Token() t, err := dec.Token()