mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-25 20:53:33 +00:00
Merge pull request #76519 from haiyanmeng/readlimit-credentialprovider
Limit the read length of ioutil.ReadAll in `pkg/credentialprovider`
This commit is contained in:
commit
4784a05d51
@ -47,7 +47,9 @@ package azure
|
|||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
@ -178,10 +180,15 @@ func performTokenExchange(
|
|||||||
}
|
}
|
||||||
|
|
||||||
var content []byte
|
var content []byte
|
||||||
if content, err = ioutil.ReadAll(exchange.Body); err != nil {
|
limitedReader := &io.LimitedReader{R: exchange.Body, N: maxReadLength}
|
||||||
|
if content, err = ioutil.ReadAll(limitedReader); err != nil {
|
||||||
return "", fmt.Errorf("Www-Authenticate: error reading response from %s", authEndpoint)
|
return "", fmt.Errorf("Www-Authenticate: error reading response from %s", authEndpoint)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if limitedReader.N <= 0 {
|
||||||
|
return "", errors.New("the read limit is reached")
|
||||||
|
}
|
||||||
|
|
||||||
var authResp acrAuthResponse
|
var authResp acrAuthResponse
|
||||||
if err = json.Unmarshal(content, &authResp); err != nil {
|
if err = json.Unmarshal(content, &authResp); err != nil {
|
||||||
return "", fmt.Errorf("Www-Authenticate: unable to read response %s", content)
|
return "", fmt.Errorf("Www-Authenticate: unable to read response %s", content)
|
||||||
|
@ -18,6 +18,7 @@ package azure
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"errors"
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
@ -38,7 +39,10 @@ import (
|
|||||||
var flagConfigFile = pflag.String("azure-container-registry-config", "",
|
var flagConfigFile = pflag.String("azure-container-registry-config", "",
|
||||||
"Path to the file containing Azure container registry configuration information.")
|
"Path to the file containing Azure container registry configuration information.")
|
||||||
|
|
||||||
const dummyRegistryEmail = "name@contoso.com"
|
const (
|
||||||
|
dummyRegistryEmail = "name@contoso.com"
|
||||||
|
maxReadLength = 10 * 1 << 20 // 10MB
|
||||||
|
)
|
||||||
|
|
||||||
var containerRegistryUrls = []string{"*.azurecr.io", "*.azurecr.cn", "*.azurecr.de", "*.azurecr.us"}
|
var containerRegistryUrls = []string{"*.azurecr.io", "*.azurecr.cn", "*.azurecr.de", "*.azurecr.us"}
|
||||||
|
|
||||||
@ -117,10 +121,14 @@ func parseConfig(configReader io.Reader) (*auth.AzureAuthConfig, error) {
|
|||||||
return &config, nil
|
return &config, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
configContents, err := ioutil.ReadAll(configReader)
|
limitedReader := &io.LimitedReader{R: configReader, N: maxReadLength}
|
||||||
|
configContents, err := ioutil.ReadAll(limitedReader)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
if limitedReader.N <= 0 {
|
||||||
|
return nil, errors.New("the read limit is reached")
|
||||||
|
}
|
||||||
err = yaml.Unmarshal(configContents, &config)
|
err = yaml.Unmarshal(configContents, &config)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -19,7 +19,9 @@ package credentialprovider
|
|||||||
import (
|
import (
|
||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
@ -30,6 +32,10 @@ import (
|
|||||||
"k8s.io/klog"
|
"k8s.io/klog"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
maxReadLength = 10 * 1 << 20 // 10MB
|
||||||
|
)
|
||||||
|
|
||||||
// DockerConfigJson represents ~/.docker/config.json file info
|
// DockerConfigJson represents ~/.docker/config.json file info
|
||||||
// see https://github.com/docker/docker/pull/12009
|
// see https://github.com/docker/docker/pull/12009
|
||||||
type DockerConfigJson struct {
|
type DockerConfigJson struct {
|
||||||
@ -195,11 +201,16 @@ func ReadUrl(url string, client *http.Client, header *http.Header) (body []byte,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
contents, err := ioutil.ReadAll(resp.Body)
|
limitedReader := &io.LimitedReader{R: resp.Body, N: maxReadLength}
|
||||||
|
contents, err := ioutil.ReadAll(limitedReader)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if limitedReader.N <= 0 {
|
||||||
|
return nil, errors.New("the read limit is reached")
|
||||||
|
}
|
||||||
|
|
||||||
return contents, nil
|
return contents, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user