mirror of
https://github.com/imgproxy/imgproxy.git
synced 2025-12-23 22:11:10 +02:00
38 lines
800 B
Go
38 lines
800 B
Go
package xmlparser
|
|
|
|
import (
|
|
"io"
|
|
)
|
|
|
|
type Document struct {
|
|
Node
|
|
}
|
|
|
|
func NewDocument(r io.Reader) (*Document, error) {
|
|
doc := &Document{
|
|
Node: Node{
|
|
// Attributes for document are always empty, but they are exposed,
|
|
// so we need to initialize them to avoid nil pointer dereference.
|
|
Attrs: NewAttributes(),
|
|
},
|
|
}
|
|
|
|
if err := doc.readFrom(r); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return doc, nil
|
|
}
|
|
|
|
// ReplaceEntities replaces XML entities in the document
|
|
// according to the entity declarations in the DOCTYPE.
|
|
// It modifies the document in place.
|
|
//
|
|
// Entities are replaced only once to avoid attacks like the
|
|
// "Billion Laughs" XML entity expansion attack.
|
|
func (doc *Document) ReplaceEntities() {
|
|
if em := parseEntityMap(doc.Children); em != nil {
|
|
doc.replaceEntities(em)
|
|
}
|
|
}
|