mirror of
https://github.com/Li4n0/revsuit.git
synced 2026-09-26 16:41:53 +08:00
fix(ipinfo): fix a potential panic when downloading ip location database (#33)
This commit is contained in:
@@ -20,6 +20,7 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func get(url string) (b []byte, err error) {
|
func get(url string) (b []byte, err error) {
|
||||||
|
var resp *http.Response
|
||||||
client := http.Client{
|
client := http.Client{
|
||||||
Timeout: 90 * time.Second,
|
Timeout: 90 * time.Second,
|
||||||
Transport: &http.Transport{
|
Transport: &http.Transport{
|
||||||
@@ -28,11 +29,17 @@ func get(url string) (b []byte, err error) {
|
|||||||
request, _ := http.NewRequest(http.MethodGet, url, nil)
|
request, _ := http.NewRequest(http.MethodGet, url, nil)
|
||||||
request.Header.Add("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36")
|
request.Header.Add("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36")
|
||||||
|
|
||||||
resp, err := client.Do(request)
|
resp, err = client.Do(request)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
defer resp.Body.Close()
|
|
||||||
|
defer func(Body io.ReadCloser) {
|
||||||
|
err := Body.Close()
|
||||||
|
if err != nil {
|
||||||
|
log.Warn("%v", err)
|
||||||
|
}
|
||||||
|
}(resp.Body)
|
||||||
|
|
||||||
return io.ReadAll(resp.Body)
|
return io.ReadAll(resp.Body)
|
||||||
}
|
}
|
||||||
@@ -65,10 +72,14 @@ func extractTarGz(gzipStream io.Reader) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
defer outFile.Close()
|
|
||||||
if _, err := io.Copy(outFile, tarReader); err != nil {
|
if _, err := io.Copy(outFile, tarReader); err != nil {
|
||||||
|
_ = outFile.Close()
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
err = outFile.Close()
|
||||||
|
if err != nil {
|
||||||
|
log.Warn("%v", err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func get(url string) (b []byte, err error) {
|
func get(url string) (b []byte, err error) {
|
||||||
|
var resp *http.Response
|
||||||
client := http.Client{
|
client := http.Client{
|
||||||
Timeout: 90 * time.Second,
|
Timeout: 90 * time.Second,
|
||||||
Transport: &http.Transport{
|
Transport: &http.Transport{
|
||||||
@@ -29,11 +30,17 @@ func get(url string) (b []byte, err error) {
|
|||||||
request, _ := http.NewRequest("GET", url, nil)
|
request, _ := http.NewRequest("GET", url, nil)
|
||||||
request.Header.Add("User-Agent", "Nali/2.1.2 (Nali CLI, https://nali.skk.moe)")
|
request.Header.Add("User-Agent", "Nali/2.1.2 (Nali CLI, https://nali.skk.moe)")
|
||||||
|
|
||||||
resp, err := client.Do(request)
|
resp, err = client.Do(request)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
defer resp.Body.Close()
|
|
||||||
|
defer func(Body io.ReadCloser) {
|
||||||
|
err := Body.Close()
|
||||||
|
if err != nil {
|
||||||
|
log.Warn("%v", err)
|
||||||
|
}
|
||||||
|
}(resp.Body)
|
||||||
|
|
||||||
return io.ReadAll(resp.Body)
|
return io.ReadAll(resp.Body)
|
||||||
}
|
}
|
||||||
@@ -47,17 +54,25 @@ func getKey(b []byte) (key uint32, err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func decrypt(b []byte, key uint32) (_ []byte, err error) {
|
func decrypt(b []byte, key uint32) (_ []byte, err error) {
|
||||||
|
var rc io.ReadCloser
|
||||||
for i := 0; i < 0x200; i++ {
|
for i := 0; i < 0x200; i++ {
|
||||||
key *= uint32(0x805)
|
key *= uint32(0x805)
|
||||||
key++
|
key++
|
||||||
key &= uint32(0xff)
|
key &= uint32(0xff)
|
||||||
b[i] = b[i] ^ byte(key)
|
b[i] = b[i] ^ byte(key)
|
||||||
}
|
}
|
||||||
rc, err := zlib.NewReader(bytes.NewBuffer(b))
|
rc, err = zlib.NewReader(bytes.NewBuffer(b))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
defer rc.Close()
|
|
||||||
|
defer func(rc io.ReadCloser) {
|
||||||
|
err := rc.Close()
|
||||||
|
if err != nil {
|
||||||
|
log.Warn("%v", err)
|
||||||
|
}
|
||||||
|
}(rc)
|
||||||
|
|
||||||
return io.ReadAll(rc)
|
return io.ReadAll(rc)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user