Skip to content

Commit 42bcff6

Browse files
fix unbounded memory consumption vulnerability (#111)
Co-authored-by: Helena Mariano <[email protected]>
1 parent b19021a commit 42bcff6

File tree

5 files changed

+8
-5
lines changed

5 files changed

+8
-5
lines changed

docx.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ func ConvertDocx(r io.Reader) (string, map[string]string, error) {
4040
size = si.Size()
4141
ra = f
4242
} else {
43-
b, err := ioutil.ReadAll(r)
43+
b, err := ioutil.ReadAll(io.LimitReader(r, maxBytes))
4444
if err != nil {
4545
return "", nil, nil
4646
}

limit.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package docconv
2+
3+
const maxBytes = 20 << 20 // 20MB

odt.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ func ConvertODT(r io.Reader) (string, map[string]string, error) {
1414
meta := make(map[string]string)
1515
var textBody string
1616

17-
b, err := ioutil.ReadAll(r)
17+
b, err := ioutil.ReadAll(io.LimitReader(r, maxBytes))
1818
if err != nil {
1919
return "", nil, err
2020
}

pages.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ func ConvertPages(r io.Reader) (string, map[string]string, error) {
2121
meta := make(map[string]string)
2222
var textBody string
2323

24-
b, err := ioutil.ReadAll(r)
24+
b, err := ioutil.ReadAll(io.LimitReader(r, maxBytes))
2525
if err != nil {
2626
return "", nil, fmt.Errorf("error reading data: %v", err)
2727
}

xml.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ func ConvertXML(r io.Reader) (string, map[string]string, error) {
2525
func XMLToText(r io.Reader, breaks []string, skip []string, strict bool) (string, error) {
2626
var result string
2727

28-
dec := xml.NewDecoder(r)
28+
dec := xml.NewDecoder(io.LimitReader(r, maxBytes))
2929
dec.Strict = strict
3030
for {
3131
t, err := dec.Token()
@@ -76,7 +76,7 @@ func XMLToText(r io.Reader, breaks []string, skip []string, strict bool) (string
7676
// XMLToMap converts XML to a nested string map.
7777
func XMLToMap(r io.Reader) (map[string]string, error) {
7878
m := make(map[string]string)
79-
dec := xml.NewDecoder(r)
79+
dec := xml.NewDecoder(io.LimitReader(r, maxBytes))
8080
var tagName string
8181
for {
8282
t, err := dec.Token()

0 commit comments

Comments
 (0)