From b93ba7718cb58121ae791a9479b0466d05993eec Mon Sep 17 00:00:00 2001 From: Vladislav Yarmak Date: Tue, 30 May 2023 21:43:36 +0300 Subject: [PATCH] improve chrome web store XML parsing --- extver.go | 14 ++++++++++++-- main.go | 2 +- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/extver.go b/extver.go index 0002df4..397df6e 100644 --- a/extver.go +++ b/extver.go @@ -3,6 +3,7 @@ package main import ( "context" "encoding/xml" + "errors" "fmt" "io" "net" @@ -15,6 +16,10 @@ var ( defaultProdVersion = "113.0" ) +var ( + ErrNoVerData = errors.New("no version data returned") +) + type StoreExtUpdateResponse struct { XMLName xml.Name `xml:"gupdate"` App *struct { @@ -85,7 +90,7 @@ func GetExtVer(ctx context.Context, } reader := io.LimitReader(resp.Body, 64*1024) - var respData StoreExtUpdateResponse + var respData *StoreExtUpdateResponse dec := xml.NewDecoder(reader) err = dec.Decode(&respData) @@ -93,5 +98,10 @@ func GetExtVer(ctx context.Context, return "", fmt.Errorf("unmarshaling of chrome web store response failed: %w", err) } - return respData.App.UpdateCheck.Version, nil + if respData != nil && respData.App != nil && + respData.App.UpdateCheck != nil && respData.App.UpdateCheck.Version != "" { + return respData.App.UpdateCheck.Version, nil + } + + return "", ErrNoVerData } diff --git a/main.go b/main.go index 04158b9..fafc3a6 100644 --- a/main.go +++ b/main.go @@ -183,7 +183,7 @@ func run() int { defer cl() extVer, err := GetExtVer(ctx, nil, HolaExtStoreID, dialer) if err != nil { - mainLogger.Critical("Can't detect latest API version. Try to specify -ext-ver parameter") + mainLogger.Critical("Can't detect latest API version. Try to specify -ext-ver parameter. Error: %v", err) return 8 } args.extVer = extVer