From 64b68e26b65faeb8b673c38a5b526122d09144bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=85=89=E6=98=A5?= Date: Sat, 23 Jul 2022 13:34:27 +0800 Subject: [PATCH] - update --- go.mod | 26 +- go.sum | 50 +- library.go | 2 +- service/pinduoduo/const.go | 2 +- .../aws/aws-sdk-go/aws/endpoints/defaults.go | 18 + .../github.com/aws/aws-sdk-go/aws/version.go | 2 +- .../emicklei/go-restful/v3/CHANGES.md | 4 + .../emicklei/go-restful/v3/README.md | 3 +- .../emicklei/go-restful/v3/filter_adapter.go | 21 + .../emicklei/go-restful/v3/parameter.go | 8 + .../emicklei/go-restful/v3/web_service.go | 12 + vendor/github.com/godror/godror/CHANGELOG.md | 6 + vendor/github.com/godror/godror/conn.go | 9 +- vendor/github.com/godror/godror/data.go | 34 +- vendor/github.com/godror/godror/drv.go | 43 +- vendor/github.com/godror/godror/obj.go | 145 +++-- .../godror/godror/odpi/embed/require.go | 1 + .../godror/godror/odpi/include/require.go | 1 + .../godror/godror/odpi/src/require.go | 1 + vendor/github.com/godror/godror/orahlp.go | 86 ++- vendor/github.com/godror/godror/queue.go | 3 +- vendor/github.com/godror/godror/rows.go | 2 +- vendor/github.com/godror/godror/stmt.go | 494 ++++++++++++++++-- vendor/github.com/godror/godror/version.go | 2 +- .../github.com/klauspost/compress/README.md | 10 + .../klauspost/compress/zstd/bytebuf.go | 15 +- .../klauspost/compress/zstd/decoder.go | 3 + .../klauspost/compress/zstd/encoder.go | 4 +- .../compress/zstd/encoder_options.go | 2 +- .../klauspost/compress/zstd/framedec.go | 21 +- .../compress/zstd/fse_decoder_amd64.go | 4 +- .../klauspost/compress/zstd/seqdec_amd64.go | 26 +- .../klauspost/compress/zstd/seqdec_amd64.s | 460 +++++++++------- vendor/golang.org/x/crypto/AUTHORS | 3 - vendor/golang.org/x/crypto/CONTRIBUTORS | 3 - vendor/golang.org/x/net/AUTHORS | 3 - vendor/golang.org/x/net/CONTRIBUTORS | 3 - vendor/golang.org/x/oauth2/AUTHORS | 3 - vendor/golang.org/x/oauth2/CONTRIBUTORS | 3 - vendor/golang.org/x/sync/AUTHORS | 3 - vendor/golang.org/x/sync/CONTRIBUTORS | 3 - vendor/golang.org/x/sys/AUTHORS | 3 - vendor/golang.org/x/sys/CONTRIBUTORS | 3 - vendor/golang.org/x/sys/unix/zerrors_linux.go | 1 + vendor/golang.org/x/term/AUTHORS | 3 - vendor/golang.org/x/term/CONTRIBUTORS | 3 - vendor/golang.org/x/time/AUTHORS | 3 - vendor/golang.org/x/time/CONTRIBUTORS | 3 - vendor/modules.txt | 28 +- 49 files changed, 1154 insertions(+), 437 deletions(-) create mode 100644 vendor/github.com/emicklei/go-restful/v3/filter_adapter.go delete mode 100644 vendor/golang.org/x/crypto/AUTHORS delete mode 100644 vendor/golang.org/x/crypto/CONTRIBUTORS delete mode 100644 vendor/golang.org/x/net/AUTHORS delete mode 100644 vendor/golang.org/x/net/CONTRIBUTORS delete mode 100644 vendor/golang.org/x/oauth2/AUTHORS delete mode 100644 vendor/golang.org/x/oauth2/CONTRIBUTORS delete mode 100644 vendor/golang.org/x/sync/AUTHORS delete mode 100644 vendor/golang.org/x/sync/CONTRIBUTORS delete mode 100644 vendor/golang.org/x/sys/AUTHORS delete mode 100644 vendor/golang.org/x/sys/CONTRIBUTORS delete mode 100644 vendor/golang.org/x/term/AUTHORS delete mode 100644 vendor/golang.org/x/term/CONTRIBUTORS delete mode 100644 vendor/golang.org/x/time/AUTHORS delete mode 100644 vendor/golang.org/x/time/CONTRIBUTORS diff --git a/go.mod b/go.mod index f99c6744..bfec36fe 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,7 @@ require ( gitee.com/chunanyong/zorm v1.5.6 github.com/aliyun/aliyun-oss-go-sdk v2.2.4+incompatible github.com/allegro/bigcache/v3 v3.0.2 - github.com/aws/aws-sdk-go v1.44.58 + github.com/aws/aws-sdk-go v1.44.61 github.com/baidubce/bce-sdk-go v0.9.130 github.com/basgys/goxml2json v1.1.0 github.com/beego/beego/v2 v2.0.4 @@ -25,7 +25,7 @@ require ( github.com/go-redis/redis/v8 v8.11.5 github.com/go-redis/redis/v9 v9.0.0-beta.1 github.com/go-sql-driver/mysql v1.6.0 - github.com/godror/godror v0.33.3 + github.com/godror/godror v0.34.0 github.com/gomodule/redigo v2.0.0+incompatible github.com/huaweicloud/huaweicloud-sdk-go-obs v3.21.12+incompatible github.com/jasonlvhit/gocron v0.0.1 @@ -60,8 +60,8 @@ require ( go.etcd.io/etcd/client/v3 v3.5.4 go.mongodb.org/mongo-driver v1.10.0 go.uber.org/zap v1.21.0 - golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d - golang.org/x/oauth2 v0.0.0-20220718184931-c8730f7fcb92 + golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa + golang.org/x/oauth2 v0.0.0-20220722155238-128564f6959c golang.org/x/text v0.3.7 google.golang.org/grpc v1.48.0 google.golang.org/protobuf v1.28.0 @@ -93,7 +93,7 @@ require ( github.com/docker/go-units v0.4.0 // indirect github.com/dustin/go-humanize v1.0.0 // indirect github.com/edsrzf/mmap-go v1.1.0 // indirect - github.com/emicklei/go-restful/v3 v3.8.0 // indirect + github.com/emicklei/go-restful/v3 v3.9.0 // indirect github.com/fsnotify/fsnotify v1.5.4 // indirect github.com/gin-contrib/sse v0.1.0 // indirect github.com/glebarez/go-sqlite v1.17.3 // indirect @@ -131,7 +131,7 @@ require ( github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect - github.com/klauspost/compress v1.15.8 // indirect + github.com/klauspost/compress v1.15.9 // indirect github.com/leodido/go-urn v1.2.1 // indirect github.com/mailru/easyjson v0.7.7 // indirect github.com/mattn/go-isatty v0.0.14 // indirect @@ -168,14 +168,14 @@ require ( go.uber.org/atomic v1.9.0 // indirect go.uber.org/multierr v1.8.0 // indirect golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect - golang.org/x/net v0.0.0-20220708220712-1185a9018129 // indirect - golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f // indirect - golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 // indirect - golang.org/x/term v0.0.0-20220526004731-065cf7ba2467 // indirect - golang.org/x/time v0.0.0-20220609170525-579cf78fd858 // indirect + golang.org/x/net v0.0.0-20220722155237-a158d28d115b // indirect + golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 // indirect + golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f // indirect + golang.org/x/term v0.0.0-20220722155259-a9ba230a4035 // indirect + golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9 // indirect golang.org/x/tools v0.1.11 // indirect google.golang.org/appengine v1.6.7 // indirect - google.golang.org/genproto v0.0.0-20220719170305-83ca9fad585f // indirect + google.golang.org/genproto v0.0.0-20220722212130-b98a9ff5e252 // indirect gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect @@ -191,7 +191,7 @@ require ( mellium.im/sasl v0.2.1 // indirect modernc.org/b v1.0.2 // indirect modernc.org/cc/v3 v3.36.0 // indirect - modernc.org/ccgo/v3 v3.16.7 // indirect + modernc.org/ccgo/v3 v3.16.8 // indirect modernc.org/db v1.0.4 // indirect modernc.org/file v1.0.3 // indirect modernc.org/fileutil v1.1.0 // indirect diff --git a/go.sum b/go.sum index a366469b..eecf44e0 100644 --- a/go.sum +++ b/go.sum @@ -96,8 +96,10 @@ github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQ github.com/aws/aws-sdk-go v1.25.3/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.42.27/go.mod h1:OGr6lGMAKGlG9CVrYnWYDKIyb829c6EVBRjxqjmPepc= -github.com/aws/aws-sdk-go v1.44.58 h1:VPfVj0Fa1v+/8HUegdNvGg9XtmuJ3z08WerBuT730gk= -github.com/aws/aws-sdk-go v1.44.58/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= +github.com/aws/aws-sdk-go v1.44.60 h1:KTTogelVR+4dWiIPl7eyxoxaJkziChON6/Y/hVfTipk= +github.com/aws/aws-sdk-go v1.44.60/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= +github.com/aws/aws-sdk-go v1.44.61 h1:NcpLSS3Z0MiVQIYugx4I40vSIEEAXT0baO684ExNRco= +github.com/aws/aws-sdk-go v1.44.61/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= github.com/baidubce/bce-sdk-go v0.9.130 h1:5FYIocNnGKl72/+Ei+xyScl3Asmw7O+H9q8bv/H/ttI= github.com/baidubce/bce-sdk-go v0.9.130/go.mod h1:zbYJMQwE4IZuyrJiFO8tO8NbtYiKTFTbwh4eIsqjVdg= @@ -201,8 +203,8 @@ github.com/edsrzf/mmap-go v1.1.0/go.mod h1:19H/e8pUPLicwkyNgOykDXkJ9F0MHE+Z52B8E github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= -github.com/emicklei/go-restful/v3 v3.8.0 h1:eCZ8ulSerjdAiaNpF7GxXIE7ZCMo1moN1qX+S609eVw= -github.com/emicklei/go-restful/v3 v3.8.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= +github.com/emicklei/go-restful/v3 v3.9.0 h1:XwGDlfxEnQZzuopoqxwSEllNcCOM9DhhFyhFIIGKwxE= +github.com/emicklei/go-restful/v3 v3.9.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= @@ -311,8 +313,8 @@ github.com/goccy/go-json v0.8.1/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGF github.com/goccy/go-json v0.9.10 h1:hCeNmprSNLB8B8vQKWl6DpuH0t60oEs+TAk9a7CScKc= github.com/goccy/go-json v0.9.10/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/godror/godror v0.33.3 h1:GyjbWV0cKGDTRe1KClB1c+bCKXpn27UlIjwyNZs1qpg= -github.com/godror/godror v0.33.3/go.mod h1:FbrZ7po7LyS3gUTdW/K1+kIoePvP/E044HpwptL4vqw= +github.com/godror/godror v0.34.0 h1:/D40cxuWY3PtMa1oIcfXqqInlts5anEL3vj6IkTW8Q8= +github.com/godror/godror v0.34.0/go.mod h1:9QtjJWw+r1v9zh93Qx+hSOfYRVgj11a/7TUnU/00Wbc= github.com/godror/knownpb v0.1.0 h1:dJPK8s/I3PQzGGaGcUStL2zIaaICNzKKAK8BzP1uLio= github.com/godror/knownpb v0.1.0/go.mod h1:4nRFbQo1dDuwKnblRXDxrfCFYeT4hjg3GjMqef58eRE= github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= @@ -391,7 +393,6 @@ github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= -github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= @@ -580,8 +581,8 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.9.5/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.15.8 h1:JahtItbkWjf2jzm/T+qgMxkP9EMHsqEUA6vCMGmXvhA= -github.com/klauspost/compress v1.15.8/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= +github.com/klauspost/compress v1.15.9 h1:wKRjX6JRtDdrE9qwa4b/Cip7ACOshUI4smpCQanqjSY= +github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= @@ -695,7 +696,6 @@ github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/oklog/ulid/v2 v2.0.2 h1:r4fFzBm+bv0wNKNh5eXTwU7i85y5x+uwkxCUTNVQqLc= -github.com/oklog/ulid/v2 v2.0.2/go.mod h1:mtBL0Qe/0HAx6/a4Z30qxVIAL1eQDweXq5lxOEiwQ68= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= @@ -728,7 +728,6 @@ github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIw github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc= github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= -github.com/pborman/getopt v0.0.0-20170112200414-7148bc3a4c30/go.mod h1:85jBQOZwpVEaDAr341tbn15RS4fCAsIst0qp7i8ex1o= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE= github.com/pelletier/go-toml/v2 v2.0.2 h1:+jQXlF3scKIcSEKkdHzXhCTDLPFi5r1wnK6yPS+49Gw= @@ -991,6 +990,8 @@ golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.0.0-20220307211146-efcb8507fb70/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d h1:sK3txAijHtOK88l68nt020reeT1ZdKLIYetKl95FzVY= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa h1:zuSxTR4o9y82ebqCUJYNGJbGPo6sKVl54f/TVDObg1c= +golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20181106170214-d68db9428509/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -1080,6 +1081,8 @@ golang.org/x/net v0.0.0-20211216030914-fe4d6282115f/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220708220712-1185a9018129 h1:vucSRfWwTsoXro7P+3Cjlr6flUMtzCwzlvkxEQtHHB0= golang.org/x/net v0.0.0-20220708220712-1185a9018129/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b h1:PxfKdU9lEEDYjdIzOtC4qFWgkU2rGHdKlKowJSMN9h0= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1094,6 +1097,8 @@ golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20220718184931-c8730f7fcb92 h1:oVlhw3Oe+1reYsE2Nqu19PDJfLzwdU3QUUrG86rLK68= golang.org/x/oauth2 v0.0.0-20220718184931-c8730f7fcb92/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20220722155238-128564f6959c h1:q3gFqPqH7NVofKo3c3yETAP//pPI+G5mvB7qqj1Y5kY= +golang.org/x/oauth2 v0.0.0-20220722155238-128564f6959c/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1106,9 +1111,10 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220513210516-0976fa681c29/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f h1:Ax0t5p6N38Ga0dThY21weqDEyz2oklo4IvDkpigvkD8= golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 h1:uVc8UZUe6tr40fFVnUP5Oj+veunVezqYl9z7DYw9xzw= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1187,13 +1193,18 @@ golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220405052023-b1e9470b6e64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 h1:0A+M6Uqn+Eje4kHMK80dtF3JCXC4ykBgQG4Fe06QRhQ= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220721230656-c6bc011c0c49 h1:TMjZDarEwf621XDryfitp/8awEhiZNiwgphKlTMGRIg= +golang.org/x/sys v0.0.0-20220721230656-c6bc011c0c49/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f h1:v4INt8xihDGvnrfjMDVXGxw9wrfxYyCjk0KbXjhR55s= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20220526004731-065cf7ba2467 h1:CBpWXWQpIRjzmkkA+M7q9Fqnwd2mZr3AFqexg8YTfoM= golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.0.0-20220722155259-a9ba230a4035 h1:Q5284mrmYTpACcm+eAKjKJH48BBwSyfJqmmGDTtT8Vc= +golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1211,6 +1222,8 @@ golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20220210224613-90d013bbcef8/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20220609170525-579cf78fd858 h1:Dpdu/EMxGMFgq0CeYMh4fazTD2vtlZRYE7wyynxJb9U= golang.org/x/time v0.0.0-20220609170525-579cf78fd858/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9 h1:ftMN5LMiBFjbzleLqtoBZk7KdJwhuybIU+FckUHgoyQ= +golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -1359,8 +1372,10 @@ google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220719170305-83ca9fad585f h1:P8EiVSxZwC6xH2niv2N66aqwMtYFg+D54gbjpcqKJtM= -google.golang.org/genproto v0.0.0-20220719170305-83ca9fad585f/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE= +google.golang.org/genproto v0.0.0-20220720214146-176da50484ac h1:EOa+Yrhx1C0O+4pHeXeWrCwdI0tWI6IfUU56Vebs9wQ= +google.golang.org/genproto v0.0.0-20220720214146-176da50484ac/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE= +google.golang.org/genproto v0.0.0-20220722212130-b98a9ff5e252 h1:G5AjFxR+ibe9Taamo0TdW+iylfBYK10DSkHYdx7PZ9w= +google.golang.org/genproto v0.0.0-20220722212130-b98a9ff5e252/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= @@ -1557,8 +1572,8 @@ modernc.org/ccgo/v3 v3.12.81/go.mod h1:p2A1duHoBBg1mFtYvnhAnQyI6vL0uw5PGYLSIgF6r modernc.org/ccgo/v3 v3.12.82/go.mod h1:ApbflUfa5BKadjHynCficldU1ghjen84tuM5jRynB7w= modernc.org/ccgo/v3 v3.16.4/go.mod h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ= modernc.org/ccgo/v3 v3.16.6/go.mod h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ= -modernc.org/ccgo/v3 v3.16.7 h1:aX3IUFUc5Gy+GkLh2lu866tybZkg4e8Ccfs7dKNzYGI= -modernc.org/ccgo/v3 v3.16.7/go.mod h1:ruJe28kDQ8nvFDJu3k7lCcD81Dbij6LC7/pSMaujEkQ= +modernc.org/ccgo/v3 v3.16.8 h1:G0QNlTqI5uVgczBWfGKs7B++EPwCfXPWGD2MdeKloDs= +modernc.org/ccgo/v3 v3.16.8/go.mod h1:zNjwkizS+fIFDrDjIAgBSCLkWbJuHF+ar3QRn+Z9aws= modernc.org/ccorpus v1.11.1/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ= modernc.org/ccorpus v1.11.6 h1:J16RXiiqiCgua6+ZvQot4yUuUy8zxgqbqEEUuGPlISk= modernc.org/ccorpus v1.11.6/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ= @@ -1621,7 +1636,6 @@ modernc.org/libc v1.16.0/go.mod h1:N4LD6DBE9cf+Dzf9buBlzVJndKr/iJHG97vGLHYnb5A= modernc.org/libc v1.16.1/go.mod h1:JjJE0eu4yeK7tab2n4S1w8tlWd9MxXLRzheaRnAKymU= modernc.org/libc v1.16.7/go.mod h1:hYIV5VZczAmGZAnG15Vdngn5HSF5cSkbvfz2B7GRuVU= modernc.org/libc v1.16.8/go.mod h1:hYIV5VZczAmGZAnG15Vdngn5HSF5cSkbvfz2B7GRuVU= -modernc.org/libc v1.16.10/go.mod h1:hYIV5VZczAmGZAnG15Vdngn5HSF5cSkbvfz2B7GRuVU= modernc.org/libc v1.16.17 h1:rXo8IZJvP+QSN1KrlV23dtkM3XfGYXjx3RbLLzBtndM= modernc.org/libc v1.16.17/go.mod h1:hYIV5VZczAmGZAnG15Vdngn5HSF5cSkbvfz2B7GRuVU= modernc.org/lldb v1.0.2/go.mod h1:ovbKqyzA9H/iPwHkAOH0qJbIQVT9rlijecenxDwVUi0= diff --git a/library.go b/library.go index 3bc1e4f7..a23ba100 100644 --- a/library.go +++ b/library.go @@ -1,5 +1,5 @@ package go_library func Version() string { - return "v1.0.48" + return "v1.0.49" } diff --git a/service/pinduoduo/const.go b/service/pinduoduo/const.go index 832961a8..785d4241 100644 --- a/service/pinduoduo/const.go +++ b/service/pinduoduo/const.go @@ -1,7 +1,7 @@ package pinduoduo const ( - apiUrl = "https://whois.pconline.com.cn" + apiUrl = "https://gw-api.pinduoduo.com/api/router" ) const ( diff --git a/vendor/github.com/aws/aws-sdk-go/aws/endpoints/defaults.go b/vendor/github.com/aws/aws-sdk-go/aws/endpoints/defaults.go index 82c6cc48..2647b7cf 100644 --- a/vendor/github.com/aws/aws-sdk-go/aws/endpoints/defaults.go +++ b/vendor/github.com/aws/aws-sdk-go/aws/endpoints/defaults.go @@ -15882,6 +15882,9 @@ var awsPartition = partition{ endpointKey{ Region: "ap-southeast-2", }: endpoint{}, + endpointKey{ + Region: "ap-southeast-3", + }: endpoint{}, endpointKey{ Region: "ca-central-1", }: endpoint{}, @@ -24203,6 +24206,18 @@ var awsPartition = partition{ }, "workspaces-web": service{ Endpoints: serviceEndpoints{ + endpointKey{ + Region: "ap-northeast-1", + }: endpoint{}, + endpointKey{ + Region: "ap-south-1", + }: endpoint{}, + endpointKey{ + Region: "ap-southeast-1", + }: endpoint{}, + endpointKey{ + Region: "ap-southeast-2", + }: endpoint{}, endpointKey{ Region: "eu-west-1", }: endpoint{}, @@ -31741,6 +31756,9 @@ var awsisoPartition = partition{ endpointKey{ Region: "us-iso-east-1", }: endpoint{}, + endpointKey{ + Region: "us-iso-west-1", + }: endpoint{}, }, }, "sts": service{ diff --git a/vendor/github.com/aws/aws-sdk-go/aws/version.go b/vendor/github.com/aws/aws-sdk-go/aws/version.go index 65a2e2ae..68389eb1 100644 --- a/vendor/github.com/aws/aws-sdk-go/aws/version.go +++ b/vendor/github.com/aws/aws-sdk-go/aws/version.go @@ -5,4 +5,4 @@ package aws const SDKName = "aws-sdk-go" // SDKVersion is the version of this SDK -const SDKVersion = "1.44.58" +const SDKVersion = "1.44.61" diff --git a/vendor/github.com/emicklei/go-restful/v3/CHANGES.md b/vendor/github.com/emicklei/go-restful/v3/CHANGES.md index 38169cfd..74a37815 100644 --- a/vendor/github.com/emicklei/go-restful/v3/CHANGES.md +++ b/vendor/github.com/emicklei/go-restful/v3/CHANGES.md @@ -1,5 +1,9 @@ # Change history of go-restful +## [v3.9.0] - 20221-07-21 + +- add support for http.Handler implementations to work as FilterFunction, issue #504 (thanks to https://github.com/ggicci) + ## [v3.8.0] - 20221-06-06 - use exact matching of allowed domain entries, issue #489 (#493) diff --git a/vendor/github.com/emicklei/go-restful/v3/README.md b/vendor/github.com/emicklei/go-restful/v3/README.md index 23166d3b..0625359d 100644 --- a/vendor/github.com/emicklei/go-restful/v3/README.md +++ b/vendor/github.com/emicklei/go-restful/v3/README.md @@ -84,6 +84,7 @@ func (u UserResource) findUser(request *restful.Request, response *restful.Respo - Route errors produce HTTP 404/405/406/415 errors, customizable using ServiceErrorHandler(...) - Configurable (trace) logging - Customizable gzip/deflate readers and writers using CompressorProvider registration +- Inject your own http.Handler using the `HttpMiddlewareHandlerToFilter` function ## How to customize There are several hooks to customize the behavior of the go-restful package. @@ -94,7 +95,7 @@ There are several hooks to customize the behavior of the go-restful package. - Trace logging - Compression - Encoders for other serializers -- Use [jsoniter](https://github.com/json-iterator/go) by build this package using a tag, e.g. `go build -tags=jsoniter .` +- Use [jsoniter](https://github.com/json-iterator/go) by building this package using a build tag, e.g. `go build -tags=jsoniter .` ## Resources diff --git a/vendor/github.com/emicklei/go-restful/v3/filter_adapter.go b/vendor/github.com/emicklei/go-restful/v3/filter_adapter.go new file mode 100644 index 00000000..c246512f --- /dev/null +++ b/vendor/github.com/emicklei/go-restful/v3/filter_adapter.go @@ -0,0 +1,21 @@ +package restful + +import ( + "net/http" +) + +// HttpMiddlewareHandler is a function that takes a http.Handler and returns a http.Handler +type HttpMiddlewareHandler func(http.Handler) http.Handler + +// HttpMiddlewareHandlerToFilter converts a HttpMiddlewareHandler to a FilterFunction. +func HttpMiddlewareHandlerToFilter(middleware HttpMiddlewareHandler) FilterFunction { + return func(req *Request, resp *Response, chain *FilterChain) { + next := http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) { + req.Request = r + resp.ResponseWriter = rw + chain.ProcessFilter(req, resp) + }) + + middleware(next).ServeHTTP(resp.ResponseWriter, req.Request) + } +} diff --git a/vendor/github.com/emicklei/go-restful/v3/parameter.go b/vendor/github.com/emicklei/go-restful/v3/parameter.go index 0e658af5..0b851bb4 100644 --- a/vendor/github.com/emicklei/go-restful/v3/parameter.go +++ b/vendor/github.com/emicklei/go-restful/v3/parameter.go @@ -22,6 +22,9 @@ const ( // FormParameterKind = indicator of Request parameter type "form" FormParameterKind + // MultiPartFormParameterKind = indicator of Request parameter type "multipart/form-data" + MultiPartFormParameterKind + // CollectionFormatCSV comma separated values `foo,bar` CollectionFormatCSV = CollectionFormat("csv") @@ -108,6 +111,11 @@ func (p *Parameter) beForm() *Parameter { return p } +func (p *Parameter) beMultiPartForm() *Parameter { + p.data.Kind = MultiPartFormParameterKind + return p +} + // Required sets the required field and returns the receiver func (p *Parameter) Required(required bool) *Parameter { p.data.Required = required diff --git a/vendor/github.com/emicklei/go-restful/v3/web_service.go b/vendor/github.com/emicklei/go-restful/v3/web_service.go index 0bf5d1e5..789c4df2 100644 --- a/vendor/github.com/emicklei/go-restful/v3/web_service.go +++ b/vendor/github.com/emicklei/go-restful/v3/web_service.go @@ -165,6 +165,18 @@ func FormParameter(name, description string) *Parameter { return p } +// MultiPartFormParameter creates a new Parameter of kind Form (using multipart/form-data) for documentation purposes. +// It is initialized as required with string as its DataType. +func (w *WebService) MultiPartFormParameter(name, description string) *Parameter { + return MultiPartFormParameter(name, description) +} + +func MultiPartFormParameter(name, description string) *Parameter { + p := &Parameter{&ParameterData{Name: name, Description: description, Required: false, DataType: "string"}} + p.beMultiPartForm() + return p +} + // Route creates a new Route using the RouteBuilder and add to the ordered list of Routes. func (w *WebService) Route(builder *RouteBuilder) *WebService { w.routesLock.Lock() diff --git a/vendor/github.com/godror/godror/CHANGELOG.md b/vendor/github.com/godror/godror/CHANGELOG.md index 90450607..c2cfc5ca 100644 --- a/vendor/github.com/godror/godror/CHANGELOG.md +++ b/vendor/github.com/godror/godror/CHANGELOG.md @@ -6,6 +6,12 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## [Unreleased] +## [v0.34.0] +### Added +- ObjectType.AttributeNames() returns the attribute names in DB order. +- PoolStats has a DBStats method to convert it to sql.DBStats. +- By embedding godror.ObjectTypeName and setting the field tag with `"godror:,type=my_pkg.type"` you can use structs in place of Oracle objects in ExecStmt. + ## [v0.33.0] ### Changed - SetLogger accept github.com/go-logr/logr.Logger diff --git a/vendor/github.com/godror/godror/conn.go b/vendor/github.com/godror/godror/conn.go index dfb2080d..3542930b 100644 --- a/vendor/github.com/godror/godror/conn.go +++ b/vendor/github.com/godror/godror/conn.go @@ -58,8 +58,9 @@ type conn struct { poolKey string Server VersionInfo params dsn.ConnectionParams - tzOffSecs int mu sync.RWMutex + objTypes map[string]*ObjectType + tzOffSecs int inTransaction bool released bool tzValid bool @@ -248,6 +249,10 @@ func (c *conn) closeNotLocking() error { if dpiConn.refCount <= 1 { c.tzOffSecs, c.tzValid, c.params.Timezone = 0, false, nil } + for k, v := range c.objTypes { + v.Close() + delete(c.objTypes, k) + } // dpiConn_release decrements dpiConn's reference counting, // and closes it when it reaches zero. @@ -453,7 +458,7 @@ func (c *conn) newVar(vi varInfo) (*C.dpiVar, []C.dpiData, error) { }); err != nil { return nil, nil, fmt.Errorf("newVar(typ=%d, natTyp=%d, sliceLen=%d, bufSize=%d): %w", vi.Typ, vi.NatTyp, vi.SliceLen, vi.BufSize, err) } - return v, dpiDataSlice(dataArr, C.uint(vi.SliceLen)), nil + return v, unsafe.Slice(dataArr, vi.SliceLen), nil } var _ = driver.Tx((*conn)(nil)) diff --git a/vendor/github.com/godror/godror/data.go b/vendor/github.com/godror/godror/data.go index e3689df2..625d3b98 100644 --- a/vendor/github.com/godror/godror/data.go +++ b/vendor/github.com/godror/godror/data.go @@ -69,6 +69,7 @@ func (d *Data) SetBool(b bool) { if b { i = 1 } + d.NativeTypeNum = C.DPI_NATIVE_TYPE_BOOLEAN C.dpiData_setBool(&d.dpiData, i) } @@ -91,6 +92,7 @@ func (d *Data) SetBytes(b []byte) { d.dpiData.isNull = 1 return } + d.NativeTypeNum = C.DPI_NATIVE_TYPE_BYTES C.dpiData_setBytes(&d.dpiData, (*C.char)(unsafe.Pointer(&b[0])), C.uint32_t(len(b))) } @@ -105,6 +107,7 @@ func (d *Data) GetFloat32() float32 { // SetFloat32 sets the data as float32. func (d *Data) SetFloat32(f float32) { + d.NativeTypeNum = C.DPI_NATIVE_TYPE_FLOAT C.dpiData_setFloat(&d.dpiData, C.float(f)) } @@ -120,6 +123,7 @@ func (d *Data) GetFloat64() float64 { // SetFloat64 sets the data as float64. func (d *Data) SetFloat64(f float64) { + d.NativeTypeNum = C.DPI_NATIVE_TYPE_DOUBLE C.dpiData_setDouble(&d.dpiData, C.double(f)) } @@ -139,6 +143,7 @@ func (d *Data) GetInt64() int64 { // SetInt64 sets the data as int64. func (d *Data) SetInt64(i int64) { + d.NativeTypeNum = C.DPI_NATIVE_TYPE_INT64 C.dpiData_setInt64(&d.dpiData, C.int64_t(i)) } @@ -167,6 +172,7 @@ func (d *Data) SetIntervalDS(dur time.Duration) { dur, rem = rem, dur%time.Second secs := C.int32_t(dur / time.Second) fsecs := C.int32_t(rem) + d.NativeTypeNum = C.DPI_NATIVE_TYPE_INTERVAL_DS C.dpiData_setIntervalDS(&d.dpiData, days, hrs, mins, secs, fsecs) } @@ -182,6 +188,7 @@ func (d *Data) GetIntervalYM() IntervalYM { // SetIntervalYM sets IntervalYM to the data. func (d *Data) SetIntervalYM(ym IntervalYM) { + d.NativeTypeNum = C.DPI_NATIVE_TYPE_INTERVAL_YM C.dpiData_setIntervalYM(&d.dpiData, C.int32_t(ym.Years), C.int32_t(ym.Months)) } @@ -195,6 +202,7 @@ func (d *Data) GetLob() *Lob { // SetLob sets Lob to the data. func (d *Data) SetLob(lob *DirectLob) { + d.NativeTypeNum = C.DPI_NATIVE_TYPE_LOB C.dpiData_setLOB(&d.dpiData, lob.dpiLob) } @@ -227,6 +235,8 @@ func (d *Data) GetObject() *Object { // SetObject sets Object to data. func (d *Data) SetObject(o *Object) { + d.NativeTypeNum = C.DPI_NATIVE_TYPE_OBJECT + d.ObjectType = o.ObjectType C.dpiData_setObject(&d.dpiData, o.dpiObject) } @@ -240,6 +250,7 @@ func (d *Data) GetStmt() driver.Stmt { // SetStmt sets Stmt to data. func (d *Data) SetStmt(s *statement) { + d.NativeTypeNum = C.DPI_NATIVE_TYPE_STMT C.dpiData_setStmt(&d.dpiData, s.dpiStmt) } @@ -268,6 +279,7 @@ func (d *Data) SetTime(t time.Time) { if d.dpiData.isNull == 1 { return } + d.NativeTypeNum = C.DPI_NATIVE_TYPE_TIMESTAMP _, z := t.Zone() C.dpiData_setTimestamp(&d.dpiData, C.int16_t(t.Year()), C.uint8_t(t.Month()), C.uint8_t(t.Day()), @@ -287,6 +299,7 @@ func (d *Data) GetUint64() uint64 { // SetUint64 sets data to uint64. func (d *Data) SetUint64(u uint64) { + d.NativeTypeNum = C.DPI_NATIVE_TYPE_UINT64 C.dpiData_setUint64(&d.dpiData, C.uint64_t(u)) } @@ -343,49 +356,34 @@ func (d *Data) Set(v interface{}) error { } switch x := v.(type) { case int8: - d.NativeTypeNum = C.DPI_NATIVE_TYPE_INT64 d.SetInt64(int64(x)) case int16: - d.NativeTypeNum = C.DPI_NATIVE_TYPE_INT64 d.SetInt64(int64(x)) case int32: - d.NativeTypeNum = C.DPI_NATIVE_TYPE_INT64 d.SetInt64(int64(x)) case int64: - d.NativeTypeNum = C.DPI_NATIVE_TYPE_INT64 d.SetInt64(x) case int: - d.NativeTypeNum = C.DPI_NATIVE_TYPE_INT64 d.SetInt64(int64(x)) case uint8: - d.NativeTypeNum = C.DPI_NATIVE_TYPE_UINT64 d.SetUint64(uint64(x)) case uint16: - d.NativeTypeNum = C.DPI_NATIVE_TYPE_UINT64 d.SetUint64(uint64(x)) case uint32: - d.NativeTypeNum = C.DPI_NATIVE_TYPE_UINT64 d.SetUint64(uint64(x)) case uint64: - d.NativeTypeNum = C.DPI_NATIVE_TYPE_UINT64 d.SetUint64(x) case uint: - d.NativeTypeNum = C.DPI_NATIVE_TYPE_UINT64 d.SetUint64(uint64(x)) case float32: - d.NativeTypeNum = C.DPI_NATIVE_TYPE_FLOAT d.SetFloat32(x) case float64: - d.NativeTypeNum = C.DPI_NATIVE_TYPE_DOUBLE d.SetFloat64(x) case string: - d.NativeTypeNum = C.DPI_NATIVE_TYPE_BYTES d.SetBytes([]byte(x)) case []byte: - d.NativeTypeNum = C.DPI_NATIVE_TYPE_BYTES d.SetBytes(x) case time.Time: - d.NativeTypeNum = C.DPI_NATIVE_TYPE_TIMESTAMP d.SetTime(x) case NullTime: d.NativeTypeNum = C.DPI_NATIVE_TYPE_TIMESTAMP @@ -393,27 +391,21 @@ func (d *Data) Set(v interface{}) error { d.SetTime(x.Time) } case time.Duration: - d.NativeTypeNum = C.DPI_NATIVE_TYPE_INTERVAL_DS d.SetIntervalDS(x) case IntervalYM: - d.NativeTypeNum = C.DPI_NATIVE_TYPE_INTERVAL_YM d.SetIntervalYM(x) case *DirectLob: - d.NativeTypeNum = C.DPI_NATIVE_TYPE_LOB d.SetLob(x) case *Object: - d.NativeTypeNum = C.DPI_NATIVE_TYPE_OBJECT d.ObjectType = x.ObjectType d.SetObject(x) case ObjectCollection: - d.NativeTypeNum = C.DPI_NATIVE_TYPE_OBJECT d.ObjectType = x.Object.ObjectType d.SetObject(x.Object) //case *stmt: //d.NativeTypeNum = C.DPI_NATIVE_TYPE_STMT //d.SetStmt(x) case bool: - d.NativeTypeNum = C.DPI_NATIVE_TYPE_BOOLEAN d.SetBool(x) //case rowid: //d.NativeTypeNum = C.DPI_NATIVE_TYPE_ROWID diff --git a/vendor/github.com/godror/godror/drv.go b/vendor/github.com/godror/godror/drv.go index ab7ce754..50f02ab1 100644 --- a/vendor/github.com/godror/godror/drv.go +++ b/vendor/github.com/godror/godror/drv.go @@ -75,6 +75,7 @@ import "C" import ( "context" + "crypto/sha256" "database/sql" "database/sql/driver" "errors" @@ -179,16 +180,7 @@ type drv struct { mu sync.RWMutex } -const oneContext = false - -func NewDriver() *drv { - var d drv - if !oneContext || defaultDrv == nil { - return &d - } - d.dpiContext = defaultDrv.dpiContext - return &d -} +func NewDriver() *drv { return &drv{} } func (d *drv) Close() error { if d == nil { return nil @@ -204,18 +196,11 @@ func (d *drv) Close() error { } done <- nil }() - var err error select { - case err = <-done: + case <-done: case <-time.After(5 * time.Second): - err = fmt.Errorf("Driver.Close: %w", context.DeadlineExceeded) } - if oneContext && - // As we use one global dpiContext, don't destroy it - (dpiCtx == nil || (d != defaultDrv && defaultDrv.dpiContext == dpiCtx)) { - return err - } go func() { if C.dpiContext_destroy(dpiCtx) == C.DPI_FAILURE { done <- fmt.Errorf("error destroying dpiContext %p", dpiCtx) @@ -401,8 +386,9 @@ func (d *drv) createConn(pool *connPool, P commonAndConnParams) (*conn, error) { // create connection and initialize it, if needed c := conn{ drv: d, dpiConn: dc, - params: dsn.ConnectionParams{CommonParams: P.CommonParams, ConnParams: P.ConnParams}, - poolKey: poolKey, + params: dsn.ConnectionParams{CommonParams: P.CommonParams, ConnParams: P.ConnParams}, + poolKey: poolKey, + objTypes: make(map[string]*ObjectType), } if pool != nil { c.params.PoolParams = pool.params.PoolParams @@ -637,13 +623,15 @@ func (d *drv) getPool(P commonAndPoolParams) (*connPool, error) { } var usernameKey string + var passwordHash [sha256.Size]byte if !P.Heterogeneous && !P.ExternalAuth { // skip username being part of key in heterogeneous pools usernameKey = P.Username + passwordHash = sha256.Sum256([]byte(P.Password.Secret())) // See issue #245 } // determine key to use for pool - poolKey := fmt.Sprintf("%s\t%s\t%d\t%d\t%d\t%s\t%s\t%s\t%t\t%t\t%t\t%s\t%d\t%s", - usernameKey, P.ConnectString, P.MinSessions, P.MaxSessions, + poolKey := fmt.Sprintf("%s\t%x\t%s\t%d\t%d\t%d\t%s\t%s\t%s\t%t\t%t\t%t\t%s\t%d\t%s", + usernameKey, passwordHash[:4], P.ConnectString, P.MinSessions, P.MaxSessions, P.SessionIncrement, P.WaitTimeout, P.MaxLifeTime, P.SessionTimeout, P.Heterogeneous, P.EnableEvents, P.ExternalAuth, P.Timezone, P.MaxSessionsPerShard, P.PingInterval, @@ -813,6 +801,15 @@ func (s PoolStats) String() string { return fmt.Sprintf("busy=%d open=%d max=%d maxLifetime=%s timeout=%s waitTimeout=%s", s.Busy, s.Open, s.Max, s.MaxLifetime, s.Timeout, s.WaitTimeout) } +func (p PoolStats) AsDBStats() sql.DBStats { + return sql.DBStats{ + MaxOpenConnections: int(p.Max), + // Pool Status + OpenConnections: int(p.Open), + InUse: int(p.Busy), + Idle: int(p.Open) - int(p.Busy), + } +} // Stats returns PoolStats of the pool. func (d *drv) getPoolStats(p *connPool) (stats PoolStats, err error) { @@ -1125,7 +1122,7 @@ func (c connector) Driver() driver.Driver { return c.drv } // // From Go 1.17 sql.DB.Close() will call this method. func (c connector) Close() error { - if c.drv == nil || oneContext || c.drv == defaultDrv { + if c.drv == nil || c.drv == defaultDrv { return nil } return c.drv.Close() diff --git a/vendor/github.com/godror/godror/obj.go b/vendor/github.com/godror/godror/obj.go index 123d46a7..0d23f679 100644 --- a/vendor/github.com/godror/godror/obj.go +++ b/vendor/github.com/godror/godror/obj.go @@ -84,7 +84,10 @@ func (O *Object) SetAttribute(name string, data *Data) error { if !strings.Contains(name, `"`) { name = strings.ToUpper(name) } - attr := O.Attributes[name] + attr, ok := O.Attributes[name] + if !ok { + return fmt.Errorf("%s[%q]: %w", O, name, ErrNoSuchKey) + } if data.NativeTypeNum == 0 { data.NativeTypeNum = attr.NativeTypeNum data.ObjectType = attr.ObjectType @@ -368,48 +371,60 @@ func (O *Object) FromMap(recursive bool, m map[string]interface{}) error { logger.Log("msg", "FromMap", "attribute", a, "value", v, "type", fmt.Sprintf("%T", v), "recursive", recursive, "ot", ot.ObjectType) } if ot.ObjectType.CollectionOf != nil { // Collection case - coll, err := ot.NewCollection() - if err != nil { - return fmt.Errorf("%q.FromMap: %w", a, err) - } - switch v := v.(type) { - case []map[string]interface{}: - if err := coll.FromMapSlice(recursive, v); err != nil { - return fmt.Errorf("%q.FromMapSlice: %w", a, err) + if err := func() error { + coll, err := ot.NewCollection() + if err != nil { + return fmt.Errorf("%q.FromMap: %w", a, err) } - case []interface{}: - if ot.IsObject() { - m := make([]map[string]interface{}, 0, len(v)) - for _, e := range v { - m = append(m, e.(map[string]interface{})) - } - if err := coll.FromMapSlice(recursive, m); err != nil { + defer coll.Close() + switch v := v.(type) { + case []map[string]interface{}: + if err := coll.FromMapSlice(recursive, v); err != nil { return fmt.Errorf("%q.FromMapSlice: %w", a, err) } - } else { - data := scratch.Get() - defer scratch.Put(data) - for _, e := range v { - if err := data.Set(e); err != nil { - return err + case []interface{}: + if ot.IsObject() { + m := make([]map[string]interface{}, 0, len(v)) + for _, e := range v { + m = append(m, e.(map[string]interface{})) + } + if err := coll.FromMapSlice(recursive, m); err != nil { + return fmt.Errorf("%q.FromMapSlice: %w", a, err) } - if err := coll.AppendData(data); err != nil { - return err + } else { + data := scratch.Get() + defer scratch.Put(data) + for _, e := range v { + if err := data.Set(e); err != nil { + return err + } + if err := coll.AppendData(data); err != nil { + return err + } } } + default: + return fmt.Errorf("%q is a collection, needs []interface{} or []map[string]interface{}, got %T", a, v) } - default: - return fmt.Errorf("%q is a collection, needs []interface{} or []map[string]interface{}, got %T", a, v) - } - if err := O.Set(a, coll); err != nil { - return fmt.Errorf("%q.Set(%v): %w", a, coll, err) + if err = O.Set(a, coll); err != nil { + return fmt.Errorf("%q.Set(%v): %w", a, coll, err) + } + return nil + }(); err != nil { + return err } } else if ot.ObjectType.Attributes != nil { // Object case - if newO, err := ot.NewObject(); err != nil { + newO, err := ot.NewObject() + if err != nil { return fmt.Errorf("%q.FromMap: %w", a, err) - } else if err := newO.FromMap(recursive, v.(map[string]interface{})); err != nil { + } + if err := newO.FromMap(recursive, v.(map[string]interface{})); err != nil { + newO.Close() return fmt.Errorf("%q.FromMap: %w", a, err) - } else if err := O.Set(a, newO); err != nil { + } + err = O.Set(a, newO) + newO.Close() + if err != nil { return fmt.Errorf("%q.Set(%v): %w", a, newO.ObjectType, err) } } else if err := O.Set(a, v); err != nil { // Plain type case @@ -453,6 +468,7 @@ func (O *Object) FromJSON(dec *json.Decoder) error { return fmt.Errorf("key %q not found", k) } var v interface{} + var C func() error if a.ObjectType.CollectionOf != nil { coll, err := a.ObjectType.NewCollection() if err != nil { @@ -462,6 +478,7 @@ func (O *Object) FromJSON(dec *json.Decoder) error { return fmt.Errorf("%q.FromJSON: %w", k, err) } v = coll + C = coll.Close } else if a.ObjectType.IsObject() { obj, err := a.ObjectType.NewObject() if err != nil { @@ -471,13 +488,18 @@ func (O *Object) FromJSON(dec *json.Decoder) error { return fmt.Errorf("%q.FromJSON: %w", k, err) } v = obj + C = obj.Close } else { if tok, err = dec.Token(); err != nil { return err } v = tok } - if err = O.Set(k, v); err != nil { + err = O.Set(k, v) + if C != nil { + C() + } + if err != nil { return fmt.Errorf("%q.Set(%v): %w", k, v, err) } if !dec.More() { @@ -506,9 +528,12 @@ func (O ObjectCollection) FromMapSlice(recursive bool, m []map[string]interface{ return fmt.Errorf("%d.FromMapSlice: %w", i, err) } if err := elt.FromMap(recursive, o); err != nil { + elt.Close() return fmt.Errorf("%d.FromMapSlice: %w", i, err) } - if err := O.Append(elt); err != nil { + err = O.Append(elt) + elt.Close() + if err != nil { return err } } @@ -529,10 +554,14 @@ func (O ObjectCollection) FromJSON(dec *json.Decoder) error { if err != nil { return err } - if err = elt.FromJSON(dec); err != nil { + err = elt.FromJSON(dec) + if err != nil { + elt.Close() return err } - if err = O.Append(elt); err != nil { + err = O.Append(elt) + elt.Close() + if err != nil { return err } if !dec.More() { @@ -798,6 +827,15 @@ type ObjectType struct { FsPrecision uint8 } +// AttributeNames returns the Attributes' names ordered as on the database (by ObjectAttribute.Sequence). +func (t *ObjectType) AttributeNames() []string { + names := make([]string, len(t.Attributes)) + for k, v := range t.Attributes { + names[v.Sequence] = k + } + return names +} + func (t *ObjectType) String() string { if t.Schema == "" { return t.Name @@ -823,18 +861,22 @@ func (c *conn) GetObjectType(name string) (*ObjectType, error) { if !strings.Contains(name, "\"") { name = strings.ToUpper(name) } - logger := getLogger() - if logger != nil { - logger.Log("msg", "GetObjectType", "name", name) - } - cName := C.CString(name) - defer func() { C.free(unsafe.Pointer(cName)) }() - objType := (*C.dpiObjectType)(C.malloc(C.sizeof_void)) c.mu.RLock() defer c.mu.RUnlock() if c.dpiConn == nil { return nil, driver.ErrBadConn } + if t := c.objTypes[name]; t != nil { + if t.drv != nil { + return t, nil + } + // t is closed + delete(c.objTypes, name) + } + + cName := C.CString(name) + defer func() { C.free(unsafe.Pointer(cName)) }() + objType := (*C.dpiObjectType)(C.malloc(C.sizeof_void)) if err := c.checkExec(func() C.int { return C.dpiConn_getObjectType(c.dpiConn, cName, C.uint32_t(len(name)), &objType) }); err != nil { @@ -848,7 +890,11 @@ func (c *conn) GetObjectType(name string) (*ObjectType, error) { } t := &ObjectType{drv: c.drv, dpiObjectType: objType} err := t.init() - return t, err + if err != nil { + return t, err + } + c.objTypes[name] = t + return t, nil } // NewObject returns a new Object with ObjectType type. @@ -868,6 +914,15 @@ func (t *ObjectType) NewObject() (*Object, error) { return nil, err } O := &Object{ObjectType: t, dpiObject: obj} + if true { + runtime.SetFinalizer(O, func(O *Object) { + if O == nil || O.dpiObject == nil { + return + } + fmt.Printf("WARN Object %v is not closed\n", O) + O.Close() + }) + } // https://github.com/oracle/odpi/issues/112#issuecomment-524479532 return O, O.ResetAttributes() } @@ -1005,6 +1060,7 @@ func (t *ObjectType) init() error { dpiObjectAttr: attr, Name: C.GoStringN(attrInfo.name, C.int(attrInfo.nameLength)), ObjectType: sub, + Sequence: uint32(i), } if sub.dpiObjectType != nil { C.dpiObjectType_addRef(sub.dpiObjectType) @@ -1049,6 +1105,7 @@ type ObjectAttribute struct { *ObjectType dpiObjectAttr *C.dpiObjectAttr Name string + Sequence uint32 } // Close the ObjectAttribute. diff --git a/vendor/github.com/godror/godror/odpi/embed/require.go b/vendor/github.com/godror/godror/odpi/embed/require.go index 03e1b186..3fe65a67 100644 --- a/vendor/github.com/godror/godror/odpi/embed/require.go +++ b/vendor/github.com/godror/godror/odpi/embed/require.go @@ -2,6 +2,7 @@ // // SPDX-License-Identifier: UPL-1.0 OR Apache-2.0 +//go:build require // +build require // Package embed contains required external dependencies from ODPI-C diff --git a/vendor/github.com/godror/godror/odpi/include/require.go b/vendor/github.com/godror/godror/odpi/include/require.go index fe501680..1d040ac7 100644 --- a/vendor/github.com/godror/godror/odpi/include/require.go +++ b/vendor/github.com/godror/godror/odpi/include/require.go @@ -2,6 +2,7 @@ // // SPDX-License-Identifier: UPL-1.0 OR Apache-2.0 +//go:build require // +build require // Package include contains required external dependencies from ODPI-C diff --git a/vendor/github.com/godror/godror/odpi/src/require.go b/vendor/github.com/godror/godror/odpi/src/require.go index 807dbe09..82994210 100644 --- a/vendor/github.com/godror/godror/odpi/src/require.go +++ b/vendor/github.com/godror/godror/odpi/src/require.go @@ -2,6 +2,7 @@ // // SPDX-License-Identifier: UPL-1.0 OR Apache-2.0 +//go:build require // +build require // Package src contains required external dependencies from ODPI-C diff --git a/vendor/github.com/godror/godror/orahlp.go b/vendor/github.com/godror/godror/orahlp.go index d0b1e159..a63088e3 100644 --- a/vendor/github.com/godror/godror/orahlp.go +++ b/vendor/github.com/godror/godror/orahlp.go @@ -81,7 +81,7 @@ func (intType) ConvertValue(v interface{}) (driver.Value, error) { } return strconv.ParseInt(string(*x), 10, 64) default: - return nil, fmt.Errorf("unknown type %T", v) + return nil, fmt.Errorf("%T: %w", v, errUnknownType) } } @@ -128,7 +128,7 @@ func (floatType) ConvertValue(v interface{}) (driver.Value, error) { } return strconv.ParseFloat(string(*x), 64) default: - return nil, fmt.Errorf("unknown type %T", v) + return nil, fmt.Errorf("%T: %w", v, errUnknownType) } } @@ -165,7 +165,7 @@ func (numType) ConvertValue(v interface{}) (driver.Value, error) { err := n.Compose(x.Decompose(nil)) return string(n), err default: - return nil, fmt.Errorf("unknown type %T", v) + return nil, fmt.Errorf("%T: %w", v, errUnknownType) } } func (n Number) String() string { return string(n) } @@ -199,7 +199,7 @@ func (n *Number) Scan(v interface{}) error { case decimalDecompose: return n.Compose(x.Decompose(nil)) default: - return fmt.Errorf("unknown type %T", v) + return fmt.Errorf("%T: %w", v, errUnknownType) } return nil } @@ -616,3 +616,81 @@ func Raw(ctx context.Context, ex Execer, f func(driverConn Conn) error) error { defer cx.Close() return f(cx) } + +// ConnPool is a concurrent-safe fixed size connection pool. +// +// This is a very simple implementation, usable, but serving more as an example - if possible, use *sql.DB ! +type ConnPool struct { + get func(context.Context) (*sql.Conn, error) + freeList chan *PooledConn +} + +// NewConnPool returns a connection pool that acquires new connections from the given pool (an *sql.DB for example). +// +// The default size is 1. +func NewConnPool(pool interface { + Conn(context.Context) (*sql.Conn, error) +}, size int) *ConnPool { + if size < 1 { + size = 1 + } + return &ConnPool{get: pool.Conn, freeList: make(chan *PooledConn, size)} +} + +// Conn returns a pooled connection if there exists one, or creates a new if not. +// +// You must call Close on the returned PooledConn to return it to the pool! +func (p *ConnPool) Conn(ctx context.Context) (*PooledConn, error) { + select { + case c := <-p.freeList: + return c, nil + default: + } + c, err := p.get(ctx) + if err != nil { + return nil, err + } + return &PooledConn{Conn: c, pool: p}, nil +} + +// Close releases all the pooled resources. +func (p *ConnPool) Close() error { + if p == nil || p.freeList == nil { + return nil + } + freeList := p.freeList + p.get, p.freeList = nil, nil + close(freeList) + var firstErr error + for c := range freeList { + if c != nil && c.Conn != nil { + if err := c.Conn.Close(); err != nil && firstErr == nil { + firstErr = err + } + } + } + return firstErr +} + +// PooledConn is a wrapped *sql.Conn that puts back the Conn into the pool on Close is possible (or does a real Close when the pool is full). +type PooledConn struct { + *sql.Conn + pool *ConnPool +} + +// Close tries to return the connection to the pool, or Closes it when the pools is full. +func (c *PooledConn) Close() error { + if c == nil || c.Conn == nil { + return nil + } + if c.pool != nil && c.pool.freeList != nil { + select { + case c.pool.freeList <- c: + return nil + default: + } + } + conn := c.Conn + c.Conn, c.pool = nil, nil + return conn.Close() +} diff --git a/vendor/github.com/godror/godror/queue.go b/vendor/github.com/godror/godror/queue.go index f3fbf244..45fc6d05 100644 --- a/vendor/github.com/godror/godror/queue.go +++ b/vendor/github.com/godror/godror/queue.go @@ -85,9 +85,8 @@ func NewQueue(ctx context.Context, execer Execer, name string, payloadObjectType if payloadObjectTypeName != "" { if Q.PayloadObjectType, err = Q.conn.GetObjectType(payloadObjectTypeName); err != nil { return nil, err - } else { - payloadType = Q.PayloadObjectType.dpiObjectType } + payloadType = Q.PayloadObjectType.dpiObjectType } value := C.CString(name) err = Q.conn.checkExec(func() C.int { diff --git a/vendor/github.com/godror/godror/rows.go b/vendor/github.com/godror/godror/rows.go index abc5c22b..4b1d4667 100644 --- a/vendor/github.com/godror/godror/rows.go +++ b/vendor/github.com/godror/godror/rows.go @@ -368,7 +368,7 @@ func (r *rows) Next(dest []driver.Value) error { }); err != nil { return fmt.Errorf("getReturnedData[%d]: %w", i, err) } - r.data[i] = dpiDataSlice(data, n) + r.data[i] = unsafe.Slice(data, n) //fmt.Printf("data %d=%+v\n%+v\n", n, data, r.data[i][0]) } } diff --git a/vendor/github.com/godror/godror/stmt.go b/vendor/github.com/godror/godror/stmt.go index 2930152c..f0d00ed5 100644 --- a/vendor/github.com/godror/godror/stmt.go +++ b/vendor/github.com/godror/godror/stmt.go @@ -41,6 +41,7 @@ import ( "github.com/godror/knownpb/timestamppb" ) +// NullTime is an alias for sql.NullTime type NullTime = sql.NullTime var nullTime interface{} = nil @@ -109,11 +110,11 @@ func (o stmtOptions) PrefetchCount() int { } } func (o stmtOptions) FetchArraySize() int { - if n := o.fetchArraySize; n <= 0 { + n := o.fetchArraySize + if n <= 0 { return DefaultFetchArraySize - } else { - return n } + return n } func (o stmtOptions) PlSQLArrays() bool { return o.plSQLArrays } @@ -486,8 +487,7 @@ func (st *statement) ExecContext(ctx context.Context, args []driver.NamedValue) if n == 0 { st.data[i] = st.data[i][:0] } else { - //st.data[i] = unsafe.Slice(data, n) // go1.17 - st.data[i] = dpiDataSlice(data, n) + st.data[i] = unsafe.Slice(data, n) } } dest := st.dests[i] @@ -947,7 +947,9 @@ func (st *statement) bindVarTypeSwitch(info *argInfo, get *dataGetter, value int nilPtr := false logger := getLogger() if logger != nil { - logger.Log("msg", "bindVarTypeSwitch", "info", info, "value", fmt.Sprintf("[%T]%v", value, value)) + defer func() { + logger.Log("msg", "bindVarTypeSwitch", "info", info, "value", fmt.Sprintf("[%T]%v", value, value)) + }() } vlr, isValuer := value.(driver.Valuer) @@ -1238,7 +1240,27 @@ func (st *statement) bindVarTypeSwitch(info *argInfo, get *dataGetter, value int logger.Log("msg", "bindVarTypeSwitch default", "value", value) } if !isValuer { - return value, fmt.Errorf("unknown type %T", value) + if ot, err := st.conn.getStructObjectType(value, ""); err != nil { + if logger != nil { + logger.Log("msg", "getStructObjectType", "value", fmt.Sprintf("%T", value), "error", err) + } + if !errors.Is(err, errUnknownType) { + return value, err + } + } else { + info.objType = ot.dpiObjectType + info.typ, info.natTyp = C.DPI_ORACLE_TYPE_OBJECT, C.DPI_NATIVE_TYPE_OBJECT + info.set = func(dv *C.dpiVar, data []C.dpiData, vv interface{}) error { + return st.dataSetObjectStruct(ot, dv, &data[0], vv) + } + if info.isOut { + *get = func(v interface{}, data []C.dpiData) error { + return st.dataGetObjectStruct(ot, v, data) + } + } + return value, nil + } + return value, fmt.Errorf("bindVarTypeSwitch(%T): %w", value, errUnknownType) } oval := value var err error @@ -2636,38 +2658,181 @@ func (c *conn) dataSetObject(dv *C.dpiVar, data []C.dpiData, vv interface{}) err return nil } +// dataSetObjectStructObj creates an ot typed object from rv. +func (c *conn) dataSetObjectStructObj(ot *ObjectType, rv reflect.Value) (*Object, error) { + logger := getLogger() + if rv.Type().Kind() == reflect.Ptr { + rv = rv.Elem() + } + if rv.IsZero() { + return nil, nil + } + rvt := rv.Type() + switch rvt.Kind() { + case reflect.Slice: + coll, err := ot.NewCollection() + if err != nil { + return nil, err + } + if logger != nil { + logger.Log("msg", "collection", "obj", coll) + } + for i, n := 0, rv.Len(); i < n; i++ { + if logger != nil { + logger.Log("msg", "dataSetObjectStructObj", "i", i, "collectionOf", ot.CollectionOf, "elt", rv.Index(i).Interface()) + } + if !ot.CollectionOf.IsObject() { + coll.Append(rv.Index(i).Interface()) + } else { + sub, err := c.dataSetObjectStructObj(ot.CollectionOf, rv.Index(i)) + if err != nil { + return nil, fmt.Errorf("%d. dataSetObjectStruct: %w", i, err) + } + err = coll.Append(sub) + sub.Close() // ? + if err != nil { + return nil, err + } + } + } + return coll.Object, nil + + case reflect.Struct: + var obj *Object + if ot.CollectionOf == nil { + var err error + if obj, err = ot.NewObject(); err != nil { + return nil, err + } + } + for i, n := 0, rvt.NumField(); i < n; i++ { + f := rvt.Field(i) + if !f.IsExported() || f.Name == "ObjectTypeName" { + continue + } + rf := rv.FieldByIndex(f.Index) + if obj == nil { + // we must find the slice in the struct + if f.Type.Kind() != reflect.Slice { + continue + } + return c.dataSetObjectStructObj(ot, rf) + } + nm, typ, _ := parseStructTag(f.Tag) + if nm == "-" { + continue + } + if nm == "" { + nm = strings.ToUpper(f.Name) + } + attr, ok := obj.Attributes[nm] + if !ok { + return nil, fmt.Errorf("%s[%q]: %w", obj, nm, ErrNoSuchKey) + } + var ad Data + if !attr.IsObject() { + ad.Set(rv.Interface()) + } else { + ot := attr.ObjectType + if ot == nil && typ != "" { + var err error + if ot, err = c.GetObjectType(typ); err != nil { + return nil, err + } + } + if logger != nil { + logger.Log("msg", "dataSetObjectStructObj", "name", nm, "tag", f.Tag, "ot", ot, "typ", typ) + } + sub, err := c.dataSetObjectStructObj(ot, rf) + if err != nil { + return nil, err + } + ad.SetObject(sub) + } + if err := obj.SetAttribute(nm, &ad); err != nil { + if logger != nil { + logger.Log("msg", "SetAttribute", "obj", ot.Name, "nm", nm, + "index", f.Index, "kind", f.Type.Kind(), + "value", rv.Interface(), "data", ad.Get(), + "dataNative", ad.NativeTypeNum, "dataObject", ad.ObjectType, + "attrNative", attr.NativeTypeNum, "dataObject", attr.ObjectType, + ) + } + return nil, fmt.Errorf("SetAttribute(%q): %w", nm, err) + } + } + return obj, nil + default: + return nil, fmt.Errorf("%T: not a struct or a slice: %w", rv.Interface(), errUnknownType) + } +} + +// dataSetObjectStruct reads from vv, writes it to an ot typed object, and puts it into data. +func (c *conn) dataSetObjectStruct(ot *ObjectType, dv *C.dpiVar, data *C.dpiData, vv interface{}) error { + if ot == nil { + panic("dataSetObjectStruct with nil ObjectType") + } + logger := getLogger() + rv := reflect.ValueOf(vv) + if rv.Type().Kind() == reflect.Ptr { + rv = rv.Elem() + } + if logger != nil { + logger.Log("msg", "dataSetObjectStruct", "v", fmt.Sprintf("%T", vv)) + } + if vv == nil || rv.IsZero() { + return nil + } + obj, err := c.dataSetObjectStructObj(ot, rv) + if err != nil { + return err + } + + if obj.dpiObject == nil { + data.isNull = 1 + return nil + } + data.isNull = 0 + if err := c.checkExec(func() C.int { return C.dpiVar_setFromObject(dv, C.uint32_t(0), obj.dpiObject) }); err != nil { + if logger != nil { + logger.Log("msg", "setFromObject", "i", 0, "dv", dv, "obj", obj, "error", err) + } + return fmt.Errorf("setFromObject[%d]: %w", 0, err) + } + return obj.Close() +} func (c *conn) dataGetObject(v interface{}, data []C.dpiData) error { logger := getLogger() switch out := v.(type) { - case *Object: + case *ObjectCollection: d := Data{ - ObjectType: out.ObjectType, + ObjectType: out.Object.ObjectType, dpiData: data[0], } if logger != nil { - logger.Log("msg", "dataGetObject", "v", fmt.Sprintf("%T", v), "d", d) + logger.Log("msg", "dataGetObject", "typ", "ObjectCollection", "v", fmt.Sprintf("%T", v), "d", d) } obj := d.GetObject() if obj == nil { - *out = Object{ObjectType: d.ObjectType} + *out = ObjectCollection{} } else { - *out = *obj + // copy the underlying object + obj2 := *obj + *out = ObjectCollection{Object: &obj2} } - case *ObjectCollection: + case *Object: d := Data{ - ObjectType: out.Collection().ObjectType, + ObjectType: out.ObjectType, dpiData: data[0], } if logger != nil { - logger.Log("msg", "dataGetObject", "v", fmt.Sprintf("%T", v), "d", d) + logger.Log("msg", "dataGetObject", "typ", "Object", "v", fmt.Sprintf("%T", v), "d", d) } obj := d.GetObject() if obj == nil { - *out = ObjectCollection{} + *out = Object{ObjectType: d.ObjectType} } else { - // copy the underlying object - obj2 := *obj - *out = ObjectCollection{Object: &obj2} + *out = *obj } case ObjectScanner: d := Data{ @@ -2675,20 +2840,293 @@ func (c *conn) dataGetObject(v interface{}, data []C.dpiData) error { dpiData: data[0], } if logger != nil { - logger.Log("msg", "dataGetObjectScanner", "v", fmt.Sprintf("%T", v), "d", d, "obj", d.GetObject()) + logger.Log("msg", "dataGetObjectScanner", "typ", "ObjectScanner", "v", fmt.Sprintf("%T", v), "d", d, "obj", d.GetObject()) } obj := d.GetObject() err := out.Scan(obj) obj.Close() return err - default: + default: return fmt.Errorf("dataGetObject not implemented for type %T (maybe you need to implement the Scan method)", v) } return nil } +// dataGetObjectStructObj reads an object and writes it to rv. +func (c *conn) dataGetObjectStructObj(rv reflect.Value, obj *Object) error { + logger := getLogger() + rvt := rv.Type() + + if obj == nil { + rv.Set(reflect.Zero(rvt)) + return nil + } + if logger != nil { + logger.Log("msg", "dataGetObjectStructObj", "kind", rvt.Kind(), "collectionOf", obj.CollectionOf) + } + if obj.CollectionOf != nil && rvt.Kind() == reflect.Slice { + coll := obj.Collection() + if logger != nil { + length, _ := coll.Len() + logger.Log("msg", "dataGetObjectStructObj", "length", length, "cap", rv.Cap()) + } + orig := rv + rv.SetLen(0) + first := true + re := reflect.New(rvt.Elem()).Elem() + ret := re.Type() + for i, err := coll.First(); err == nil; i, err = coll.Next(i) { + if err != nil { + if errors.Is(err, io.EOF) { + break + } + return err + } + if first { + first = false + length, err := coll.Len() + if err != nil { + return err + } + if rv.Cap() < length { + rv = reflect.MakeSlice(rvt, 0, length) + } + } + var d Data + if err := coll.GetItem(&d, i); err != nil { + return err + } + elt := d.Get() + switch x := elt.(type) { + case *Object: + err := c.dataGetObjectStructObj(re, x) + x.Close() + if err != nil { + return err + } + default: + ev := reflect.ValueOf(elt) + if ev.Type() != ret { + ev = ev.Convert(ret) + } + re.Set(ev) + } + rv = reflect.Append(rv, re) + } + orig.Set(rv) + if logger != nil { + length, _ := coll.Len() + logger.Log("msg", "dataGetObjectStructObj", "coll", length, "rv", orig.Len()) + } + return nil + } + +Loop: + for i, n := 0, rvt.NumField(); i < n; i++ { + f := rvt.Field(i) + if !f.IsExported() || f.Name == "ObjectTypeName" { + continue + } + rf := rv.FieldByIndex(f.Index) + if obj.CollectionOf != nil { + // we must find the slice in the struct + if f.Type.Kind() != reflect.Slice { + continue + } + return c.dataGetObjectStructObj(rf, obj) + } + nm, typ, _ := parseStructTag(f.Tag) + if nm == "-" { + continue + } + fieldTag := typ + if fieldTag == "" { + fieldTag = nm + } + if logger != nil { + logger.Log("msg", "dataGetObjectStruct", "fieldTag", fieldTag, "nm", nm, "tag", f.Tag, "name", f.Name) + } + + if nm == "" { + nm = strings.ToUpper(f.Name) + } + var ad Data + if err := obj.GetAttribute(&ad, nm); err != nil { + return fmt.Errorf("GetAttribute(%q): %w", nm, err) + } + v := ad.Get() + switch x := v.(type) { + case *Object: + err := c.dataGetObjectStructObj(rf, x) + x.Close() + if err != nil { + return err + } + x.Close() + continue Loop + case string: + if rf.Kind() == reflect.String { + rf.SetString(x) + } else { + rf.SetBytes([]byte(x)) + } + case []byte: + if rf.Kind() == reflect.String { + rf.SetString(string(x)) + } else { + rf.SetBytes(x) + } + default: + switch vv := reflect.ValueOf(v); vv.Kind() { + case reflect.Uint, reflect.Uint16, reflect.Uint32, reflect.Uint64: + rf.SetUint(ad.GetUint64()) + case reflect.Int, reflect.Int16, reflect.Int32, reflect.Int64: + rf.SetInt(ad.GetInt64()) + case reflect.Float32: + rf.SetFloat(float64(ad.GetFloat32())) + case reflect.Float64: + rf.SetFloat(ad.GetFloat64()) + default: + // TODO: slice/Collection of sth + if kind := vv.Kind(); kind == reflect.Struct || (kind == reflect.Ptr && vv.Elem().Kind() == reflect.Struct) { + if err := c.dataGetObjectStruct(obj.ObjectType.Attributes[nm].ObjectType, v, []C.dpiData{ad.dpiData}); err != nil { + return err + } + } else if kind == reflect.Slice && + (vv.Elem().Kind() == reflect.Struct || (vv.Elem().Kind() == reflect.Ptr && vv.Elem().Elem().Kind() == reflect.Struct)) { + ot, err := c.getStructObjectType(v, fieldTag) + if err != nil { + return err + } + if err := c.dataGetObjectStruct(ot, v, []C.dpiData{ad.dpiData}); err != nil { + return err + } + } else { + if f.Type != vv.Type() { + vv = vv.Convert(f.Type) + } + rf.Set(vv) + } + } + } + } + return nil +} + +// dataGetObjectStruct reads the object from data and writes it to v. +func (c *conn) dataGetObjectStruct(ot *ObjectType, v interface{}, data []C.dpiData) error { + logger := getLogger() + // Pointer to a struct with ObjectTypeName field and optional "godror" struct tags for struct field-object attribute mapping. + rv := reflect.ValueOf(v) + if rv.Type().Kind() == reflect.Ptr { + rv = rv.Elem() + } + if kind := rv.Type().Kind(); kind != reflect.Struct && kind != reflect.Slice { + return fmt.Errorf("dataGetObjectStruct: not a struct: %T: %w", v, errUnknownType) + } + d := Data{ + ObjectType: ot, + dpiData: data[0], + } + if logger != nil { + logger.Log("msg", "dataGetObjectStruct", "v", fmt.Sprintf("%T", v), "d", d) + } + obj := d.GetObject() + err := c.dataGetObjectStructObj(rv, obj) + obj.Close() + return err +} + +// ObjectTypeName is for allowing reflection-based Object - struct mapping. +// +// Include an ObjectTypeName in your struct, and set the "godror" struct tag to the type name. +type ObjectTypeName struct{} + +func parseStructTag(s reflect.StructTag) (tag, typ string, opts map[string]string) { + tag = s.Get(StructTag) + if strings.IndexByte(tag, ',') < 0 { + return tag, typ, opts + } + vv := strings.Split(tag, ",") + tag, vv = vv[0], vv[1:] + for _, s := range vv { + if strings.HasPrefix(s, "type=") { + typ = strings.TrimPrefix(s, "type=") + continue + } + if i := strings.IndexByte(s, '='); i >= 0 { + if opts == nil { + opts = make(map[string]string, len(vv)) + } + opts[s[:i]] = s[i+1:] + } + } + return tag, typ, opts +} + +// StructTag is the prefix that tags godror-specific struct fields +const StructTag = "godror" + +func (c *conn) getStructObjectType(v interface{}, fieldTag string) (*ObjectType, error) { + logger := getLogger() + rv := reflect.ValueOf(v) + if rv.Type().Kind() == reflect.Ptr { + rv = rv.Elem() + } + rvt := rv.Type() + switch rvt.Kind() { + case reflect.Slice: + if logger != nil { + logger.Log("msg", "getStructObjectType", "fieldTag", fieldTag) + } + return c.GetObjectType(fieldTag) + + case reflect.Struct: + const otnName = "ObjectTypeName" + otnType := reflect.TypeOf(ObjectTypeName{}) + otFt, ok := rvt.FieldByName(otnName) + if !ok { + for i, n := 0, rvt.NumField(); i < n; i++ { + f := rvt.Field(i) + if f.Name == otnName || f.Type == otnType { + otFt, ok = f, true + break + } + } + if !ok { + return nil, fmt.Errorf("no ObjectTypeName field found: %w", errUnknownType) + } + } + var otName string + if s := otFt.Tag; s.Get(StructTag) != "" { + otName, _, _ = parseStructTag(s) + } else { + for i, n := 0, rvt.NumField(); i < n; i++ { + f := rvt.Field(i) + if f.Name == otnName || f.Type == otnType { + continue + } + if f.Type.Kind() == reflect.Slice { + _, otName, _ = parseStructTag(f.Tag) + break + } + } + } + if otName == "" { + return nil, fmt.Errorf("%T: no ObjectTypeName specified: %w", v, errUnknownType) + } + if logger != nil { + logger.Log("msg", "parseStructTag", "name", otName) + } + return c.GetObjectType(otName) + + default: + return nil, fmt.Errorf("getStructObjectType: %T: not a struct: %w", v, errUnknownType) + } +} + func (c *conn) dataGetJSON(v interface{}, data []C.dpiData) error { switch out := v.(type) { @@ -2850,8 +3288,10 @@ func (c *conn) dataGetJSONString(v interface{}, data []C.dpiData) error { } var ( + // ErrNotImplemented is returned when the functionality is not implemented ErrNotImplemented = errors.New("not implemented") - ErrBadDate = errors.New("date out of range (year must be between -4713 and 9999, and must not be 0)") + // ErrBadDate is returned when the date is not assignable to Oracle DATE type + ErrBadDate = errors.New("date out of range (year must be between -4713 and 9999, and must not be 0)") ) // CheckNamedValue is called before passing arguments to the driver @@ -3083,16 +3523,6 @@ func stmtSetFinalizer(st *statement, tag string) { }) } -func dpiDataSlice(data *C.dpiData, n C.uint) []C.dpiData { - // https://github.com/golang/go/wiki/cgo#Turning_C_arrays_into_Go_slices - /* - var theCArray *C.YourType = C.getTheArray() - length := C.getTheArrayLength() - slice := (*[maxArraySize]C.YourType)(unsafe.Pointer(theCArray))[:length:length] - */ - return (*(*[maxArraySize]C.dpiData)(unsafe.Pointer(data)))[:int(n):int(n)] -} - func dpiData_getBytes(data *C.dpiData) []byte { db := ((*C.dpiBytes)(unsafe.Pointer(&data.value))) return ((*[32767]byte)(unsafe.Pointer(db.ptr)))[:db.length:db.length] diff --git a/vendor/github.com/godror/godror/version.go b/vendor/github.com/godror/godror/version.go index 941eafa1..ffb8c6d6 100644 --- a/vendor/github.com/godror/godror/version.go +++ b/vendor/github.com/godror/godror/version.go @@ -9,4 +9,4 @@ package godror // go:generate bash -c "echo main>odpi-version; set -x; curl -L https://github.com/oracle/odpi/archive/refs/heads/main.tar.gz | tar xzvf - odpi-$(cat odpi-version)/{embed,include,src,CONTRIBUTING.md,README.md,LICENSE.txt} && cp -a odpi/embed/require.go odpi-$(cat odpi-version)/embed/ && cp -a odpi/include/require.go odpi-$(cat odpi-version)/include/ && cp -a odpi/src/require.go odpi-$(cat odpi-version)/src/ && rm -rf odpi && mv odpi-$(cat odpi-version) odpi; rm -f odpi-{,v}version; git status --porcelain -- odpi/*/*.go | sed -n -e '/^ D / { s/^ D //;p;}' | xargs -r git checkout -- " // Version of this driver -var Version = "v0.33.3" +var Version = "v0.34.0" diff --git a/vendor/github.com/klauspost/compress/README.md b/vendor/github.com/klauspost/compress/README.md index c7cf1a20..ad5c63a8 100644 --- a/vendor/github.com/klauspost/compress/README.md +++ b/vendor/github.com/klauspost/compress/README.md @@ -17,6 +17,16 @@ This package provides various compression algorithms. # changelog +* July 13, 2022 (v1.15.8) + + * gzip: fix stack exhaustion bug in Reader.Read https://github.com/klauspost/compress/pull/641 + * s2: Add Index header trim/restore https://github.com/klauspost/compress/pull/638 + * zstd: Optimize seqdeq amd64 asm by @greatroar in https://github.com/klauspost/compress/pull/636 + * zstd: Improve decoder memcopy https://github.com/klauspost/compress/pull/637 + * huff0: Pass a single bitReader pointer to asm by @greatroar in https://github.com/klauspost/compress/pull/634 + * zstd: Branchless getBits for amd64 w/o BMI2 by @greatroar in https://github.com/klauspost/compress/pull/640 + * gzhttp: Remove header before writing https://github.com/klauspost/compress/pull/639 + * June 29, 2022 (v1.15.7) * s2: Fix absolute forward seeks https://github.com/klauspost/compress/pull/633 diff --git a/vendor/github.com/klauspost/compress/zstd/bytebuf.go b/vendor/github.com/klauspost/compress/zstd/bytebuf.go index 4493baa7..2ad02070 100644 --- a/vendor/github.com/klauspost/compress/zstd/bytebuf.go +++ b/vendor/github.com/klauspost/compress/zstd/bytebuf.go @@ -23,7 +23,7 @@ type byteBuffer interface { readByte() (byte, error) // Skip n bytes. - skipN(n int) error + skipN(n int64) error } // in-memory buffer @@ -62,9 +62,12 @@ func (b *byteBuf) readByte() (byte, error) { return r, nil } -func (b *byteBuf) skipN(n int) error { +func (b *byteBuf) skipN(n int64) error { bb := *b - if len(bb) < n { + if n < 0 { + return fmt.Errorf("negative skip (%d) requested", n) + } + if int64(len(bb)) < n { return io.ErrUnexpectedEOF } *b = bb[n:] @@ -120,9 +123,9 @@ func (r *readerWrapper) readByte() (byte, error) { return r.tmp[0], nil } -func (r *readerWrapper) skipN(n int) error { - n2, err := io.CopyN(ioutil.Discard, r.r, int64(n)) - if n2 != int64(n) { +func (r *readerWrapper) skipN(n int64) error { + n2, err := io.CopyN(ioutil.Discard, r.r, n) + if n2 != n { err = io.ErrUnexpectedEOF } return err diff --git a/vendor/github.com/klauspost/compress/zstd/decoder.go b/vendor/github.com/klauspost/compress/zstd/decoder.go index 286c8f9d..d212f473 100644 --- a/vendor/github.com/klauspost/compress/zstd/decoder.go +++ b/vendor/github.com/klauspost/compress/zstd/decoder.go @@ -348,6 +348,9 @@ func (d *Decoder) DecodeAll(input, dst []byte) ([]byte, error) { frame.history.setDict(&dict) } if frame.WindowSize > d.o.maxWindowSize { + if debugDecoder { + println("window size exceeded:", frame.WindowSize, ">", d.o.maxWindowSize) + } return dst, ErrWindowSizeExceeded } if frame.FrameContentSize != fcsUnknown { diff --git a/vendor/github.com/klauspost/compress/zstd/encoder.go b/vendor/github.com/klauspost/compress/zstd/encoder.go index e6b1d01c..7aaaedb2 100644 --- a/vendor/github.com/klauspost/compress/zstd/encoder.go +++ b/vendor/github.com/klauspost/compress/zstd/encoder.go @@ -528,8 +528,8 @@ func (e *Encoder) EncodeAll(src, dst []byte) []byte { // If a non-single block is needed the encoder will reset again. e.encoders <- enc }() - // Use single segments when above minimum window and below 1MB. - single := len(src) < 1<<20 && len(src) > MinWindowSize + // Use single segments when above minimum window and below window size. + single := len(src) <= e.o.windowSize && len(src) > MinWindowSize if e.o.single != nil { single = *e.o.single } diff --git a/vendor/github.com/klauspost/compress/zstd/encoder_options.go b/vendor/github.com/klauspost/compress/zstd/encoder_options.go index 44d8dbd1..a7c5e1aa 100644 --- a/vendor/github.com/klauspost/compress/zstd/encoder_options.go +++ b/vendor/github.com/klauspost/compress/zstd/encoder_options.go @@ -283,7 +283,7 @@ func WithNoEntropyCompression(b bool) EOption { // a decoder is allowed to reject a compressed frame which requests a memory size beyond decoder's authorized range. // For broader compatibility, decoders are recommended to support memory sizes of at least 8 MB. // This is only a recommendation, each decoder is free to support higher or lower limits, depending on local limitations. -// If this is not specified, block encodes will automatically choose this based on the input size. +// If this is not specified, block encodes will automatically choose this based on the input size and the window size. // This setting has no effect on streamed encodes. func WithSingleSegment(b bool) EOption { return func(o *encoderOptions) error { diff --git a/vendor/github.com/klauspost/compress/zstd/framedec.go b/vendor/github.com/klauspost/compress/zstd/framedec.go index fa0a633f..9568a4ba 100644 --- a/vendor/github.com/klauspost/compress/zstd/framedec.go +++ b/vendor/github.com/klauspost/compress/zstd/framedec.go @@ -106,7 +106,7 @@ func (d *frameDec) reset(br byteBuffer) error { } n := uint32(b[0]) | (uint32(b[1]) << 8) | (uint32(b[2]) << 16) | (uint32(b[3]) << 24) println("Skipping frame with", n, "bytes.") - err = br.skipN(int(n)) + err = br.skipN(int64(n)) if err != nil { if debugDecoder { println("Reading discarded frame", err) @@ -231,20 +231,27 @@ func (d *frameDec) reset(br byteBuffer) error { d.crc.Reset() } + if d.WindowSize > d.o.maxWindowSize { + if debugDecoder { + printf("window size %d > max %d\n", d.WindowSize, d.o.maxWindowSize) + } + return ErrWindowSizeExceeded + } + if d.WindowSize == 0 && d.SingleSegment { // We may not need window in this case. d.WindowSize = d.FrameContentSize if d.WindowSize < MinWindowSize { d.WindowSize = MinWindowSize } - } - - if d.WindowSize > uint64(d.o.maxWindowSize) { - if debugDecoder { - printf("window size %d > max %d\n", d.WindowSize, d.o.maxWindowSize) + if d.WindowSize > d.o.maxDecodedSize { + if debugDecoder { + printf("window size %d > max %d\n", d.WindowSize, d.o.maxWindowSize) + } + return ErrDecoderSizeExceeded } - return ErrWindowSizeExceeded } + // The minimum Window_Size is 1 KB. if d.WindowSize < MinWindowSize { if debugDecoder { diff --git a/vendor/github.com/klauspost/compress/zstd/fse_decoder_amd64.go b/vendor/github.com/klauspost/compress/zstd/fse_decoder_amd64.go index e74df436..c881d28d 100644 --- a/vendor/github.com/klauspost/compress/zstd/fse_decoder_amd64.go +++ b/vendor/github.com/klauspost/compress/zstd/fse_decoder_amd64.go @@ -34,8 +34,8 @@ const ( // buildDtable will build the decoding table. func (s *fseDecoder) buildDtable() error { ctx := buildDtableAsmContext{ - stateTable: (*uint16)(&s.stateTable[0]), - norm: (*int16)(&s.norm[0]), + stateTable: &s.stateTable[0], + norm: &s.norm[0], dt: (*uint64)(&s.dt[0]), } code := buildDtable_asm(s, &ctx) diff --git a/vendor/github.com/klauspost/compress/zstd/seqdec_amd64.go b/vendor/github.com/klauspost/compress/zstd/seqdec_amd64.go index 847b322a..7598c101 100644 --- a/vendor/github.com/klauspost/compress/zstd/seqdec_amd64.go +++ b/vendor/github.com/klauspost/compress/zstd/seqdec_amd64.go @@ -55,16 +55,22 @@ func (s *sequenceDecs) decodeSyncSimple(hist []byte) (bool, error) { if s.maxSyncLen == 0 && cap(s.out)-len(s.out) < maxCompressedBlockSize { return false, nil } - useSafe := false - if s.maxSyncLen == 0 && cap(s.out)-len(s.out) < maxCompressedBlockSizeAlloc { - useSafe = true - } - if s.maxSyncLen > 0 && cap(s.out)-len(s.out)-compressedBlockOverAlloc < int(s.maxSyncLen) { - useSafe = true - } - if cap(s.literals) < len(s.literals)+compressedBlockOverAlloc { - useSafe = true - } + + // FIXME: Using unsafe memory copies leads to rare, random crashes + // with fuzz testing. It is therefore disabled for now. + const useSafe = true + /* + useSafe := false + if s.maxSyncLen == 0 && cap(s.out)-len(s.out) < maxCompressedBlockSizeAlloc { + useSafe = true + } + if s.maxSyncLen > 0 && cap(s.out)-len(s.out)-compressedBlockOverAlloc < int(s.maxSyncLen) { + useSafe = true + } + if cap(s.literals) < len(s.literals)+compressedBlockOverAlloc { + useSafe = true + } + */ br := s.br diff --git a/vendor/github.com/klauspost/compress/zstd/seqdec_amd64.s b/vendor/github.com/klauspost/compress/zstd/seqdec_amd64.s index 71e64e06..27e76774 100644 --- a/vendor/github.com/klauspost/compress/zstd/seqdec_amd64.s +++ b/vendor/github.com/klauspost/compress/zstd/seqdec_amd64.s @@ -52,34 +52,46 @@ sequenceDecs_decode_amd64_fill_byte_by_byte: sequenceDecs_decode_amd64_fill_end: // Update offset - MOVQ R9, AX - MOVQ BX, CX - MOVQ DX, R15 - SHLQ CL, R15 - MOVB AH, CL - ADDQ CX, BX - NEGL CX - SHRQ CL, R15 - SHRQ $0x20, AX - TESTQ CX, CX - CMOVQEQ CX, R15 - ADDQ R15, AX - MOVQ AX, 16(R10) + MOVQ R9, AX + MOVQ BX, CX + MOVQ DX, R15 + SHLQ CL, R15 + MOVB AH, CL + SHRQ $0x20, AX + TESTQ CX, CX + JZ sequenceDecs_decode_amd64_of_update_zero + ADDQ CX, BX + CMPQ BX, $0x40 + JA sequenceDecs_decode_amd64_of_update_zero + CMPQ CX, $0x40 + JAE sequenceDecs_decode_amd64_of_update_zero + NEGQ CX + SHRQ CL, R15 + ADDQ R15, AX + +sequenceDecs_decode_amd64_of_update_zero: + MOVQ AX, 16(R10) // Update match length - MOVQ R8, AX - MOVQ BX, CX - MOVQ DX, R15 - SHLQ CL, R15 - MOVB AH, CL - ADDQ CX, BX - NEGL CX - SHRQ CL, R15 - SHRQ $0x20, AX - TESTQ CX, CX - CMOVQEQ CX, R15 - ADDQ R15, AX - MOVQ AX, 8(R10) + MOVQ R8, AX + MOVQ BX, CX + MOVQ DX, R15 + SHLQ CL, R15 + MOVB AH, CL + SHRQ $0x20, AX + TESTQ CX, CX + JZ sequenceDecs_decode_amd64_ml_update_zero + ADDQ CX, BX + CMPQ BX, $0x40 + JA sequenceDecs_decode_amd64_ml_update_zero + CMPQ CX, $0x40 + JAE sequenceDecs_decode_amd64_ml_update_zero + NEGQ CX + SHRQ CL, R15 + ADDQ R15, AX + +sequenceDecs_decode_amd64_ml_update_zero: + MOVQ AX, 8(R10) // Fill bitreader to have enough for the remaining CMPQ SI, $0x08 @@ -107,19 +119,25 @@ sequenceDecs_decode_amd64_fill_2_byte_by_byte: sequenceDecs_decode_amd64_fill_2_end: // Update literal length - MOVQ DI, AX - MOVQ BX, CX - MOVQ DX, R15 - SHLQ CL, R15 - MOVB AH, CL - ADDQ CX, BX - NEGL CX - SHRQ CL, R15 - SHRQ $0x20, AX - TESTQ CX, CX - CMOVQEQ CX, R15 - ADDQ R15, AX - MOVQ AX, (R10) + MOVQ DI, AX + MOVQ BX, CX + MOVQ DX, R15 + SHLQ CL, R15 + MOVB AH, CL + SHRQ $0x20, AX + TESTQ CX, CX + JZ sequenceDecs_decode_amd64_ll_update_zero + ADDQ CX, BX + CMPQ BX, $0x40 + JA sequenceDecs_decode_amd64_ll_update_zero + CMPQ CX, $0x40 + JAE sequenceDecs_decode_amd64_ll_update_zero + NEGQ CX + SHRQ CL, R15 + ADDQ R15, AX + +sequenceDecs_decode_amd64_ll_update_zero: + MOVQ AX, (R10) // Fill bitreader for state updates MOVQ R14, (SP) @@ -198,7 +216,7 @@ sequenceDecs_decode_amd64_skip_update: MOVQ R12, R13 MOVQ R11, R12 MOVQ CX, R11 - JMP sequenceDecs_decode_amd64_adjust_end + JMP sequenceDecs_decode_amd64_after_adjust sequenceDecs_decode_amd64_adjust_offsetB_1_or_0: CMPQ (R10), $0x00000000 @@ -210,7 +228,7 @@ sequenceDecs_decode_amd64_adjust_offset_maybezero: TESTQ CX, CX JNZ sequenceDecs_decode_amd64_adjust_offset_nonzero MOVQ R11, CX - JMP sequenceDecs_decode_amd64_adjust_end + JMP sequenceDecs_decode_amd64_after_adjust sequenceDecs_decode_amd64_adjust_offset_nonzero: CMPQ CX, $0x01 @@ -247,7 +265,7 @@ sequenceDecs_decode_amd64_adjust_temp_valid: MOVQ AX, R11 MOVQ AX, CX -sequenceDecs_decode_amd64_adjust_end: +sequenceDecs_decode_amd64_after_adjust: MOVQ CX, 16(R10) // Check values @@ -356,49 +374,67 @@ sequenceDecs_decode_56_amd64_fill_byte_by_byte: sequenceDecs_decode_56_amd64_fill_end: // Update offset - MOVQ R9, AX - MOVQ BX, CX - MOVQ DX, R15 - SHLQ CL, R15 - MOVB AH, CL - ADDQ CX, BX - NEGL CX - SHRQ CL, R15 - SHRQ $0x20, AX - TESTQ CX, CX - CMOVQEQ CX, R15 - ADDQ R15, AX - MOVQ AX, 16(R10) + MOVQ R9, AX + MOVQ BX, CX + MOVQ DX, R15 + SHLQ CL, R15 + MOVB AH, CL + SHRQ $0x20, AX + TESTQ CX, CX + JZ sequenceDecs_decode_56_amd64_of_update_zero + ADDQ CX, BX + CMPQ BX, $0x40 + JA sequenceDecs_decode_56_amd64_of_update_zero + CMPQ CX, $0x40 + JAE sequenceDecs_decode_56_amd64_of_update_zero + NEGQ CX + SHRQ CL, R15 + ADDQ R15, AX + +sequenceDecs_decode_56_amd64_of_update_zero: + MOVQ AX, 16(R10) // Update match length - MOVQ R8, AX - MOVQ BX, CX - MOVQ DX, R15 - SHLQ CL, R15 - MOVB AH, CL - ADDQ CX, BX - NEGL CX - SHRQ CL, R15 - SHRQ $0x20, AX - TESTQ CX, CX - CMOVQEQ CX, R15 - ADDQ R15, AX - MOVQ AX, 8(R10) + MOVQ R8, AX + MOVQ BX, CX + MOVQ DX, R15 + SHLQ CL, R15 + MOVB AH, CL + SHRQ $0x20, AX + TESTQ CX, CX + JZ sequenceDecs_decode_56_amd64_ml_update_zero + ADDQ CX, BX + CMPQ BX, $0x40 + JA sequenceDecs_decode_56_amd64_ml_update_zero + CMPQ CX, $0x40 + JAE sequenceDecs_decode_56_amd64_ml_update_zero + NEGQ CX + SHRQ CL, R15 + ADDQ R15, AX + +sequenceDecs_decode_56_amd64_ml_update_zero: + MOVQ AX, 8(R10) // Update literal length - MOVQ DI, AX - MOVQ BX, CX - MOVQ DX, R15 - SHLQ CL, R15 - MOVB AH, CL - ADDQ CX, BX - NEGL CX - SHRQ CL, R15 - SHRQ $0x20, AX - TESTQ CX, CX - CMOVQEQ CX, R15 - ADDQ R15, AX - MOVQ AX, (R10) + MOVQ DI, AX + MOVQ BX, CX + MOVQ DX, R15 + SHLQ CL, R15 + MOVB AH, CL + SHRQ $0x20, AX + TESTQ CX, CX + JZ sequenceDecs_decode_56_amd64_ll_update_zero + ADDQ CX, BX + CMPQ BX, $0x40 + JA sequenceDecs_decode_56_amd64_ll_update_zero + CMPQ CX, $0x40 + JAE sequenceDecs_decode_56_amd64_ll_update_zero + NEGQ CX + SHRQ CL, R15 + ADDQ R15, AX + +sequenceDecs_decode_56_amd64_ll_update_zero: + MOVQ AX, (R10) // Fill bitreader for state updates MOVQ R14, (SP) @@ -477,7 +513,7 @@ sequenceDecs_decode_56_amd64_skip_update: MOVQ R12, R13 MOVQ R11, R12 MOVQ CX, R11 - JMP sequenceDecs_decode_56_amd64_adjust_end + JMP sequenceDecs_decode_56_amd64_after_adjust sequenceDecs_decode_56_amd64_adjust_offsetB_1_or_0: CMPQ (R10), $0x00000000 @@ -489,7 +525,7 @@ sequenceDecs_decode_56_amd64_adjust_offset_maybezero: TESTQ CX, CX JNZ sequenceDecs_decode_56_amd64_adjust_offset_nonzero MOVQ R11, CX - JMP sequenceDecs_decode_56_amd64_adjust_end + JMP sequenceDecs_decode_56_amd64_after_adjust sequenceDecs_decode_56_amd64_adjust_offset_nonzero: CMPQ CX, $0x01 @@ -526,7 +562,7 @@ sequenceDecs_decode_56_amd64_adjust_temp_valid: MOVQ AX, R11 MOVQ AX, CX -sequenceDecs_decode_56_amd64_adjust_end: +sequenceDecs_decode_56_amd64_after_adjust: MOVQ CX, 16(R10) // Check values @@ -757,7 +793,7 @@ sequenceDecs_decode_bmi2_skip_update: MOVQ R11, R12 MOVQ R10, R11 MOVQ CX, R10 - JMP sequenceDecs_decode_bmi2_adjust_end + JMP sequenceDecs_decode_bmi2_after_adjust sequenceDecs_decode_bmi2_adjust_offsetB_1_or_0: CMPQ (R9), $0x00000000 @@ -769,7 +805,7 @@ sequenceDecs_decode_bmi2_adjust_offset_maybezero: TESTQ CX, CX JNZ sequenceDecs_decode_bmi2_adjust_offset_nonzero MOVQ R10, CX - JMP sequenceDecs_decode_bmi2_adjust_end + JMP sequenceDecs_decode_bmi2_after_adjust sequenceDecs_decode_bmi2_adjust_offset_nonzero: CMPQ CX, $0x01 @@ -806,7 +842,7 @@ sequenceDecs_decode_bmi2_adjust_temp_valid: MOVQ R13, R10 MOVQ R13, CX -sequenceDecs_decode_bmi2_adjust_end: +sequenceDecs_decode_bmi2_after_adjust: MOVQ CX, 16(R9) // Check values @@ -1012,7 +1048,7 @@ sequenceDecs_decode_56_bmi2_skip_update: MOVQ R11, R12 MOVQ R10, R11 MOVQ CX, R10 - JMP sequenceDecs_decode_56_bmi2_adjust_end + JMP sequenceDecs_decode_56_bmi2_after_adjust sequenceDecs_decode_56_bmi2_adjust_offsetB_1_or_0: CMPQ (R9), $0x00000000 @@ -1024,7 +1060,7 @@ sequenceDecs_decode_56_bmi2_adjust_offset_maybezero: TESTQ CX, CX JNZ sequenceDecs_decode_56_bmi2_adjust_offset_nonzero MOVQ R10, CX - JMP sequenceDecs_decode_56_bmi2_adjust_end + JMP sequenceDecs_decode_56_bmi2_after_adjust sequenceDecs_decode_56_bmi2_adjust_offset_nonzero: CMPQ CX, $0x01 @@ -1061,7 +1097,7 @@ sequenceDecs_decode_56_bmi2_adjust_temp_valid: MOVQ R13, R10 MOVQ R13, CX -sequenceDecs_decode_56_bmi2_adjust_end: +sequenceDecs_decode_56_bmi2_after_adjust: MOVQ CX, 16(R9) // Check values @@ -1749,6 +1785,10 @@ TEXT ·sequenceDecs_decodeSync_amd64(SB), $64-32 MOVQ 72(AX), DI MOVQ 80(AX), R8 MOVQ 88(AX), R9 + XORQ CX, CX + MOVQ CX, 8(SP) + MOVQ CX, 16(SP) + MOVQ CX, 24(SP) MOVQ 112(AX), R10 MOVQ 128(AX), CX MOVQ CX, 32(SP) @@ -1798,34 +1838,46 @@ sequenceDecs_decodeSync_amd64_fill_byte_by_byte: sequenceDecs_decodeSync_amd64_fill_end: // Update offset - MOVQ R9, AX - MOVQ BX, CX - MOVQ DX, R14 - SHLQ CL, R14 - MOVB AH, CL - ADDQ CX, BX - NEGL CX - SHRQ CL, R14 - SHRQ $0x20, AX - TESTQ CX, CX - CMOVQEQ CX, R14 - ADDQ R14, AX - MOVQ AX, 8(SP) + MOVQ R9, AX + MOVQ BX, CX + MOVQ DX, R14 + SHLQ CL, R14 + MOVB AH, CL + SHRQ $0x20, AX + TESTQ CX, CX + JZ sequenceDecs_decodeSync_amd64_of_update_zero + ADDQ CX, BX + CMPQ BX, $0x40 + JA sequenceDecs_decodeSync_amd64_of_update_zero + CMPQ CX, $0x40 + JAE sequenceDecs_decodeSync_amd64_of_update_zero + NEGQ CX + SHRQ CL, R14 + ADDQ R14, AX + +sequenceDecs_decodeSync_amd64_of_update_zero: + MOVQ AX, 8(SP) // Update match length - MOVQ R8, AX - MOVQ BX, CX - MOVQ DX, R14 - SHLQ CL, R14 - MOVB AH, CL - ADDQ CX, BX - NEGL CX - SHRQ CL, R14 - SHRQ $0x20, AX - TESTQ CX, CX - CMOVQEQ CX, R14 - ADDQ R14, AX - MOVQ AX, 16(SP) + MOVQ R8, AX + MOVQ BX, CX + MOVQ DX, R14 + SHLQ CL, R14 + MOVB AH, CL + SHRQ $0x20, AX + TESTQ CX, CX + JZ sequenceDecs_decodeSync_amd64_ml_update_zero + ADDQ CX, BX + CMPQ BX, $0x40 + JA sequenceDecs_decodeSync_amd64_ml_update_zero + CMPQ CX, $0x40 + JAE sequenceDecs_decodeSync_amd64_ml_update_zero + NEGQ CX + SHRQ CL, R14 + ADDQ R14, AX + +sequenceDecs_decodeSync_amd64_ml_update_zero: + MOVQ AX, 16(SP) // Fill bitreader to have enough for the remaining CMPQ SI, $0x08 @@ -1853,19 +1905,25 @@ sequenceDecs_decodeSync_amd64_fill_2_byte_by_byte: sequenceDecs_decodeSync_amd64_fill_2_end: // Update literal length - MOVQ DI, AX - MOVQ BX, CX - MOVQ DX, R14 - SHLQ CL, R14 - MOVB AH, CL - ADDQ CX, BX - NEGL CX - SHRQ CL, R14 - SHRQ $0x20, AX - TESTQ CX, CX - CMOVQEQ CX, R14 - ADDQ R14, AX - MOVQ AX, 24(SP) + MOVQ DI, AX + MOVQ BX, CX + MOVQ DX, R14 + SHLQ CL, R14 + MOVB AH, CL + SHRQ $0x20, AX + TESTQ CX, CX + JZ sequenceDecs_decodeSync_amd64_ll_update_zero + ADDQ CX, BX + CMPQ BX, $0x40 + JA sequenceDecs_decodeSync_amd64_ll_update_zero + CMPQ CX, $0x40 + JAE sequenceDecs_decodeSync_amd64_ll_update_zero + NEGQ CX + SHRQ CL, R14 + ADDQ R14, AX + +sequenceDecs_decodeSync_amd64_ll_update_zero: + MOVQ AX, 24(SP) // Fill bitreader for state updates MOVQ R13, (SP) @@ -1945,7 +2003,7 @@ sequenceDecs_decodeSync_amd64_skip_update: MOVUPS 144(CX), X0 MOVQ R13, 144(CX) MOVUPS X0, 152(CX) - JMP sequenceDecs_decodeSync_amd64_adjust_end + JMP sequenceDecs_decodeSync_amd64_after_adjust sequenceDecs_decodeSync_amd64_adjust_offsetB_1_or_0: CMPQ 24(SP), $0x00000000 @@ -1957,7 +2015,7 @@ sequenceDecs_decodeSync_amd64_adjust_offset_maybezero: TESTQ R13, R13 JNZ sequenceDecs_decodeSync_amd64_adjust_offset_nonzero MOVQ 144(CX), R13 - JMP sequenceDecs_decodeSync_amd64_adjust_end + JMP sequenceDecs_decodeSync_amd64_after_adjust sequenceDecs_decodeSync_amd64_adjust_offset_nonzero: MOVQ R13, AX @@ -1966,8 +2024,7 @@ sequenceDecs_decodeSync_amd64_adjust_offset_nonzero: CMPQ R13, $0x03 CMOVQEQ R14, AX CMOVQEQ R15, R14 - LEAQ 144(CX), R15 - ADDQ (R15)(AX*8), R14 + ADDQ 144(CX)(AX*8), R14 JNZ sequenceDecs_decodeSync_amd64_adjust_temp_valid MOVQ $0x00000001, R14 @@ -1983,7 +2040,7 @@ sequenceDecs_decodeSync_amd64_adjust_skip: MOVQ R14, 144(CX) MOVQ R14, R13 -sequenceDecs_decodeSync_amd64_adjust_end: +sequenceDecs_decodeSync_amd64_after_adjust: MOVQ R13, 8(SP) // Check values @@ -2280,6 +2337,10 @@ TEXT ·sequenceDecs_decodeSync_bmi2(SB), $64-32 MOVQ 72(CX), SI MOVQ 80(CX), DI MOVQ 88(CX), R8 + XORQ R9, R9 + MOVQ R9, 8(SP) + MOVQ R9, 16(SP) + MOVQ R9, 24(SP) MOVQ 112(CX), R9 MOVQ 128(CX), R10 MOVQ R10, 32(SP) @@ -2452,7 +2513,7 @@ sequenceDecs_decodeSync_bmi2_skip_update: MOVUPS 144(CX), X0 MOVQ R13, 144(CX) MOVUPS X0, 152(CX) - JMP sequenceDecs_decodeSync_bmi2_adjust_end + JMP sequenceDecs_decodeSync_bmi2_after_adjust sequenceDecs_decodeSync_bmi2_adjust_offsetB_1_or_0: CMPQ 24(SP), $0x00000000 @@ -2464,7 +2525,7 @@ sequenceDecs_decodeSync_bmi2_adjust_offset_maybezero: TESTQ R13, R13 JNZ sequenceDecs_decodeSync_bmi2_adjust_offset_nonzero MOVQ 144(CX), R13 - JMP sequenceDecs_decodeSync_bmi2_adjust_end + JMP sequenceDecs_decodeSync_bmi2_after_adjust sequenceDecs_decodeSync_bmi2_adjust_offset_nonzero: MOVQ R13, R12 @@ -2473,8 +2534,7 @@ sequenceDecs_decodeSync_bmi2_adjust_offset_nonzero: CMPQ R13, $0x03 CMOVQEQ R14, R12 CMOVQEQ R15, R14 - LEAQ 144(CX), R15 - ADDQ (R15)(R12*8), R14 + ADDQ 144(CX)(R12*8), R14 JNZ sequenceDecs_decodeSync_bmi2_adjust_temp_valid MOVQ $0x00000001, R14 @@ -2490,7 +2550,7 @@ sequenceDecs_decodeSync_bmi2_adjust_skip: MOVQ R14, 144(CX) MOVQ R14, R13 -sequenceDecs_decodeSync_bmi2_adjust_end: +sequenceDecs_decodeSync_bmi2_after_adjust: MOVQ R13, 8(SP) // Check values @@ -2787,6 +2847,10 @@ TEXT ·sequenceDecs_decodeSync_safe_amd64(SB), $64-32 MOVQ 72(AX), DI MOVQ 80(AX), R8 MOVQ 88(AX), R9 + XORQ CX, CX + MOVQ CX, 8(SP) + MOVQ CX, 16(SP) + MOVQ CX, 24(SP) MOVQ 112(AX), R10 MOVQ 128(AX), CX MOVQ CX, 32(SP) @@ -2836,34 +2900,46 @@ sequenceDecs_decodeSync_safe_amd64_fill_byte_by_byte: sequenceDecs_decodeSync_safe_amd64_fill_end: // Update offset - MOVQ R9, AX - MOVQ BX, CX - MOVQ DX, R14 - SHLQ CL, R14 - MOVB AH, CL - ADDQ CX, BX - NEGL CX - SHRQ CL, R14 - SHRQ $0x20, AX - TESTQ CX, CX - CMOVQEQ CX, R14 - ADDQ R14, AX - MOVQ AX, 8(SP) + MOVQ R9, AX + MOVQ BX, CX + MOVQ DX, R14 + SHLQ CL, R14 + MOVB AH, CL + SHRQ $0x20, AX + TESTQ CX, CX + JZ sequenceDecs_decodeSync_safe_amd64_of_update_zero + ADDQ CX, BX + CMPQ BX, $0x40 + JA sequenceDecs_decodeSync_safe_amd64_of_update_zero + CMPQ CX, $0x40 + JAE sequenceDecs_decodeSync_safe_amd64_of_update_zero + NEGQ CX + SHRQ CL, R14 + ADDQ R14, AX + +sequenceDecs_decodeSync_safe_amd64_of_update_zero: + MOVQ AX, 8(SP) // Update match length - MOVQ R8, AX - MOVQ BX, CX - MOVQ DX, R14 - SHLQ CL, R14 - MOVB AH, CL - ADDQ CX, BX - NEGL CX - SHRQ CL, R14 - SHRQ $0x20, AX - TESTQ CX, CX - CMOVQEQ CX, R14 - ADDQ R14, AX - MOVQ AX, 16(SP) + MOVQ R8, AX + MOVQ BX, CX + MOVQ DX, R14 + SHLQ CL, R14 + MOVB AH, CL + SHRQ $0x20, AX + TESTQ CX, CX + JZ sequenceDecs_decodeSync_safe_amd64_ml_update_zero + ADDQ CX, BX + CMPQ BX, $0x40 + JA sequenceDecs_decodeSync_safe_amd64_ml_update_zero + CMPQ CX, $0x40 + JAE sequenceDecs_decodeSync_safe_amd64_ml_update_zero + NEGQ CX + SHRQ CL, R14 + ADDQ R14, AX + +sequenceDecs_decodeSync_safe_amd64_ml_update_zero: + MOVQ AX, 16(SP) // Fill bitreader to have enough for the remaining CMPQ SI, $0x08 @@ -2891,19 +2967,25 @@ sequenceDecs_decodeSync_safe_amd64_fill_2_byte_by_byte: sequenceDecs_decodeSync_safe_amd64_fill_2_end: // Update literal length - MOVQ DI, AX - MOVQ BX, CX - MOVQ DX, R14 - SHLQ CL, R14 - MOVB AH, CL - ADDQ CX, BX - NEGL CX - SHRQ CL, R14 - SHRQ $0x20, AX - TESTQ CX, CX - CMOVQEQ CX, R14 - ADDQ R14, AX - MOVQ AX, 24(SP) + MOVQ DI, AX + MOVQ BX, CX + MOVQ DX, R14 + SHLQ CL, R14 + MOVB AH, CL + SHRQ $0x20, AX + TESTQ CX, CX + JZ sequenceDecs_decodeSync_safe_amd64_ll_update_zero + ADDQ CX, BX + CMPQ BX, $0x40 + JA sequenceDecs_decodeSync_safe_amd64_ll_update_zero + CMPQ CX, $0x40 + JAE sequenceDecs_decodeSync_safe_amd64_ll_update_zero + NEGQ CX + SHRQ CL, R14 + ADDQ R14, AX + +sequenceDecs_decodeSync_safe_amd64_ll_update_zero: + MOVQ AX, 24(SP) // Fill bitreader for state updates MOVQ R13, (SP) @@ -2983,7 +3065,7 @@ sequenceDecs_decodeSync_safe_amd64_skip_update: MOVUPS 144(CX), X0 MOVQ R13, 144(CX) MOVUPS X0, 152(CX) - JMP sequenceDecs_decodeSync_safe_amd64_adjust_end + JMP sequenceDecs_decodeSync_safe_amd64_after_adjust sequenceDecs_decodeSync_safe_amd64_adjust_offsetB_1_or_0: CMPQ 24(SP), $0x00000000 @@ -2995,7 +3077,7 @@ sequenceDecs_decodeSync_safe_amd64_adjust_offset_maybezero: TESTQ R13, R13 JNZ sequenceDecs_decodeSync_safe_amd64_adjust_offset_nonzero MOVQ 144(CX), R13 - JMP sequenceDecs_decodeSync_safe_amd64_adjust_end + JMP sequenceDecs_decodeSync_safe_amd64_after_adjust sequenceDecs_decodeSync_safe_amd64_adjust_offset_nonzero: MOVQ R13, AX @@ -3004,8 +3086,7 @@ sequenceDecs_decodeSync_safe_amd64_adjust_offset_nonzero: CMPQ R13, $0x03 CMOVQEQ R14, AX CMOVQEQ R15, R14 - LEAQ 144(CX), R15 - ADDQ (R15)(AX*8), R14 + ADDQ 144(CX)(AX*8), R14 JNZ sequenceDecs_decodeSync_safe_amd64_adjust_temp_valid MOVQ $0x00000001, R14 @@ -3021,7 +3102,7 @@ sequenceDecs_decodeSync_safe_amd64_adjust_skip: MOVQ R14, 144(CX) MOVQ R14, R13 -sequenceDecs_decodeSync_safe_amd64_adjust_end: +sequenceDecs_decodeSync_safe_amd64_after_adjust: MOVQ R13, 8(SP) // Check values @@ -3420,6 +3501,10 @@ TEXT ·sequenceDecs_decodeSync_safe_bmi2(SB), $64-32 MOVQ 72(CX), SI MOVQ 80(CX), DI MOVQ 88(CX), R8 + XORQ R9, R9 + MOVQ R9, 8(SP) + MOVQ R9, 16(SP) + MOVQ R9, 24(SP) MOVQ 112(CX), R9 MOVQ 128(CX), R10 MOVQ R10, 32(SP) @@ -3592,7 +3677,7 @@ sequenceDecs_decodeSync_safe_bmi2_skip_update: MOVUPS 144(CX), X0 MOVQ R13, 144(CX) MOVUPS X0, 152(CX) - JMP sequenceDecs_decodeSync_safe_bmi2_adjust_end + JMP sequenceDecs_decodeSync_safe_bmi2_after_adjust sequenceDecs_decodeSync_safe_bmi2_adjust_offsetB_1_or_0: CMPQ 24(SP), $0x00000000 @@ -3604,7 +3689,7 @@ sequenceDecs_decodeSync_safe_bmi2_adjust_offset_maybezero: TESTQ R13, R13 JNZ sequenceDecs_decodeSync_safe_bmi2_adjust_offset_nonzero MOVQ 144(CX), R13 - JMP sequenceDecs_decodeSync_safe_bmi2_adjust_end + JMP sequenceDecs_decodeSync_safe_bmi2_after_adjust sequenceDecs_decodeSync_safe_bmi2_adjust_offset_nonzero: MOVQ R13, R12 @@ -3613,8 +3698,7 @@ sequenceDecs_decodeSync_safe_bmi2_adjust_offset_nonzero: CMPQ R13, $0x03 CMOVQEQ R14, R12 CMOVQEQ R15, R14 - LEAQ 144(CX), R15 - ADDQ (R15)(R12*8), R14 + ADDQ 144(CX)(R12*8), R14 JNZ sequenceDecs_decodeSync_safe_bmi2_adjust_temp_valid MOVQ $0x00000001, R14 @@ -3630,7 +3714,7 @@ sequenceDecs_decodeSync_safe_bmi2_adjust_skip: MOVQ R14, 144(CX) MOVQ R14, R13 -sequenceDecs_decodeSync_safe_bmi2_adjust_end: +sequenceDecs_decodeSync_safe_bmi2_after_adjust: MOVQ R13, 8(SP) // Check values diff --git a/vendor/golang.org/x/crypto/AUTHORS b/vendor/golang.org/x/crypto/AUTHORS deleted file mode 100644 index 2b00ddba..00000000 --- a/vendor/golang.org/x/crypto/AUTHORS +++ /dev/null @@ -1,3 +0,0 @@ -# This source code refers to The Go Authors for copyright purposes. -# The master list of authors is in the main Go distribution, -# visible at https://tip.golang.org/AUTHORS. diff --git a/vendor/golang.org/x/crypto/CONTRIBUTORS b/vendor/golang.org/x/crypto/CONTRIBUTORS deleted file mode 100644 index 1fbd3e97..00000000 --- a/vendor/golang.org/x/crypto/CONTRIBUTORS +++ /dev/null @@ -1,3 +0,0 @@ -# This source code was written by the Go contributors. -# The master list of contributors is in the main Go distribution, -# visible at https://tip.golang.org/CONTRIBUTORS. diff --git a/vendor/golang.org/x/net/AUTHORS b/vendor/golang.org/x/net/AUTHORS deleted file mode 100644 index 15167cd7..00000000 --- a/vendor/golang.org/x/net/AUTHORS +++ /dev/null @@ -1,3 +0,0 @@ -# This source code refers to The Go Authors for copyright purposes. -# The master list of authors is in the main Go distribution, -# visible at http://tip.golang.org/AUTHORS. diff --git a/vendor/golang.org/x/net/CONTRIBUTORS b/vendor/golang.org/x/net/CONTRIBUTORS deleted file mode 100644 index 1c4577e9..00000000 --- a/vendor/golang.org/x/net/CONTRIBUTORS +++ /dev/null @@ -1,3 +0,0 @@ -# This source code was written by the Go contributors. -# The master list of contributors is in the main Go distribution, -# visible at http://tip.golang.org/CONTRIBUTORS. diff --git a/vendor/golang.org/x/oauth2/AUTHORS b/vendor/golang.org/x/oauth2/AUTHORS deleted file mode 100644 index 15167cd7..00000000 --- a/vendor/golang.org/x/oauth2/AUTHORS +++ /dev/null @@ -1,3 +0,0 @@ -# This source code refers to The Go Authors for copyright purposes. -# The master list of authors is in the main Go distribution, -# visible at http://tip.golang.org/AUTHORS. diff --git a/vendor/golang.org/x/oauth2/CONTRIBUTORS b/vendor/golang.org/x/oauth2/CONTRIBUTORS deleted file mode 100644 index 1c4577e9..00000000 --- a/vendor/golang.org/x/oauth2/CONTRIBUTORS +++ /dev/null @@ -1,3 +0,0 @@ -# This source code was written by the Go contributors. -# The master list of contributors is in the main Go distribution, -# visible at http://tip.golang.org/CONTRIBUTORS. diff --git a/vendor/golang.org/x/sync/AUTHORS b/vendor/golang.org/x/sync/AUTHORS deleted file mode 100644 index 15167cd7..00000000 --- a/vendor/golang.org/x/sync/AUTHORS +++ /dev/null @@ -1,3 +0,0 @@ -# This source code refers to The Go Authors for copyright purposes. -# The master list of authors is in the main Go distribution, -# visible at http://tip.golang.org/AUTHORS. diff --git a/vendor/golang.org/x/sync/CONTRIBUTORS b/vendor/golang.org/x/sync/CONTRIBUTORS deleted file mode 100644 index 1c4577e9..00000000 --- a/vendor/golang.org/x/sync/CONTRIBUTORS +++ /dev/null @@ -1,3 +0,0 @@ -# This source code was written by the Go contributors. -# The master list of contributors is in the main Go distribution, -# visible at http://tip.golang.org/CONTRIBUTORS. diff --git a/vendor/golang.org/x/sys/AUTHORS b/vendor/golang.org/x/sys/AUTHORS deleted file mode 100644 index 15167cd7..00000000 --- a/vendor/golang.org/x/sys/AUTHORS +++ /dev/null @@ -1,3 +0,0 @@ -# This source code refers to The Go Authors for copyright purposes. -# The master list of authors is in the main Go distribution, -# visible at http://tip.golang.org/AUTHORS. diff --git a/vendor/golang.org/x/sys/CONTRIBUTORS b/vendor/golang.org/x/sys/CONTRIBUTORS deleted file mode 100644 index 1c4577e9..00000000 --- a/vendor/golang.org/x/sys/CONTRIBUTORS +++ /dev/null @@ -1,3 +0,0 @@ -# This source code was written by the Go contributors. -# The master list of contributors is in the main Go distribution, -# visible at http://tip.golang.org/CONTRIBUTORS. diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux.go b/vendor/golang.org/x/sys/unix/zerrors_linux.go index b0d6c273..785d693e 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux.go @@ -2940,6 +2940,7 @@ const ( SOL_RAW = 0xff SOL_RDS = 0x114 SOL_RXRPC = 0x110 + SOL_SMC = 0x11e SOL_TCP = 0x6 SOL_TIPC = 0x10f SOL_TLS = 0x11a diff --git a/vendor/golang.org/x/term/AUTHORS b/vendor/golang.org/x/term/AUTHORS deleted file mode 100644 index 15167cd7..00000000 --- a/vendor/golang.org/x/term/AUTHORS +++ /dev/null @@ -1,3 +0,0 @@ -# This source code refers to The Go Authors for copyright purposes. -# The master list of authors is in the main Go distribution, -# visible at http://tip.golang.org/AUTHORS. diff --git a/vendor/golang.org/x/term/CONTRIBUTORS b/vendor/golang.org/x/term/CONTRIBUTORS deleted file mode 100644 index 1c4577e9..00000000 --- a/vendor/golang.org/x/term/CONTRIBUTORS +++ /dev/null @@ -1,3 +0,0 @@ -# This source code was written by the Go contributors. -# The master list of contributors is in the main Go distribution, -# visible at http://tip.golang.org/CONTRIBUTORS. diff --git a/vendor/golang.org/x/time/AUTHORS b/vendor/golang.org/x/time/AUTHORS deleted file mode 100644 index 15167cd7..00000000 --- a/vendor/golang.org/x/time/AUTHORS +++ /dev/null @@ -1,3 +0,0 @@ -# This source code refers to The Go Authors for copyright purposes. -# The master list of authors is in the main Go distribution, -# visible at http://tip.golang.org/AUTHORS. diff --git a/vendor/golang.org/x/time/CONTRIBUTORS b/vendor/golang.org/x/time/CONTRIBUTORS deleted file mode 100644 index 1c4577e9..00000000 --- a/vendor/golang.org/x/time/CONTRIBUTORS +++ /dev/null @@ -1,3 +0,0 @@ -# This source code was written by the Go contributors. -# The master list of contributors is in the main Go distribution, -# visible at http://tip.golang.org/CONTRIBUTORS. diff --git a/vendor/modules.txt b/vendor/modules.txt index 76f97c6e..ee3fd05f 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -20,7 +20,7 @@ github.com/aliyun/aliyun-oss-go-sdk/oss ## explicit; go 1.16 github.com/allegro/bigcache/v3 github.com/allegro/bigcache/v3/queue -# github.com/aws/aws-sdk-go v1.44.58 +# github.com/aws/aws-sdk-go v1.44.61 ## explicit; go 1.11 github.com/aws/aws-sdk-go/aws github.com/aws/aws-sdk-go/aws/arn @@ -175,7 +175,7 @@ github.com/dustin/go-humanize # github.com/edsrzf/mmap-go v1.1.0 ## explicit; go 1.17 github.com/edsrzf/mmap-go -# github.com/emicklei/go-restful/v3 v3.8.0 +# github.com/emicklei/go-restful/v3 v3.9.0 ## explicit; go 1.13 github.com/emicklei/go-restful/v3 github.com/emicklei/go-restful/v3/log @@ -261,8 +261,8 @@ github.com/goccy/go-json/internal/encoder/vm_color_indent github.com/goccy/go-json/internal/encoder/vm_indent github.com/goccy/go-json/internal/errors github.com/goccy/go-json/internal/runtime -# github.com/godror/godror v0.33.3 -## explicit; go 1.15 +# github.com/godror/godror v0.34.0 +## explicit; go 1.17 github.com/godror/godror github.com/godror/godror/dsn github.com/godror/godror/odpi/embed @@ -387,7 +387,7 @@ github.com/kamva/mgm/v3/operator # github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 ## explicit github.com/kballard/go-shellquote -# github.com/klauspost/compress v1.15.8 +# github.com/klauspost/compress v1.15.9 ## explicit; go 1.16 github.com/klauspost/compress github.com/klauspost/compress/fse @@ -713,7 +713,7 @@ go.uber.org/zap/internal/color go.uber.org/zap/internal/exit go.uber.org/zap/zapcore go.uber.org/zap/zapgrpc -# golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d +# golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa ## explicit; go 1.17 golang.org/x/crypto/blowfish golang.org/x/crypto/chacha20 @@ -732,7 +732,7 @@ golang.org/x/crypto/ssh/internal/bcrypt_pbkdf # golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 ## explicit; go 1.17 golang.org/x/mod/semver -# golang.org/x/net v0.0.0-20220708220712-1185a9018129 +# golang.org/x/net v0.0.0-20220722155237-a158d28d115b ## explicit; go 1.17 golang.org/x/net/context golang.org/x/net/context/ctxhttp @@ -748,15 +748,15 @@ golang.org/x/net/internal/socks golang.org/x/net/internal/timeseries golang.org/x/net/proxy golang.org/x/net/trace -# golang.org/x/oauth2 v0.0.0-20220718184931-c8730f7fcb92 +# golang.org/x/oauth2 v0.0.0-20220722155238-128564f6959c ## explicit; go 1.17 golang.org/x/oauth2 golang.org/x/oauth2/internal -# golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f +# golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 ## explicit golang.org/x/sync/errgroup golang.org/x/sync/singleflight -# golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 +# golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f ## explicit; go 1.17 golang.org/x/sys/cpu golang.org/x/sys/execabs @@ -764,7 +764,7 @@ golang.org/x/sys/internal/unsafeheader golang.org/x/sys/plan9 golang.org/x/sys/unix golang.org/x/sys/windows -# golang.org/x/term v0.0.0-20220526004731-065cf7ba2467 +# golang.org/x/term v0.0.0-20220722155259-a9ba230a4035 ## explicit; go 1.17 golang.org/x/term # golang.org/x/text v0.3.7 @@ -801,7 +801,7 @@ golang.org/x/text/transform golang.org/x/text/unicode/bidi golang.org/x/text/unicode/norm golang.org/x/text/width -# golang.org/x/time v0.0.0-20220609170525-579cf78fd858 +# golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9 ## explicit golang.org/x/time/rate # golang.org/x/tools v0.1.11 @@ -827,7 +827,7 @@ google.golang.org/appengine/internal/log google.golang.org/appengine/internal/remote_api google.golang.org/appengine/internal/urlfetch google.golang.org/appengine/urlfetch -# google.golang.org/genproto v0.0.0-20220719170305-83ca9fad585f +# google.golang.org/genproto v0.0.0-20220722212130-b98a9ff5e252 ## explicit; go 1.17 google.golang.org/genproto/googleapis/api/annotations google.golang.org/genproto/googleapis/rpc/status @@ -1206,7 +1206,7 @@ modernc.org/b # modernc.org/cc/v3 v3.36.0 ## explicit; go 1.15 modernc.org/cc/v3 -# modernc.org/ccgo/v3 v3.16.7 +# modernc.org/ccgo/v3 v3.16.8 ## explicit; go 1.16 modernc.org/ccgo/v3/lib # modernc.org/db v1.0.4