Răsfoiți Sursa

eth: disallow overwrite files via admin.exportChain

Martin Holst Swende 6 ani în urmă
părinte
comite
292cf7c649
1 a modificat fișierele cu 5 adăugiri și 0 ștergeri
  1. 5 0
      eth/api.go

+ 5 - 0
eth/api.go

@@ -168,6 +168,11 @@ func NewPrivateAdminAPI(eth *Ethereum) *PrivateAdminAPI {
 
 // ExportChain exports the current blockchain into a local file.
 func (api *PrivateAdminAPI) ExportChain(file string) (bool, error) {
+	if _, err := os.Stat(file); err == nil {
+		// File already exists. Allowing overwrite could be a DoS vecotor,
+		// since the 'file' may point to arbitrary paths on the drive
+		return false, errors.New("location would overwrite an existing file")
+	}
 	// Make sure we can create the file to export into
 	out, err := os.OpenFile(file, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, os.ModePerm)
 	if err != nil {