Merge pull request #7704 from thaJeztah/bump_deps
This commit is contained in:
commit
e5f13e81ab
15
go.mod
15
go.mod
@ -3,7 +3,7 @@ module github.com/containerd/containerd
|
|||||||
go 1.18
|
go 1.18
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/AdaLogics/go-fuzz-headers v0.0.0-20221103172237-443f56ff4ba8
|
github.com/AdaLogics/go-fuzz-headers v0.0.0-20221118232415-3345c89a7c72
|
||||||
github.com/AdamKorcz/go-118-fuzz-build v0.0.0-20220912195655-e1f97a00006b
|
github.com/AdamKorcz/go-118-fuzz-build v0.0.0-20220912195655-e1f97a00006b
|
||||||
github.com/Microsoft/go-winio v0.6.0
|
github.com/Microsoft/go-winio v0.6.0
|
||||||
github.com/Microsoft/hcsshim v0.10.0-rc.1
|
github.com/Microsoft/hcsshim v0.10.0-rc.1
|
||||||
@ -41,7 +41,7 @@ require (
|
|||||||
github.com/klauspost/compress v1.15.9
|
github.com/klauspost/compress v1.15.9
|
||||||
github.com/moby/locker v1.0.1
|
github.com/moby/locker v1.0.1
|
||||||
github.com/moby/sys/mountinfo v0.6.2
|
github.com/moby/sys/mountinfo v0.6.2
|
||||||
github.com/moby/sys/sequential v0.0.0-20220829095930-b22ba8a69b30
|
github.com/moby/sys/sequential v0.5.0
|
||||||
github.com/moby/sys/signal v0.7.0
|
github.com/moby/sys/signal v0.7.0
|
||||||
github.com/moby/sys/symlink v0.2.0
|
github.com/moby/sys/symlink v0.2.0
|
||||||
github.com/opencontainers/go-digest v1.0.0
|
github.com/opencontainers/go-digest v1.0.0
|
||||||
@ -51,7 +51,7 @@ require (
|
|||||||
github.com/opencontainers/selinux v1.10.2
|
github.com/opencontainers/selinux v1.10.2
|
||||||
github.com/pelletier/go-toml v1.9.3
|
github.com/pelletier/go-toml v1.9.3
|
||||||
github.com/prometheus/client_golang v1.12.1
|
github.com/prometheus/client_golang v1.12.1
|
||||||
github.com/sirupsen/logrus v1.8.1
|
github.com/sirupsen/logrus v1.9.0
|
||||||
github.com/stretchr/testify v1.8.0
|
github.com/stretchr/testify v1.8.0
|
||||||
github.com/tchap/go-patricia/v2 v2.3.1
|
github.com/tchap/go-patricia/v2 v2.3.1
|
||||||
github.com/urfave/cli v1.22.10
|
github.com/urfave/cli v1.22.10
|
||||||
@ -65,7 +65,7 @@ require (
|
|||||||
go.opentelemetry.io/otel/sdk v1.11.1
|
go.opentelemetry.io/otel/sdk v1.11.1
|
||||||
go.opentelemetry.io/otel/trace v1.11.1
|
go.opentelemetry.io/otel/trace v1.11.1
|
||||||
golang.org/x/sync v0.1.0
|
golang.org/x/sync v0.1.0
|
||||||
golang.org/x/sys v0.1.0
|
golang.org/x/sys v0.2.0
|
||||||
google.golang.org/genproto v0.0.0-20221107162902-2d387536bcdd
|
google.golang.org/genproto v0.0.0-20221107162902-2d387536bcdd
|
||||||
google.golang.org/grpc v1.50.1
|
google.golang.org/grpc v1.50.1
|
||||||
google.golang.org/protobuf v1.28.1
|
google.golang.org/protobuf v1.28.1
|
||||||
@ -89,7 +89,7 @@ require (
|
|||||||
github.com/cilium/ebpf v0.9.1 // indirect
|
github.com/cilium/ebpf v0.9.1 // indirect
|
||||||
github.com/containerd/cgroups v1.0.5-0.20220816231112-7083cd60b721 // indirect
|
github.com/containerd/cgroups v1.0.5-0.20220816231112-7083cd60b721 // indirect
|
||||||
github.com/containers/ocicrypt v1.1.3 // indirect
|
github.com/containers/ocicrypt v1.1.3 // indirect
|
||||||
github.com/cpuguy83/go-md2man/v2 v2.0.0 // indirect
|
github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect
|
||||||
github.com/cyphar/filepath-securejoin v0.2.3 // indirect
|
github.com/cyphar/filepath-securejoin v0.2.3 // indirect
|
||||||
github.com/go-logr/logr v1.2.3 // indirect
|
github.com/go-logr/logr v1.2.3 // indirect
|
||||||
github.com/go-logr/stdr v1.2.2 // indirect
|
github.com/go-logr/stdr v1.2.2 // indirect
|
||||||
@ -100,7 +100,7 @@ require (
|
|||||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0 // indirect
|
github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0 // indirect
|
||||||
github.com/hashicorp/errwrap v1.1.0 // indirect
|
github.com/hashicorp/errwrap v1.1.0 // indirect
|
||||||
github.com/json-iterator/go v1.1.12 // indirect
|
github.com/json-iterator/go v1.1.12 // indirect
|
||||||
github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect
|
github.com/matttproud/golang_protobuf_extensions v1.0.2 // indirect
|
||||||
github.com/miekg/pkcs11 v1.1.1 // indirect
|
github.com/miekg/pkcs11 v1.1.1 // indirect
|
||||||
github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible // indirect
|
github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible // indirect
|
||||||
github.com/moby/spdystream v0.2.0 // indirect
|
github.com/moby/spdystream v0.2.0 // indirect
|
||||||
@ -112,8 +112,7 @@ require (
|
|||||||
github.com/prometheus/client_model v0.2.0 // indirect
|
github.com/prometheus/client_model v0.2.0 // indirect
|
||||||
github.com/prometheus/common v0.32.1 // indirect
|
github.com/prometheus/common v0.32.1 // indirect
|
||||||
github.com/prometheus/procfs v0.7.3 // indirect
|
github.com/prometheus/procfs v0.7.3 // indirect
|
||||||
github.com/russross/blackfriday/v2 v2.0.1 // indirect
|
github.com/russross/blackfriday/v2 v2.1.0 // indirect
|
||||||
github.com/shurcooL/sanitized_anchor_name v1.0.0 // indirect
|
|
||||||
github.com/spf13/pflag v1.0.5 // indirect
|
github.com/spf13/pflag v1.0.5 // indirect
|
||||||
github.com/stefanberger/go-pkcs11uri v0.0.0-20201008174630-78d3cae3a980 // indirect
|
github.com/stefanberger/go-pkcs11uri v0.0.0-20201008174630-78d3cae3a980 // indirect
|
||||||
github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 // indirect
|
github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 // indirect
|
||||||
|
25
go.sum
25
go.sum
@ -44,8 +44,8 @@ cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RX
|
|||||||
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
|
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
|
||||||
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
|
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
|
||||||
github.com/AdaLogics/go-fuzz-headers v0.0.0-20210715213245-6c3934b029d8/go.mod h1:CzsSbkDixRphAF5hS6wbMKq0eI6ccJRb7/A0M6JBnwg=
|
github.com/AdaLogics/go-fuzz-headers v0.0.0-20210715213245-6c3934b029d8/go.mod h1:CzsSbkDixRphAF5hS6wbMKq0eI6ccJRb7/A0M6JBnwg=
|
||||||
github.com/AdaLogics/go-fuzz-headers v0.0.0-20221103172237-443f56ff4ba8 h1:d+pBUmsteW5tM87xmVXHZ4+LibHRFn40SPAoZJOg2ak=
|
github.com/AdaLogics/go-fuzz-headers v0.0.0-20221118232415-3345c89a7c72 h1:kq78byqmxX6R9uk4uN3HD2F5tkZJAZMauuLSkNPS8to=
|
||||||
github.com/AdaLogics/go-fuzz-headers v0.0.0-20221103172237-443f56ff4ba8/go.mod h1:i9fr2JpcEcY/IHEvzCM3qXUZYOQHgR89dt4es1CgMhc=
|
github.com/AdaLogics/go-fuzz-headers v0.0.0-20221118232415-3345c89a7c72/go.mod h1:VzwV+t+dZ9j/H867F1M2ziD+yLHtB46oM35FxxMJ4d0=
|
||||||
github.com/AdamKorcz/go-118-fuzz-build v0.0.0-20220912195655-e1f97a00006b h1:RQhYYLDVbdN+fw4I+A90nMRcxg/tEg4KvHiDYOwY32g=
|
github.com/AdamKorcz/go-118-fuzz-build v0.0.0-20220912195655-e1f97a00006b h1:RQhYYLDVbdN+fw4I+A90nMRcxg/tEg4KvHiDYOwY32g=
|
||||||
github.com/AdamKorcz/go-118-fuzz-build v0.0.0-20220912195655-e1f97a00006b/go.mod h1:P/MhpyNnqWUWlF8b/ksNuhU2kywD3Qc5fzauL06Gez8=
|
github.com/AdamKorcz/go-118-fuzz-build v0.0.0-20220912195655-e1f97a00006b/go.mod h1:P/MhpyNnqWUWlF8b/ksNuhU2kywD3Qc5fzauL06Gez8=
|
||||||
github.com/Azure/azure-sdk-for-go v16.2.1+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
|
github.com/Azure/azure-sdk-for-go v16.2.1+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
|
||||||
@ -322,8 +322,9 @@ github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSV
|
|||||||
github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
|
github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
|
||||||
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
|
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
|
||||||
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
|
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
|
||||||
github.com/cpuguy83/go-md2man/v2 v2.0.0 h1:EoUDS0afbrsXAZ9YQ9jdu/mZ2sXgT1/2yyNng4PGlyM=
|
|
||||||
github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
|
github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
|
||||||
|
github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w=
|
||||||
|
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
||||||
github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
|
github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
|
||||||
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
|
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
|
||||||
github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
|
github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
|
||||||
@ -654,8 +655,9 @@ github.com/mattn/go-shellwords v1.0.3/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vq
|
|||||||
github.com/mattn/go-shellwords v1.0.6/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o=
|
github.com/mattn/go-shellwords v1.0.6/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o=
|
||||||
github.com/mattn/go-shellwords v1.0.12/go.mod h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lLtQsUlTZDWQ8Y=
|
github.com/mattn/go-shellwords v1.0.12/go.mod h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lLtQsUlTZDWQ8Y=
|
||||||
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
||||||
github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI=
|
|
||||||
github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4=
|
github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4=
|
||||||
|
github.com/matttproud/golang_protobuf_extensions v1.0.2 h1:hAHbPm5IJGijwng3PWk09JkG9WeqChjprR5s9bBZ+OM=
|
||||||
|
github.com/matttproud/golang_protobuf_extensions v1.0.2/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4=
|
||||||
github.com/maxbrunsfeld/counterfeiter/v6 v6.2.2/go.mod h1:eD9eIE7cdwcMi9rYluz88Jz2VyhSmden33/aXg4oVIY=
|
github.com/maxbrunsfeld/counterfeiter/v6 v6.2.2/go.mod h1:eD9eIE7cdwcMi9rYluz88Jz2VyhSmden33/aXg4oVIY=
|
||||||
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
|
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
|
||||||
github.com/miekg/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs=
|
github.com/miekg/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs=
|
||||||
@ -681,8 +683,8 @@ github.com/moby/sys/mountinfo v0.4.1/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2J
|
|||||||
github.com/moby/sys/mountinfo v0.5.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU=
|
github.com/moby/sys/mountinfo v0.5.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU=
|
||||||
github.com/moby/sys/mountinfo v0.6.2 h1:BzJjoreD5BMFNmD9Rus6gdd1pLuecOFPt8wC+Vygl78=
|
github.com/moby/sys/mountinfo v0.6.2 h1:BzJjoreD5BMFNmD9Rus6gdd1pLuecOFPt8wC+Vygl78=
|
||||||
github.com/moby/sys/mountinfo v0.6.2/go.mod h1:IJb6JQeOklcdMU9F5xQ8ZALD+CUr5VlGpwtX+VE0rpI=
|
github.com/moby/sys/mountinfo v0.6.2/go.mod h1:IJb6JQeOklcdMU9F5xQ8ZALD+CUr5VlGpwtX+VE0rpI=
|
||||||
github.com/moby/sys/sequential v0.0.0-20220829095930-b22ba8a69b30 h1:LIL30sRWu2XhxsKr+Ek68J1zeaRatA+fv4UgX82P1+g=
|
github.com/moby/sys/sequential v0.5.0 h1:OPvI35Lzn9K04PBbCLW0g4LcFAJgHsvXsRyewg5lXtc=
|
||||||
github.com/moby/sys/sequential v0.0.0-20220829095930-b22ba8a69b30/go.mod h1:tH2cOOs5V9MlPiXcQzRC+eEyab644PWKGRYaaV5ZZlo=
|
github.com/moby/sys/sequential v0.5.0/go.mod h1:tH2cOOs5V9MlPiXcQzRC+eEyab644PWKGRYaaV5ZZlo=
|
||||||
github.com/moby/sys/signal v0.6.0/go.mod h1:GQ6ObYZfqacOwTtlXvcmh9A26dVRul/hbOZn88Kg8Tg=
|
github.com/moby/sys/signal v0.6.0/go.mod h1:GQ6ObYZfqacOwTtlXvcmh9A26dVRul/hbOZn88Kg8Tg=
|
||||||
github.com/moby/sys/signal v0.7.0 h1:25RW3d5TnQEoKvRbEKUGay6DCQ46IxAVTT9CUMgmsSI=
|
github.com/moby/sys/signal v0.7.0 h1:25RW3d5TnQEoKvRbEKUGay6DCQ46IxAVTT9CUMgmsSI=
|
||||||
github.com/moby/sys/signal v0.7.0/go.mod h1:GQ6ObYZfqacOwTtlXvcmh9A26dVRul/hbOZn88Kg8Tg=
|
github.com/moby/sys/signal v0.7.0/go.mod h1:GQ6ObYZfqacOwTtlXvcmh9A26dVRul/hbOZn88Kg8Tg=
|
||||||
@ -835,8 +837,9 @@ github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6So
|
|||||||
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
|
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
|
||||||
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
|
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
|
||||||
github.com/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k=
|
github.com/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k=
|
||||||
github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q=
|
|
||||||
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||||
|
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
|
||||||
|
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||||
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
|
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
|
||||||
github.com/safchain/ethtool v0.0.0-20190326074333-42ed695e3de8/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4=
|
github.com/safchain/ethtool v0.0.0-20190326074333-42ed695e3de8/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4=
|
||||||
github.com/safchain/ethtool v0.0.0-20210803160452-9aa261dae9b1/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4=
|
github.com/safchain/ethtool v0.0.0-20210803160452-9aa261dae9b1/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4=
|
||||||
@ -847,7 +850,6 @@ github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg
|
|||||||
github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo=
|
github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo=
|
||||||
github.com/seccomp/libseccomp-golang v0.9.2-0.20210429002308-3879420cc921/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg=
|
github.com/seccomp/libseccomp-golang v0.9.2-0.20210429002308-3879420cc921/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg=
|
||||||
github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg=
|
github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg=
|
||||||
github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo=
|
|
||||||
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
|
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
|
||||||
github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
|
github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
|
||||||
github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
|
github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
|
||||||
@ -856,8 +858,9 @@ github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMB
|
|||||||
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
|
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
|
||||||
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
|
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
|
||||||
github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
|
github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
|
||||||
github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE=
|
|
||||||
github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
|
github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
|
||||||
|
github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=
|
||||||
|
github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
|
||||||
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
|
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
|
||||||
github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
|
github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
|
||||||
github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
|
github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
|
||||||
@ -1260,8 +1263,8 @@ golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBc
|
|||||||
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.1.0 h1:kunALQeHf1/185U1i0GOB/fy1IPRDDpuoOOqRReG57U=
|
golang.org/x/sys v0.2.0 h1:ljd4t30dBnAvMZaQCevtY0xLLD0A+bRZXbgLMLU1F/A=
|
||||||
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.2.0/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-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-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
|
@ -14,13 +14,13 @@ require (
|
|||||||
github.com/opencontainers/go-digest v1.0.0
|
github.com/opencontainers/go-digest v1.0.0
|
||||||
github.com/opencontainers/image-spec v1.1.0-rc2.0.20221005185240-3a7f492d3f1b
|
github.com/opencontainers/image-spec v1.1.0-rc2.0.20221005185240-3a7f492d3f1b
|
||||||
github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417
|
github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417
|
||||||
github.com/sirupsen/logrus v1.8.1
|
github.com/sirupsen/logrus v1.9.0
|
||||||
github.com/stretchr/testify v1.8.0
|
github.com/stretchr/testify v1.8.0
|
||||||
golang.org/x/sys v0.1.0
|
golang.org/x/sys v0.2.0
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/AdaLogics/go-fuzz-headers v0.0.0-20221103172237-443f56ff4ba8
|
github.com/AdaLogics/go-fuzz-headers v0.0.0-20221118232415-3345c89a7c72
|
||||||
github.com/containerd/cgroups/v3 v3.0.0-20221112182753-e8802a182774
|
github.com/containerd/cgroups/v3 v3.0.0-20221112182753-e8802a182774
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -47,7 +47,7 @@ require (
|
|||||||
github.com/klauspost/compress v1.15.9 // indirect
|
github.com/klauspost/compress v1.15.9 // indirect
|
||||||
github.com/moby/locker v1.0.1 // indirect
|
github.com/moby/locker v1.0.1 // indirect
|
||||||
github.com/moby/sys/mountinfo v0.6.2 // indirect
|
github.com/moby/sys/mountinfo v0.6.2 // indirect
|
||||||
github.com/moby/sys/sequential v0.0.0-20220829095930-b22ba8a69b30 // indirect
|
github.com/moby/sys/sequential v0.5.0 // indirect
|
||||||
github.com/moby/sys/signal v0.7.0 // indirect
|
github.com/moby/sys/signal v0.7.0 // indirect
|
||||||
github.com/opencontainers/runc v1.1.4 // indirect
|
github.com/opencontainers/runc v1.1.4 // indirect
|
||||||
github.com/opencontainers/selinux v1.10.2 // indirect
|
github.com/opencontainers/selinux v1.10.2 // indirect
|
||||||
|
@ -363,8 +363,8 @@ cloud.google.com/go/workflows v1.8.0/go.mod h1:ysGhmEajwZxGn1OhGOGKsTXc5PyxOc0vf
|
|||||||
cloud.google.com/go/workflows v1.9.0/go.mod h1:ZGkj1aFIOd9c8Gerkjjq7OW7I5+l6cSvT3ujaO/WwSA=
|
cloud.google.com/go/workflows v1.9.0/go.mod h1:ZGkj1aFIOd9c8Gerkjjq7OW7I5+l6cSvT3ujaO/WwSA=
|
||||||
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
|
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
|
||||||
github.com/AdaLogics/go-fuzz-headers v0.0.0-20220824214621-3c06a36a6952/go.mod h1:i9fr2JpcEcY/IHEvzCM3qXUZYOQHgR89dt4es1CgMhc=
|
github.com/AdaLogics/go-fuzz-headers v0.0.0-20220824214621-3c06a36a6952/go.mod h1:i9fr2JpcEcY/IHEvzCM3qXUZYOQHgR89dt4es1CgMhc=
|
||||||
github.com/AdaLogics/go-fuzz-headers v0.0.0-20221103172237-443f56ff4ba8 h1:d+pBUmsteW5tM87xmVXHZ4+LibHRFn40SPAoZJOg2ak=
|
github.com/AdaLogics/go-fuzz-headers v0.0.0-20221118232415-3345c89a7c72 h1:kq78byqmxX6R9uk4uN3HD2F5tkZJAZMauuLSkNPS8to=
|
||||||
github.com/AdaLogics/go-fuzz-headers v0.0.0-20221103172237-443f56ff4ba8/go.mod h1:i9fr2JpcEcY/IHEvzCM3qXUZYOQHgR89dt4es1CgMhc=
|
github.com/AdaLogics/go-fuzz-headers v0.0.0-20221118232415-3345c89a7c72/go.mod h1:VzwV+t+dZ9j/H867F1M2ziD+yLHtB46oM35FxxMJ4d0=
|
||||||
github.com/AdamKorcz/go-118-fuzz-build v0.0.0-20220912195655-e1f97a00006b h1:RQhYYLDVbdN+fw4I+A90nMRcxg/tEg4KvHiDYOwY32g=
|
github.com/AdamKorcz/go-118-fuzz-build v0.0.0-20220912195655-e1f97a00006b h1:RQhYYLDVbdN+fw4I+A90nMRcxg/tEg4KvHiDYOwY32g=
|
||||||
github.com/AdamKorcz/go-118-fuzz-build v0.0.0-20220912195655-e1f97a00006b/go.mod h1:P/MhpyNnqWUWlF8b/ksNuhU2kywD3Qc5fzauL06Gez8=
|
github.com/AdamKorcz/go-118-fuzz-build v0.0.0-20220912195655-e1f97a00006b/go.mod h1:P/MhpyNnqWUWlF8b/ksNuhU2kywD3Qc5fzauL06Gez8=
|
||||||
github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8=
|
github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8=
|
||||||
@ -516,6 +516,7 @@ github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfc
|
|||||||
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
|
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
|
||||||
github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
|
github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
|
||||||
github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
||||||
|
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
||||||
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
|
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
|
||||||
github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
|
github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
|
||||||
github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4=
|
github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4=
|
||||||
@ -809,7 +810,7 @@ github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNx
|
|||||||
github.com/mattn/go-shellwords v1.0.6/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o=
|
github.com/mattn/go-shellwords v1.0.6/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o=
|
||||||
github.com/mattn/go-shellwords v1.0.12/go.mod h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lLtQsUlTZDWQ8Y=
|
github.com/mattn/go-shellwords v1.0.12/go.mod h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lLtQsUlTZDWQ8Y=
|
||||||
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
||||||
github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4=
|
github.com/matttproud/golang_protobuf_extensions v1.0.2/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4=
|
||||||
github.com/maxbrunsfeld/counterfeiter/v6 v6.2.2/go.mod h1:eD9eIE7cdwcMi9rYluz88Jz2VyhSmden33/aXg4oVIY=
|
github.com/maxbrunsfeld/counterfeiter/v6 v6.2.2/go.mod h1:eD9eIE7cdwcMi9rYluz88Jz2VyhSmden33/aXg4oVIY=
|
||||||
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
|
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
|
||||||
github.com/miekg/pkcs11 v1.1.1/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs=
|
github.com/miekg/pkcs11 v1.1.1/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs=
|
||||||
@ -830,8 +831,8 @@ github.com/moby/sys/mountinfo v0.4.1/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2J
|
|||||||
github.com/moby/sys/mountinfo v0.5.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU=
|
github.com/moby/sys/mountinfo v0.5.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU=
|
||||||
github.com/moby/sys/mountinfo v0.6.2 h1:BzJjoreD5BMFNmD9Rus6gdd1pLuecOFPt8wC+Vygl78=
|
github.com/moby/sys/mountinfo v0.6.2 h1:BzJjoreD5BMFNmD9Rus6gdd1pLuecOFPt8wC+Vygl78=
|
||||||
github.com/moby/sys/mountinfo v0.6.2/go.mod h1:IJb6JQeOklcdMU9F5xQ8ZALD+CUr5VlGpwtX+VE0rpI=
|
github.com/moby/sys/mountinfo v0.6.2/go.mod h1:IJb6JQeOklcdMU9F5xQ8ZALD+CUr5VlGpwtX+VE0rpI=
|
||||||
github.com/moby/sys/sequential v0.0.0-20220829095930-b22ba8a69b30 h1:LIL30sRWu2XhxsKr+Ek68J1zeaRatA+fv4UgX82P1+g=
|
github.com/moby/sys/sequential v0.5.0 h1:OPvI35Lzn9K04PBbCLW0g4LcFAJgHsvXsRyewg5lXtc=
|
||||||
github.com/moby/sys/sequential v0.0.0-20220829095930-b22ba8a69b30/go.mod h1:tH2cOOs5V9MlPiXcQzRC+eEyab644PWKGRYaaV5ZZlo=
|
github.com/moby/sys/sequential v0.5.0/go.mod h1:tH2cOOs5V9MlPiXcQzRC+eEyab644PWKGRYaaV5ZZlo=
|
||||||
github.com/moby/sys/signal v0.7.0 h1:25RW3d5TnQEoKvRbEKUGay6DCQ46IxAVTT9CUMgmsSI=
|
github.com/moby/sys/signal v0.7.0 h1:25RW3d5TnQEoKvRbEKUGay6DCQ46IxAVTT9CUMgmsSI=
|
||||||
github.com/moby/sys/signal v0.7.0/go.mod h1:GQ6ObYZfqacOwTtlXvcmh9A26dVRul/hbOZn88Kg8Tg=
|
github.com/moby/sys/signal v0.7.0/go.mod h1:GQ6ObYZfqacOwTtlXvcmh9A26dVRul/hbOZn88Kg8Tg=
|
||||||
github.com/moby/sys/symlink v0.2.0/go.mod h1:7uZVF2dqJjG/NsClqul95CqKOBRQyYSNnJ6BMgR/gFs=
|
github.com/moby/sys/symlink v0.2.0/go.mod h1:7uZVF2dqJjG/NsClqul95CqKOBRQyYSNnJ6BMgR/gFs=
|
||||||
@ -962,8 +963,9 @@ github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMB
|
|||||||
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
|
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
|
||||||
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
|
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
|
||||||
github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
|
github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
|
||||||
github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE=
|
|
||||||
github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
|
github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
|
||||||
|
github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=
|
||||||
|
github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
|
||||||
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
|
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
|
||||||
github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
|
github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
|
||||||
github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
|
github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
|
||||||
@ -1356,8 +1358,9 @@ golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBc
|
|||||||
golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.1.0 h1:kunALQeHf1/185U1i0GOB/fy1IPRDDpuoOOqRReG57U=
|
|
||||||
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.2.0 h1:ljd4t30dBnAvMZaQCevtY0xLLD0A+bRZXbgLMLU1F/A=
|
||||||
|
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
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-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||||
golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||||
|
416
vendor/github.com/AdaLogics/go-fuzz-headers/consumer.go
generated
vendored
416
vendor/github.com/AdaLogics/go-fuzz-headers/consumer.go
generated
vendored
@ -18,9 +18,7 @@ import (
|
|||||||
securejoin "github.com/cyphar/filepath-securejoin"
|
securejoin "github.com/cyphar/filepath-securejoin"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var MaxTotalLen uint32 = 2000000
|
||||||
MaxTotalLen = uint32(2000000)
|
|
||||||
)
|
|
||||||
|
|
||||||
func SetMaxTotalLen(newLen uint32) {
|
func SetMaxTotalLen(newLen uint32) {
|
||||||
MaxTotalLen = newLen
|
MaxTotalLen = newLen
|
||||||
@ -28,6 +26,7 @@ func SetMaxTotalLen(newLen uint32) {
|
|||||||
|
|
||||||
type ConsumeFuzzer struct {
|
type ConsumeFuzzer struct {
|
||||||
data []byte
|
data []byte
|
||||||
|
dataTotal uint32
|
||||||
CommandPart []byte
|
CommandPart []byte
|
||||||
RestOfArray []byte
|
RestOfArray []byte
|
||||||
NumberOfCalls int
|
NumberOfCalls int
|
||||||
@ -41,22 +40,23 @@ func IsDivisibleBy(n int, divisibleby int) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func NewConsumer(fuzzData []byte) *ConsumeFuzzer {
|
func NewConsumer(fuzzData []byte) *ConsumeFuzzer {
|
||||||
fuzzMap := make(map[reflect.Type]reflect.Value)
|
return &ConsumeFuzzer{
|
||||||
f := &ConsumeFuzzer{data: fuzzData, position: 0, Funcs: fuzzMap}
|
data: fuzzData,
|
||||||
return f
|
dataTotal: uint32(len(fuzzData)),
|
||||||
|
Funcs: make(map[reflect.Type]reflect.Value),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *ConsumeFuzzer) Split(minCalls, maxCalls int) error {
|
func (f *ConsumeFuzzer) Split(minCalls, maxCalls int) error {
|
||||||
if len(f.data) == 0 {
|
if f.dataTotal == 0 {
|
||||||
return errors.New("Could not split")
|
return errors.New("could not split")
|
||||||
}
|
}
|
||||||
numberOfCalls := int(f.data[0])
|
numberOfCalls := int(f.data[0])
|
||||||
if numberOfCalls < minCalls || numberOfCalls > maxCalls {
|
if numberOfCalls < minCalls || numberOfCalls > maxCalls {
|
||||||
return errors.New("Bad number of calls")
|
return errors.New("bad number of calls")
|
||||||
|
|
||||||
}
|
}
|
||||||
if len(f.data) < numberOfCalls+numberOfCalls+1 {
|
if int(f.dataTotal) < numberOfCalls+numberOfCalls+1 {
|
||||||
return errors.New("Length of data does not match required parameters")
|
return errors.New("length of data does not match required parameters")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Define part 2 and 3 of the data array
|
// Define part 2 and 3 of the data array
|
||||||
@ -65,12 +65,12 @@ func (f *ConsumeFuzzer) Split(minCalls, maxCalls int) error {
|
|||||||
|
|
||||||
// Just a small check. It is necessary
|
// Just a small check. It is necessary
|
||||||
if len(commandPart) != numberOfCalls {
|
if len(commandPart) != numberOfCalls {
|
||||||
return errors.New("Length of commandPart does not match number of calls")
|
return errors.New("length of commandPart does not match number of calls")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if restOfArray is divisible by numberOfCalls
|
// Check if restOfArray is divisible by numberOfCalls
|
||||||
if !IsDivisibleBy(len(restOfArray), numberOfCalls) {
|
if !IsDivisibleBy(len(restOfArray), numberOfCalls) {
|
||||||
return errors.New("Length of commandPart does not match number of calls")
|
return errors.New("length of commandPart does not match number of calls")
|
||||||
}
|
}
|
||||||
f.CommandPart = commandPart
|
f.CommandPart = commandPart
|
||||||
f.RestOfArray = restOfArray
|
f.RestOfArray = restOfArray
|
||||||
@ -87,77 +87,55 @@ func (f *ConsumeFuzzer) DisallowUnexportedFields() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (f *ConsumeFuzzer) GenerateStruct(targetStruct interface{}) error {
|
func (f *ConsumeFuzzer) GenerateStruct(targetStruct interface{}) error {
|
||||||
v := reflect.ValueOf(targetStruct)
|
e := reflect.ValueOf(targetStruct).Elem()
|
||||||
/*if !v.CanSet() {
|
return f.fuzzStruct(e, false)
|
||||||
return errors.New("This interface cannot be set")
|
|
||||||
}*/
|
|
||||||
e := v.Elem()
|
|
||||||
err := f.fuzzStruct(e, false)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *ConsumeFuzzer) setCustom(v reflect.Value) error {
|
func (f *ConsumeFuzzer) setCustom(v reflect.Value) error {
|
||||||
// First: see if we have a fuzz function for it.
|
// First: see if we have a fuzz function for it.
|
||||||
doCustom, ok := f.Funcs[v.Type()]
|
doCustom, ok := f.Funcs[v.Type()]
|
||||||
if !ok {
|
if !ok {
|
||||||
return fmt.Errorf("Could not find a custom function")
|
return fmt.Errorf("could not find a custom function")
|
||||||
}
|
}
|
||||||
|
|
||||||
switch v.Kind() {
|
switch v.Kind() {
|
||||||
case reflect.Ptr:
|
case reflect.Ptr:
|
||||||
if v.IsNil() {
|
if v.IsNil() {
|
||||||
if !v.CanSet() {
|
if !v.CanSet() {
|
||||||
return fmt.Errorf("Could not use a custom function")
|
return fmt.Errorf("could not use a custom function")
|
||||||
}
|
}
|
||||||
v.Set(reflect.New(v.Type().Elem()))
|
v.Set(reflect.New(v.Type().Elem()))
|
||||||
}
|
}
|
||||||
case reflect.Map:
|
case reflect.Map:
|
||||||
if v.IsNil() {
|
if v.IsNil() {
|
||||||
if !v.CanSet() {
|
if !v.CanSet() {
|
||||||
return fmt.Errorf("Could not use a custom function")
|
return fmt.Errorf("could not use a custom function")
|
||||||
}
|
}
|
||||||
v.Set(reflect.MakeMap(v.Type()))
|
v.Set(reflect.MakeMap(v.Type()))
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
return fmt.Errorf("Could not use a custom function")
|
return fmt.Errorf("could not use a custom function")
|
||||||
}
|
}
|
||||||
|
|
||||||
verr := doCustom.Call([]reflect.Value{v, reflect.ValueOf(Continue{
|
verr := doCustom.Call([]reflect.Value{v, reflect.ValueOf(Continue{
|
||||||
F: f,
|
F: f,
|
||||||
})})
|
})})
|
||||||
|
|
||||||
// check if we return an error
|
// check if we return an error
|
||||||
if verr[0].IsNil() {
|
if verr[0].IsNil() {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return fmt.Errorf("Could not use a custom function")
|
return fmt.Errorf("could not use a custom function")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *ConsumeFuzzer) fuzzStruct(e reflect.Value, customFunctions bool) error {
|
func (f *ConsumeFuzzer) fuzzStruct(e reflect.Value, customFunctions bool) error {
|
||||||
|
|
||||||
// We check if we should check for custom functions
|
// We check if we should check for custom functions
|
||||||
if customFunctions {
|
if customFunctions && e.IsValid() && e.CanAddr() {
|
||||||
if e.IsValid() {
|
|
||||||
if e.CanAddr() {
|
|
||||||
err := f.setCustom(e.Addr())
|
err := f.setCustom(e.Addr())
|
||||||
if err == nil {
|
if err == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* return f.setCustom(e)
|
|
||||||
_, ok := f.Funcs[e.Type()]
|
|
||||||
if ok {
|
|
||||||
if e.CanAddr() {
|
|
||||||
err := f.setCustom(e.Addr())
|
|
||||||
if err == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
//return f.setCustom(e)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
switch e.Kind() {
|
switch e.Kind() {
|
||||||
case reflect.Struct:
|
case reflect.Struct:
|
||||||
@ -167,24 +145,14 @@ func (f *ConsumeFuzzer) fuzzStruct(e reflect.Value, customFunctions bool) error
|
|||||||
if f.fuzzUnexportedFields {
|
if f.fuzzUnexportedFields {
|
||||||
v = reflect.NewAt(e.Field(i).Type(), unsafe.Pointer(e.Field(i).UnsafeAddr())).Elem()
|
v = reflect.NewAt(e.Field(i).Type(), unsafe.Pointer(e.Field(i).UnsafeAddr())).Elem()
|
||||||
}
|
}
|
||||||
err := f.fuzzStruct(v, customFunctions)
|
if err := f.fuzzStruct(v, customFunctions); err != nil {
|
||||||
if err != nil {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/*if e.Field(i).Kind() == reflect.Struct {
|
|
||||||
//e = reflect.NewAt(e.Type(), unsafe.Pointer(e.UnsafeAddr())).Elem()
|
|
||||||
//e.Field(i).Set(reflect.New(e.Field(i).Type()))
|
|
||||||
}*/
|
|
||||||
v = e.Field(i)
|
v = e.Field(i)
|
||||||
//v = reflect.New(e.Field(i).Type())
|
if err := f.fuzzStruct(v, customFunctions); err != nil {
|
||||||
err := f.fuzzStruct(v, customFunctions)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
/*if e.Field(i).CanSet() {
|
|
||||||
e.Field(i).Set(v.Elem())
|
|
||||||
}*/
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case reflect.String:
|
case reflect.String:
|
||||||
@ -208,18 +176,16 @@ func (f *ConsumeFuzzer) fuzzStruct(e reflect.Value, customFunctions bool) error
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
var numOfElements uint32
|
numOfElements := randQty % maxElements
|
||||||
numOfElements = randQty % maxElements
|
if (f.dataTotal - f.position) < numOfElements {
|
||||||
if (uint32(len(f.data)) - f.position) < numOfElements {
|
numOfElements = f.dataTotal - f.position
|
||||||
numOfElements = uint32(len(f.data)) - f.position
|
|
||||||
}
|
}
|
||||||
|
|
||||||
uu := reflect.MakeSlice(e.Type(), int(numOfElements), int(numOfElements))
|
uu := reflect.MakeSlice(e.Type(), int(numOfElements), int(numOfElements))
|
||||||
|
|
||||||
for i := 0; i < int(numOfElements); i++ {
|
for i := 0; i < int(numOfElements); i++ {
|
||||||
err := f.fuzzStruct(uu.Index(i), customFunctions)
|
|
||||||
// If we have more than 10, then we can proceed with that.
|
// If we have more than 10, then we can proceed with that.
|
||||||
if err != nil {
|
if err := f.fuzzStruct(uu.Index(i), customFunctions); err != nil {
|
||||||
if i >= 10 {
|
if i >= 10 {
|
||||||
if e.CanSet() {
|
if e.CanSet() {
|
||||||
e.Set(uu)
|
e.Set(uu)
|
||||||
@ -284,7 +250,7 @@ func (f *ConsumeFuzzer) fuzzStruct(e reflect.Value, customFunctions bool) error
|
|||||||
case reflect.Map:
|
case reflect.Map:
|
||||||
if e.CanSet() {
|
if e.CanSet() {
|
||||||
e.Set(reflect.MakeMap(e.Type()))
|
e.Set(reflect.MakeMap(e.Type()))
|
||||||
maxElements := 50
|
const maxElements = 50
|
||||||
randQty, err := f.GetInt()
|
randQty, err := f.GetInt()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -292,13 +258,11 @@ func (f *ConsumeFuzzer) fuzzStruct(e reflect.Value, customFunctions bool) error
|
|||||||
numOfElements := randQty % maxElements
|
numOfElements := randQty % maxElements
|
||||||
for i := 0; i < numOfElements; i++ {
|
for i := 0; i < numOfElements; i++ {
|
||||||
key := reflect.New(e.Type().Key()).Elem()
|
key := reflect.New(e.Type().Key()).Elem()
|
||||||
err := f.fuzzStruct(key, customFunctions)
|
if err := f.fuzzStruct(key, customFunctions); err != nil {
|
||||||
if err != nil {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
val := reflect.New(e.Type().Elem()).Elem()
|
val := reflect.New(e.Type().Elem()).Elem()
|
||||||
err = f.fuzzStruct(val, customFunctions)
|
if err = f.fuzzStruct(val, customFunctions); err != nil {
|
||||||
if err != nil {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
e.SetMapIndex(key, val)
|
e.SetMapIndex(key, val)
|
||||||
@ -307,8 +271,7 @@ func (f *ConsumeFuzzer) fuzzStruct(e reflect.Value, customFunctions bool) error
|
|||||||
case reflect.Ptr:
|
case reflect.Ptr:
|
||||||
if e.CanSet() {
|
if e.CanSet() {
|
||||||
e.Set(reflect.New(e.Type().Elem()))
|
e.Set(reflect.New(e.Type().Elem()))
|
||||||
err := f.fuzzStruct(e.Elem(), customFunctions)
|
if err := f.fuzzStruct(e.Elem(), customFunctions); err != nil {
|
||||||
if err != nil {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@ -321,43 +284,39 @@ func (f *ConsumeFuzzer) fuzzStruct(e reflect.Value, customFunctions bool) error
|
|||||||
if e.CanSet() {
|
if e.CanSet() {
|
||||||
e.SetUint(uint64(b))
|
e.SetUint(uint64(b))
|
||||||
}
|
}
|
||||||
default:
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *ConsumeFuzzer) GetStringArray() (reflect.Value, error) {
|
func (f *ConsumeFuzzer) GetStringArray() (reflect.Value, error) {
|
||||||
// The max size of the array:
|
// The max size of the array:
|
||||||
max := uint32(20)
|
const max uint32 = 20
|
||||||
|
|
||||||
arraySize := f.position
|
arraySize := f.position
|
||||||
if arraySize > max {
|
if arraySize > max {
|
||||||
arraySize = max
|
arraySize = max
|
||||||
}
|
}
|
||||||
elemType := reflect.TypeOf("string")
|
stringArray := reflect.MakeSlice(reflect.SliceOf(reflect.TypeOf("string")), int(arraySize), int(arraySize))
|
||||||
stringArray := reflect.MakeSlice(reflect.SliceOf(elemType), int(arraySize), int(arraySize))
|
if f.position+arraySize >= f.dataTotal {
|
||||||
if f.position+arraySize >= uint32(len(f.data)) {
|
return stringArray, errors.New("could not make string array")
|
||||||
return stringArray, errors.New("Could not make string array")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for i := 0; i < int(arraySize); i++ {
|
for i := 0; i < int(arraySize); i++ {
|
||||||
stringSize := uint32(f.data[f.position])
|
stringSize := uint32(f.data[f.position])
|
||||||
|
if f.position+stringSize >= f.dataTotal {
|
||||||
if f.position+stringSize >= uint32(len(f.data)) {
|
|
||||||
return stringArray, nil
|
return stringArray, nil
|
||||||
}
|
}
|
||||||
stringToAppend := string(f.data[f.position : f.position+stringSize])
|
stringToAppend := string(f.data[f.position : f.position+stringSize])
|
||||||
strVal := reflect.ValueOf(stringToAppend)
|
strVal := reflect.ValueOf(stringToAppend)
|
||||||
stringArray = reflect.Append(stringArray, strVal)
|
stringArray = reflect.Append(stringArray, strVal)
|
||||||
f.position = f.position + stringSize
|
f.position += stringSize
|
||||||
}
|
}
|
||||||
return stringArray, nil
|
return stringArray, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *ConsumeFuzzer) GetInt() (int, error) {
|
func (f *ConsumeFuzzer) GetInt() (int, error) {
|
||||||
if f.position >= uint32(len(f.data)) {
|
if f.position >= f.dataTotal {
|
||||||
return 0, errors.New("Not enough bytes to create int")
|
return 0, errors.New("not enough bytes to create int")
|
||||||
}
|
}
|
||||||
returnInt := int(f.data[f.position])
|
returnInt := int(f.data[f.position])
|
||||||
f.position++
|
f.position++
|
||||||
@ -365,29 +324,23 @@ func (f *ConsumeFuzzer) GetInt() (int, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (f *ConsumeFuzzer) GetByte() (byte, error) {
|
func (f *ConsumeFuzzer) GetByte() (byte, error) {
|
||||||
if len(f.data) == 0 {
|
if f.position >= f.dataTotal {
|
||||||
return 0x00, errors.New("Not enough bytes to get byte")
|
return 0x00, errors.New("not enough bytes to get byte")
|
||||||
}
|
|
||||||
if f.position >= uint32(len(f.data)) {
|
|
||||||
return 0x00, errors.New("Not enough bytes to get byte")
|
|
||||||
}
|
}
|
||||||
returnByte := f.data[f.position]
|
returnByte := f.data[f.position]
|
||||||
f.position += 1
|
f.position++
|
||||||
return returnByte, nil
|
return returnByte, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *ConsumeFuzzer) GetNBytes(numberOfBytes int) ([]byte, error) {
|
func (f *ConsumeFuzzer) GetNBytes(numberOfBytes int) ([]byte, error) {
|
||||||
returnBytes := make([]byte, 0)
|
if f.position >= f.dataTotal {
|
||||||
if len(f.data) == 0 {
|
return nil, errors.New("not enough bytes to get byte")
|
||||||
return returnBytes, errors.New("Not enough bytes to get byte")
|
|
||||||
}
|
|
||||||
if f.position >= uint32(len(f.data)) {
|
|
||||||
return returnBytes, errors.New("Not enough bytes to get byte")
|
|
||||||
}
|
}
|
||||||
|
returnBytes := make([]byte, 0, numberOfBytes)
|
||||||
for i := 0; i < numberOfBytes; i++ {
|
for i := 0; i < numberOfBytes; i++ {
|
||||||
newByte, err := f.GetByte()
|
newByte, err := f.GetByte()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return returnBytes, err
|
return nil, err
|
||||||
}
|
}
|
||||||
returnBytes = append(returnBytes, newByte)
|
returnBytes = append(returnBytes, newByte)
|
||||||
}
|
}
|
||||||
@ -397,112 +350,104 @@ func (f *ConsumeFuzzer) GetNBytes(numberOfBytes int) ([]byte, error) {
|
|||||||
func (f *ConsumeFuzzer) GetUint16() (uint16, error) {
|
func (f *ConsumeFuzzer) GetUint16() (uint16, error) {
|
||||||
u16, err := f.GetNBytes(2)
|
u16, err := f.GetNBytes(2)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return uint16(0), err
|
return 0, err
|
||||||
}
|
}
|
||||||
littleEndian, err := f.GetBool()
|
littleEndian, err := f.GetBool()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return uint16(0), err
|
return 0, err
|
||||||
}
|
}
|
||||||
if littleEndian {
|
if littleEndian {
|
||||||
u16LE := binary.LittleEndian.Uint16(u16)
|
return binary.LittleEndian.Uint16(u16), nil
|
||||||
return u16LE, nil
|
|
||||||
}
|
}
|
||||||
u16BE := binary.BigEndian.Uint16(u16)
|
return binary.BigEndian.Uint16(u16), nil
|
||||||
return u16BE, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *ConsumeFuzzer) GetUint32() (uint32, error) {
|
func (f *ConsumeFuzzer) GetUint32() (uint32, error) {
|
||||||
u32, err := f.GetNBytes(4)
|
u32, err := f.GetNBytes(4)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return uint32(0), err
|
return 0, err
|
||||||
}
|
}
|
||||||
littleEndian, err := f.GetBool()
|
littleEndian, err := f.GetBool()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return uint32(0), err
|
return 0, err
|
||||||
}
|
}
|
||||||
if littleEndian {
|
if littleEndian {
|
||||||
u32LE := binary.LittleEndian.Uint32(u32)
|
return binary.LittleEndian.Uint32(u32), nil
|
||||||
return u32LE, nil
|
|
||||||
}
|
}
|
||||||
u32BE := binary.BigEndian.Uint32(u32)
|
return binary.BigEndian.Uint32(u32), nil
|
||||||
return u32BE, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *ConsumeFuzzer) GetUint64() (uint64, error) {
|
func (f *ConsumeFuzzer) GetUint64() (uint64, error) {
|
||||||
u64, err := f.GetNBytes(8)
|
u64, err := f.GetNBytes(8)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return uint64(0), err
|
return 0, err
|
||||||
}
|
}
|
||||||
littleEndian, err := f.GetBool()
|
littleEndian, err := f.GetBool()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return uint64(0), err
|
return 0, err
|
||||||
}
|
}
|
||||||
if littleEndian {
|
if littleEndian {
|
||||||
u64LE := binary.LittleEndian.Uint64(u64)
|
return binary.LittleEndian.Uint64(u64), nil
|
||||||
return u64LE, nil
|
|
||||||
}
|
}
|
||||||
u64BE := binary.BigEndian.Uint64(u64)
|
return binary.BigEndian.Uint64(u64), nil
|
||||||
return u64BE, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *ConsumeFuzzer) GetBytes() ([]byte, error) {
|
func (f *ConsumeFuzzer) GetBytes() ([]byte, error) {
|
||||||
if len(f.data) == 0 || f.position >= uint32(len(f.data)) {
|
if f.position >= f.dataTotal {
|
||||||
return nil, errors.New("Not enough bytes to create byte array")
|
return nil, errors.New("not enough bytes to create byte array")
|
||||||
}
|
}
|
||||||
length, err := f.GetUint32()
|
length, err := f.GetUint32()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.New("Not enough bytes to create byte array")
|
return nil, errors.New("not enough bytes to create byte array")
|
||||||
}
|
}
|
||||||
if f.position+length > MaxTotalLen {
|
if f.position+length > MaxTotalLen {
|
||||||
return nil, errors.New("Created too large a string")
|
return nil, errors.New("created too large a string")
|
||||||
}
|
}
|
||||||
byteBegin := f.position - 1
|
byteBegin := f.position - 1
|
||||||
if byteBegin >= uint32(len(f.data)) {
|
if byteBegin >= f.dataTotal {
|
||||||
return nil, errors.New("Not enough bytes to create byte array")
|
return nil, errors.New("not enough bytes to create byte array")
|
||||||
}
|
}
|
||||||
if length == 0 {
|
if length == 0 {
|
||||||
return nil, errors.New("Zero-length is not supported")
|
return nil, errors.New("zero-length is not supported")
|
||||||
}
|
}
|
||||||
if byteBegin+length >= uint32(len(f.data)) {
|
if byteBegin+length >= f.dataTotal {
|
||||||
return nil, errors.New("Not enough bytes to create byte array")
|
return nil, errors.New("not enough bytes to create byte array")
|
||||||
}
|
}
|
||||||
if byteBegin+length < byteBegin {
|
if byteBegin+length < byteBegin {
|
||||||
return nil, errors.New("Nunmbers overflow. Returning")
|
return nil, errors.New("numbers overflow")
|
||||||
}
|
}
|
||||||
b := f.data[byteBegin : byteBegin+length]
|
|
||||||
f.position = byteBegin + length
|
f.position = byteBegin + length
|
||||||
return b, nil
|
return f.data[byteBegin:f.position], nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *ConsumeFuzzer) GetString() (string, error) {
|
func (f *ConsumeFuzzer) GetString() (string, error) {
|
||||||
if f.position >= uint32(len(f.data)) {
|
if f.position >= f.dataTotal {
|
||||||
return "nil", errors.New("Not enough bytes to create string")
|
return "nil", errors.New("not enough bytes to create string")
|
||||||
}
|
}
|
||||||
length, err := f.GetUint32()
|
length, err := f.GetUint32()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "nil", errors.New("Not enough bytes to create string")
|
return "nil", errors.New("not enough bytes to create string")
|
||||||
}
|
}
|
||||||
if f.position > MaxTotalLen {
|
if f.position > MaxTotalLen {
|
||||||
return "nil", errors.New("Created too large a string")
|
return "nil", errors.New("created too large a string")
|
||||||
}
|
}
|
||||||
byteBegin := f.position - 1
|
byteBegin := f.position - 1
|
||||||
if byteBegin >= uint32(len(f.data)) {
|
if byteBegin >= f.dataTotal {
|
||||||
return "nil", errors.New("Not enough bytes to create string")
|
return "nil", errors.New("not enough bytes to create string")
|
||||||
}
|
}
|
||||||
if byteBegin+length > uint32(len(f.data)) {
|
if byteBegin+length > f.dataTotal {
|
||||||
return "nil", errors.New("Not enough bytes to create string")
|
return "nil", errors.New("not enough bytes to create string")
|
||||||
}
|
}
|
||||||
if byteBegin > byteBegin+length {
|
if byteBegin > byteBegin+length {
|
||||||
return "nil", errors.New("Numbers overflow. Returning")
|
return "nil", errors.New("numbers overflow")
|
||||||
}
|
}
|
||||||
str := string(f.data[byteBegin : byteBegin+length])
|
|
||||||
f.position = byteBegin + length
|
f.position = byteBegin + length
|
||||||
return str, nil
|
return string(f.data[byteBegin:f.position]), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *ConsumeFuzzer) GetBool() (bool, error) {
|
func (f *ConsumeFuzzer) GetBool() (bool, error) {
|
||||||
if f.position >= uint32(len(f.data)) {
|
if f.position >= f.dataTotal {
|
||||||
return false, errors.New("Not enough bytes to create bool")
|
return false, errors.New("not enough bytes to create bool")
|
||||||
}
|
}
|
||||||
if IsDivisibleBy(int(f.data[f.position]), 2) {
|
if IsDivisibleBy(int(f.data[f.position]), 2) {
|
||||||
f.position++
|
f.position++
|
||||||
@ -514,20 +459,13 @@ func (f *ConsumeFuzzer) GetBool() (bool, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (f *ConsumeFuzzer) FuzzMap(m interface{}) error {
|
func (f *ConsumeFuzzer) FuzzMap(m interface{}) error {
|
||||||
err := f.GenerateStruct(m)
|
return f.GenerateStruct(m)
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func returnTarBytes(buf []byte) ([]byte, error) {
|
func returnTarBytes(buf []byte) ([]byte, error) {
|
||||||
reader := bytes.NewReader(buf)
|
|
||||||
tr := tar.NewReader(reader)
|
|
||||||
|
|
||||||
// Count files
|
// Count files
|
||||||
var fileCounter int
|
var fileCounter int
|
||||||
fileCounter = 0
|
tr := tar.NewReader(bytes.NewReader(buf))
|
||||||
for {
|
for {
|
||||||
_, err := tr.Next()
|
_, err := tr.Next()
|
||||||
if err == io.EOF {
|
if err == io.EOF {
|
||||||
@ -541,7 +479,7 @@ func returnTarBytes(buf []byte) ([]byte, error) {
|
|||||||
if fileCounter > 4 {
|
if fileCounter > 4 {
|
||||||
return buf, nil
|
return buf, nil
|
||||||
}
|
}
|
||||||
return nil, fmt.Errorf("Not enough files were created\n")
|
return nil, fmt.Errorf("not enough files were created\n")
|
||||||
}
|
}
|
||||||
|
|
||||||
func setTarHeaderFormat(hdr *tar.Header, f *ConsumeFuzzer) error {
|
func setTarHeaderFormat(hdr *tar.Header, f *ConsumeFuzzer) error {
|
||||||
@ -609,94 +547,77 @@ func setTarHeaderTypeflag(hdr *tar.Header, f *ConsumeFuzzer) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (f *ConsumeFuzzer) createTarFileBody() ([]byte, error) {
|
func (f *ConsumeFuzzer) createTarFileBody() ([]byte, error) {
|
||||||
if len(f.data) == 0 || f.position >= uint32(len(f.data)) {
|
|
||||||
return nil, errors.New("Not enough bytes to create byte array")
|
|
||||||
}
|
|
||||||
length, err := f.GetUint32()
|
length, err := f.GetUint32()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.New("Not enough bytes to create byte array")
|
return nil, errors.New("not enough bytes to create byte array")
|
||||||
}
|
}
|
||||||
|
|
||||||
// A bit of optimization to attempt to create a file body
|
// A bit of optimization to attempt to create a file body
|
||||||
// when we don't have as many bytes left as "length"
|
// when we don't have as many bytes left as "length"
|
||||||
remainingBytes := (uint32(len(f.data)) - f.position)
|
remainingBytes := f.dataTotal - f.position
|
||||||
totalDataLen := uint32(len(f.data))
|
|
||||||
if uint32(len(f.data))-f.position < 50 {
|
|
||||||
if remainingBytes == 0 {
|
if remainingBytes == 0 {
|
||||||
return nil, errors.New("Created too large a string")
|
return nil, errors.New("created too large a string")
|
||||||
}
|
}
|
||||||
|
if remainingBytes < 50 {
|
||||||
length = length % remainingBytes
|
length = length % remainingBytes
|
||||||
} else if len(f.data) < 500 {
|
} else if f.dataTotal < 500 {
|
||||||
if totalDataLen == 0 {
|
length = length % f.dataTotal
|
||||||
return nil, errors.New("Created too large a string")
|
|
||||||
}
|
|
||||||
length = length % totalDataLen
|
|
||||||
}
|
}
|
||||||
if f.position+length > MaxTotalLen {
|
if f.position+length > MaxTotalLen {
|
||||||
return nil, errors.New("Created too large a string")
|
return nil, errors.New("created too large a string")
|
||||||
}
|
}
|
||||||
byteBegin := f.position - 1
|
byteBegin := f.position - 1
|
||||||
if byteBegin >= uint32(len(f.data)) {
|
if byteBegin >= f.dataTotal {
|
||||||
return nil, errors.New("Not enough bytes to create byte array")
|
return nil, errors.New("not enough bytes to create byte array")
|
||||||
}
|
}
|
||||||
if length == 0 {
|
if length == 0 {
|
||||||
return nil, errors.New("Zero-length is not supported")
|
return nil, errors.New("zero-length is not supported")
|
||||||
}
|
}
|
||||||
if byteBegin+length >= uint32(len(f.data)) {
|
if byteBegin+length >= f.dataTotal {
|
||||||
return nil, errors.New("Not enough bytes to create byte array")
|
return nil, errors.New("not enough bytes to create byte array")
|
||||||
}
|
}
|
||||||
if byteBegin+length < byteBegin {
|
if byteBegin+length < byteBegin {
|
||||||
return nil, errors.New("Nunmbers overflow. Returning")
|
return nil, errors.New("numbers overflow")
|
||||||
}
|
}
|
||||||
filebody := f.data[byteBegin : byteBegin+length]
|
|
||||||
f.position = byteBegin + length
|
f.position = byteBegin + length
|
||||||
return filebody, nil
|
return f.data[byteBegin:f.position], nil
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Is similar to GetString(), but creates string based on the length
|
// getTarFileName is similar to GetString(), but creates string based
|
||||||
// of the length of f.data to increase the likelihood of not overflowing
|
// on the length of f.data to reduce the likelihood of overflowing
|
||||||
// f.data
|
// f.data.
|
||||||
func (f *ConsumeFuzzer) getTarFilename() (string, error) {
|
func (f *ConsumeFuzzer) getTarFilename() (string, error) {
|
||||||
if f.position >= uint32(len(f.data)) {
|
|
||||||
return "nil", errors.New("Not enough bytes to create string")
|
|
||||||
}
|
|
||||||
length, err := f.GetUint32()
|
length, err := f.GetUint32()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "nil", errors.New("Not enough bytes to create string")
|
return "nil", errors.New("not enough bytes to create string")
|
||||||
}
|
}
|
||||||
|
|
||||||
// A bit of optimization to attempt to create a file name
|
// A bit of optimization to attempt to create a file name
|
||||||
// when we don't have as many bytes left as "length"
|
// when we don't have as many bytes left as "length"
|
||||||
remainingBytes := (uint32(len(f.data)) - f.position)
|
remainingBytes := f.dataTotal - f.position
|
||||||
totalDataLen := uint32(len(f.data))
|
|
||||||
if uint32(len(f.data))-f.position < 50 {
|
|
||||||
if remainingBytes == 0 {
|
if remainingBytes == 0 {
|
||||||
return "nil", errors.New("Created too large a string")
|
return "nil", errors.New("created too large a string")
|
||||||
}
|
}
|
||||||
|
if remainingBytes < 50 {
|
||||||
length = length % remainingBytes
|
length = length % remainingBytes
|
||||||
} else if len(f.data) < 500 {
|
} else if f.dataTotal < 500 {
|
||||||
if totalDataLen == 0 {
|
length = length % f.dataTotal
|
||||||
return "nil", errors.New("Created too large a string")
|
|
||||||
}
|
|
||||||
length = length % totalDataLen
|
|
||||||
}
|
}
|
||||||
if f.position > MaxTotalLen {
|
if f.position > MaxTotalLen {
|
||||||
return "nil", errors.New("Created too large a string")
|
return "nil", errors.New("created too large a string")
|
||||||
}
|
}
|
||||||
byteBegin := f.position - 1
|
byteBegin := f.position - 1
|
||||||
if byteBegin >= uint32(len(f.data)) {
|
if byteBegin >= f.dataTotal {
|
||||||
return "nil", errors.New("Not enough bytes to create string")
|
return "nil", errors.New("not enough bytes to create string")
|
||||||
}
|
}
|
||||||
if byteBegin+length > uint32(len(f.data)) {
|
if byteBegin+length > f.dataTotal {
|
||||||
return "nil", errors.New("Not enough bytes to create string")
|
return "nil", errors.New("not enough bytes to create string")
|
||||||
}
|
}
|
||||||
if byteBegin > byteBegin+length {
|
if byteBegin > byteBegin+length {
|
||||||
return "nil", errors.New("Numbers overflow. Returning")
|
return "nil", errors.New("numbers overflow")
|
||||||
}
|
}
|
||||||
str := string(f.data[byteBegin : byteBegin+length])
|
|
||||||
f.position = byteBegin + length
|
f.position = byteBegin + length
|
||||||
return str, nil
|
return string(f.data[byteBegin:f.position]), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// TarBytes returns valid bytes for a tar archive
|
// TarBytes returns valid bytes for a tar archive
|
||||||
@ -710,7 +631,7 @@ func (f *ConsumeFuzzer) TarBytes() ([]byte, error) {
|
|||||||
tw := tar.NewWriter(&buf)
|
tw := tar.NewWriter(&buf)
|
||||||
defer tw.Close()
|
defer tw.Close()
|
||||||
|
|
||||||
maxNoOfFiles := 1000
|
const maxNoOfFiles = 1000
|
||||||
for i := 0; i < numberOfFiles%maxNoOfFiles; i++ {
|
for i := 0; i < numberOfFiles%maxNoOfFiles; i++ {
|
||||||
filename, err := f.getTarFilename()
|
filename, err := f.getTarFilename()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -720,34 +641,27 @@ func (f *ConsumeFuzzer) TarBytes() ([]byte, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return returnTarBytes(buf.Bytes())
|
return returnTarBytes(buf.Bytes())
|
||||||
}
|
}
|
||||||
hdr := &tar.Header{}
|
|
||||||
|
|
||||||
err = setTarHeaderTypeflag(hdr, f)
|
|
||||||
if err != nil {
|
|
||||||
return returnTarBytes(buf.Bytes())
|
|
||||||
}
|
|
||||||
|
|
||||||
sec, err := f.GetInt()
|
sec, err := f.GetInt()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return returnTarBytes(buf.Bytes())
|
return returnTarBytes(buf.Bytes())
|
||||||
}
|
}
|
||||||
|
|
||||||
nsec, err := f.GetInt()
|
nsec, err := f.GetInt()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return returnTarBytes(buf.Bytes())
|
return returnTarBytes(buf.Bytes())
|
||||||
}
|
}
|
||||||
|
|
||||||
hdr.ModTime = time.Unix(int64(sec), int64(nsec))
|
hdr := &tar.Header{
|
||||||
|
Name: filename,
|
||||||
hdr.Name = filename
|
Size: int64(len(filebody)),
|
||||||
hdr.Size = int64(len(filebody))
|
Mode: 0o600,
|
||||||
hdr.Mode = 0600
|
ModTime: time.Unix(int64(sec), int64(nsec)),
|
||||||
|
}
|
||||||
err = setTarHeaderFormat(hdr, f)
|
if err := setTarHeaderTypeflag(hdr, f); err != nil {
|
||||||
if err != nil {
|
return returnTarBytes(buf.Bytes())
|
||||||
|
}
|
||||||
|
if err := setTarHeaderFormat(hdr, f); err != nil {
|
||||||
return returnTarBytes(buf.Bytes())
|
return returnTarBytes(buf.Bytes())
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := tw.WriteHeader(hdr); err != nil {
|
if err := tw.WriteHeader(hdr); err != nil {
|
||||||
return returnTarBytes(buf.Bytes())
|
return returnTarBytes(buf.Bytes())
|
||||||
}
|
}
|
||||||
@ -758,13 +672,11 @@ func (f *ConsumeFuzzer) TarBytes() ([]byte, error) {
|
|||||||
return returnTarBytes(buf.Bytes())
|
return returnTarBytes(buf.Bytes())
|
||||||
}
|
}
|
||||||
|
|
||||||
// Creates pseudo-random files in rootDir.
|
// CreateFiles creates pseudo-random files in rootDir.
|
||||||
// Will create subdirs and place the files there.
|
// It creates subdirs and places the files there.
|
||||||
// It is the callers responsibility to ensure that
|
// It is the callers responsibility to ensure that
|
||||||
// rootDir exists.
|
// rootDir exists.
|
||||||
func (f *ConsumeFuzzer) CreateFiles(rootDir string) error {
|
func (f *ConsumeFuzzer) CreateFiles(rootDir string) error {
|
||||||
var noOfCreatedFiles int
|
|
||||||
noOfCreatedFiles = 0
|
|
||||||
numberOfFiles, err := f.GetInt()
|
numberOfFiles, err := f.GetInt()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -774,40 +686,35 @@ func (f *ConsumeFuzzer) CreateFiles(rootDir string) error {
|
|||||||
return errors.New("maxNumberOfFiles is nil")
|
return errors.New("maxNumberOfFiles is nil")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var noOfCreatedFiles int
|
||||||
for i := 0; i < maxNumberOfFiles; i++ {
|
for i := 0; i < maxNumberOfFiles; i++ {
|
||||||
// The file to create:
|
// The file to create:
|
||||||
fileName, err := f.GetString()
|
fileName, err := f.GetString()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if noOfCreatedFiles > 0 {
|
if noOfCreatedFiles > 0 {
|
||||||
// If files have been created, we don't return
|
// If files have been created, we don't return an error.
|
||||||
// an error
|
|
||||||
break
|
break
|
||||||
} else {
|
} else {
|
||||||
return errors.New("Could not get fileName")
|
return errors.New("could not get fileName")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var fullFilePath string
|
fullFilePath, err := securejoin.SecureJoin(rootDir, fileName)
|
||||||
fullFilePath, err = securejoin.SecureJoin(rootDir, fileName)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Find the subdirectory of the file
|
// Find the subdirectory of the file
|
||||||
subDir := filepath.Dir(fileName)
|
if subDir := filepath.Dir(fileName); subDir != "" && subDir != "." {
|
||||||
if subDir != "" && subDir != "." {
|
// create the dir first; avoid going outside the root dir
|
||||||
// create the dir first
|
|
||||||
|
|
||||||
// Avoid going outside the root dir
|
|
||||||
if strings.Contains(subDir, "../") || (len(subDir) > 0 && subDir[0] == 47) || strings.Contains(subDir, "\\") {
|
if strings.Contains(subDir, "../") || (len(subDir) > 0 && subDir[0] == 47) || strings.Contains(subDir, "\\") {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
dirPath := filepath.Join(rootDir, subDir)
|
|
||||||
dirPath, err := securejoin.SecureJoin(rootDir, subDir)
|
dirPath, err := securejoin.SecureJoin(rootDir, subDir)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if _, err := os.Stat(dirPath); os.IsNotExist(err) {
|
if _, err := os.Stat(dirPath); os.IsNotExist(err) {
|
||||||
err2 := os.MkdirAll(dirPath, 0777)
|
err2 := os.MkdirAll(dirPath, 0o777)
|
||||||
if err2 != nil {
|
if err2 != nil {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
@ -823,7 +730,7 @@ func (f *ConsumeFuzzer) CreateFiles(rootDir string) error {
|
|||||||
if noOfCreatedFiles > 0 {
|
if noOfCreatedFiles > 0 {
|
||||||
break
|
break
|
||||||
} else {
|
} else {
|
||||||
return errors.New("Could not create the symlink")
|
return errors.New("could not create the symlink")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if createSymlink {
|
if createSymlink {
|
||||||
@ -831,7 +738,10 @@ func (f *ConsumeFuzzer) CreateFiles(rootDir string) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
os.Symlink(symlinkTarget, fullFilePath)
|
err = os.Symlink(symlinkTarget, fullFilePath)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
// stop loop here, since a symlink needs no further action
|
// stop loop here, since a symlink needs no further action
|
||||||
noOfCreatedFiles++
|
noOfCreatedFiles++
|
||||||
continue
|
continue
|
||||||
@ -842,43 +752,35 @@ func (f *ConsumeFuzzer) CreateFiles(rootDir string) error {
|
|||||||
if noOfCreatedFiles > 0 {
|
if noOfCreatedFiles > 0 {
|
||||||
break
|
break
|
||||||
} else {
|
} else {
|
||||||
return errors.New("Could not create the file")
|
return errors.New("could not create the file")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
createdFile, err := os.Create(fullFilePath)
|
err = os.WriteFile(fullFilePath, fileContents, 0o666)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
createdFile.Close()
|
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
_, err = createdFile.Write(fileContents)
|
|
||||||
if err != nil {
|
|
||||||
createdFile.Close()
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
createdFile.Close()
|
|
||||||
noOfCreatedFiles++
|
noOfCreatedFiles++
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns a string that can only consists of characters that are
|
// GetStringFrom returns a string that can only consist of characters
|
||||||
// included in possibleChars. Will return an error if the created
|
// included in possibleChars. It returns an error if the created string
|
||||||
// string does not have the specified length
|
// does not have the specified length.
|
||||||
func (f *ConsumeFuzzer) GetStringFrom(possibleChars string, length int) (string, error) {
|
func (f *ConsumeFuzzer) GetStringFrom(possibleChars string, length int) (string, error) {
|
||||||
returnString := ""
|
if (f.dataTotal - f.position) < uint32(length) {
|
||||||
if (uint32(len(f.data)) - f.position) < uint32(length) {
|
return "", errors.New("not enough bytes to create a string")
|
||||||
return returnString, errors.New("Not enough bytes to create a string")
|
|
||||||
}
|
}
|
||||||
|
output := make([]byte, 0, length)
|
||||||
for i := 0; i < length; i++ {
|
for i := 0; i < length; i++ {
|
||||||
charIndex, err := f.GetInt()
|
charIndex, err := f.GetInt()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return returnString, err
|
return string(output), err
|
||||||
}
|
}
|
||||||
charToAdd := string(possibleChars[charIndex%len(possibleChars)])
|
output = append(output, possibleChars[charIndex%len(possibleChars)])
|
||||||
returnString = fmt.Sprintf(returnString + charToAdd)
|
|
||||||
}
|
}
|
||||||
return returnString, nil
|
return string(output), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *ConsumeFuzzer) GetRune() ([]rune, error) {
|
func (f *ConsumeFuzzer) GetRune() ([]rune, error) {
|
||||||
@ -892,11 +794,11 @@ func (f *ConsumeFuzzer) GetRune() ([]rune, error) {
|
|||||||
func (f *ConsumeFuzzer) GetFloat32() (float32, error) {
|
func (f *ConsumeFuzzer) GetFloat32() (float32, error) {
|
||||||
u32, err := f.GetNBytes(4)
|
u32, err := f.GetNBytes(4)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return float32(0.0), err
|
return 0, err
|
||||||
}
|
}
|
||||||
littleEndian, err := f.GetBool()
|
littleEndian, err := f.GetBool()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return float32(0.0), err
|
return 0, err
|
||||||
}
|
}
|
||||||
if littleEndian {
|
if littleEndian {
|
||||||
u32LE := binary.LittleEndian.Uint32(u32)
|
u32LE := binary.LittleEndian.Uint32(u32)
|
||||||
@ -909,11 +811,11 @@ func (f *ConsumeFuzzer) GetFloat32() (float32, error) {
|
|||||||
func (f *ConsumeFuzzer) GetFloat64() (float64, error) {
|
func (f *ConsumeFuzzer) GetFloat64() (float64, error) {
|
||||||
u64, err := f.GetNBytes(8)
|
u64, err := f.GetNBytes(8)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return float64(0.0), err
|
return 0, err
|
||||||
}
|
}
|
||||||
littleEndian, err := f.GetBool()
|
littleEndian, err := f.GetBool()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return float64(0.0), err
|
return 0, err
|
||||||
}
|
}
|
||||||
if littleEndian {
|
if littleEndian {
|
||||||
u64LE := binary.LittleEndian.Uint64(u64)
|
u64LE := binary.LittleEndian.Uint64(u64)
|
||||||
@ -924,9 +826,5 @@ func (f *ConsumeFuzzer) GetFloat64() (float64, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (f *ConsumeFuzzer) CreateSlice(targetSlice interface{}) error {
|
func (f *ConsumeFuzzer) CreateSlice(targetSlice interface{}) error {
|
||||||
err := f.GenerateStruct(targetSlice)
|
return f.GenerateStruct(targetSlice)
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
15
vendor/github.com/AdaLogics/go-fuzz-headers/funcs.go
generated
vendored
15
vendor/github.com/AdaLogics/go-fuzz-headers/funcs.go
generated
vendored
@ -35,23 +35,14 @@ func (f *ConsumeFuzzer) AddFuncs(fuzzFuncs []interface{}) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (f *ConsumeFuzzer) GenerateWithCustom(targetStruct interface{}) error {
|
func (f *ConsumeFuzzer) GenerateWithCustom(targetStruct interface{}) error {
|
||||||
v := reflect.ValueOf(targetStruct)
|
e := reflect.ValueOf(targetStruct).Elem()
|
||||||
e := v.Elem()
|
|
||||||
return f.fuzzStruct(e, true)
|
return f.fuzzStruct(e, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c Continue) GenerateStruct(targetStruct interface{}) error {
|
func (c Continue) GenerateStruct(targetStruct interface{}) error {
|
||||||
err := c.F.GenerateStruct(targetStruct)
|
return c.F.GenerateStruct(targetStruct)
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c Continue) GenerateStructWithCustom(targetStruct interface{}) error {
|
func (c Continue) GenerateStructWithCustom(targetStruct interface{}) error {
|
||||||
err := c.F.GenerateWithCustom(targetStruct)
|
return c.F.GenerateWithCustom(targetStruct)
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
80
vendor/github.com/AdaLogics/go-fuzz-headers/sql.go
generated
vendored
80
vendor/github.com/AdaLogics/go-fuzz-headers/sql.go
generated
vendored
@ -16,7 +16,7 @@ func getKeyword(f *ConsumeFuzzer) (string, error) {
|
|||||||
return k, nil
|
return k, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return keywords[0], fmt.Errorf("Could not get a kw")
|
return keywords[0], fmt.Errorf("could not get a kw")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Simple utility function to check if a string
|
// Simple utility function to check if a string
|
||||||
@ -101,7 +101,8 @@ var keywords = []string{
|
|||||||
"vitess_migration", "vitess_migrations", "vitess_replication_status",
|
"vitess_migration", "vitess_migrations", "vitess_replication_status",
|
||||||
"vitess_shards", "vitess_tablets", "vschema", "warnings", "when",
|
"vitess_shards", "vitess_tablets", "vschema", "warnings", "when",
|
||||||
"where", "while", "window", "with", "without", "work", "write", "xor",
|
"where", "while", "window", "with", "without", "work", "write", "xor",
|
||||||
"year", "year_month", "zerofill"}
|
"year", "year_month", "zerofill",
|
||||||
|
}
|
||||||
|
|
||||||
// Keywords that could get an additional keyword
|
// Keywords that could get an additional keyword
|
||||||
var needCustomString = []string{
|
var needCustomString = []string{
|
||||||
@ -131,11 +132,15 @@ var alterTableTokens = [][]string{
|
|||||||
}
|
}
|
||||||
|
|
||||||
var alterTokens = [][]string{
|
var alterTokens = [][]string{
|
||||||
{"DATABASE", "SCHEMA", "DEFINER = ", "EVENT", "FUNCTION", "INSTANCE",
|
{
|
||||||
"LOGFILE GROUP", "PROCEDURE", "SERVER"},
|
"DATABASE", "SCHEMA", "DEFINER = ", "EVENT", "FUNCTION", "INSTANCE",
|
||||||
|
"LOGFILE GROUP", "PROCEDURE", "SERVER",
|
||||||
|
},
|
||||||
{"CUSTOM_FUZZ_STRING"},
|
{"CUSTOM_FUZZ_STRING"},
|
||||||
{"ON SCHEDULE", "ON COMPLETION PRESERVE", "ON COMPLETION NOT PRESERVE",
|
{
|
||||||
"ADD UNDOFILE", "OPTIONS"},
|
"ON SCHEDULE", "ON COMPLETION PRESERVE", "ON COMPLETION NOT PRESERVE",
|
||||||
|
"ADD UNDOFILE", "OPTIONS",
|
||||||
|
},
|
||||||
{"RENAME TO", "INITIAL_SIZE = "},
|
{"RENAME TO", "INITIAL_SIZE = "},
|
||||||
{"ENABLE", "DISABLE", "DISABLE ON SLAVE", "ENGINE"},
|
{"ENABLE", "DISABLE", "DISABLE ON SLAVE", "ENGINE"},
|
||||||
{"COMMENT"},
|
{"COMMENT"},
|
||||||
@ -150,9 +155,11 @@ var setTokens = [][]string{
|
|||||||
|
|
||||||
var dropTokens = [][]string{
|
var dropTokens = [][]string{
|
||||||
{"TEMPORARY", "UNDO"},
|
{"TEMPORARY", "UNDO"},
|
||||||
{"DATABASE", "SCHEMA", "EVENT", "INDEX", "LOGFILE GROUP",
|
{
|
||||||
|
"DATABASE", "SCHEMA", "EVENT", "INDEX", "LOGFILE GROUP",
|
||||||
"PROCEDURE", "FUNCTION", "SERVER", "SPATIAL REFERENCE SYSTEM",
|
"PROCEDURE", "FUNCTION", "SERVER", "SPATIAL REFERENCE SYSTEM",
|
||||||
"TABLE", "TABLESPACE", "TRIGGER", "VIEW"},
|
"TABLE", "TABLESPACE", "TRIGGER", "VIEW",
|
||||||
|
},
|
||||||
{"IF EXISTS"},
|
{"IF EXISTS"},
|
||||||
{"CUSTOM_FUZZ_STRING"},
|
{"CUSTOM_FUZZ_STRING"},
|
||||||
{"ON", "ENGINE = ", "RESTRICT", "CASCADE"},
|
{"ON", "ENGINE = ", "RESTRICT", "CASCADE"},
|
||||||
@ -172,15 +179,21 @@ var truncateTokens = [][]string{
|
|||||||
|
|
||||||
var createTokens = [][]string{
|
var createTokens = [][]string{
|
||||||
{"OR REPLACE", "TEMPORARY", "UNDO"}, // For create spatial reference system
|
{"OR REPLACE", "TEMPORARY", "UNDO"}, // For create spatial reference system
|
||||||
{"UNIQUE", "FULLTEXT", "SPATIAL", "ALGORITHM = UNDEFINED", "ALGORITHM = MERGE",
|
{
|
||||||
"ALGORITHM = TEMPTABLE"},
|
"UNIQUE", "FULLTEXT", "SPATIAL", "ALGORITHM = UNDEFINED", "ALGORITHM = MERGE",
|
||||||
{"DATABASE", "SCHEMA", "EVENT", "FUNCTION", "INDEX", "LOGFILE GROUP",
|
"ALGORITHM = TEMPTABLE",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"DATABASE", "SCHEMA", "EVENT", "FUNCTION", "INDEX", "LOGFILE GROUP",
|
||||||
"PROCEDURE", "SERVER", "SPATIAL REFERENCE SYSTEM", "TABLE", "TABLESPACE",
|
"PROCEDURE", "SERVER", "SPATIAL REFERENCE SYSTEM", "TABLE", "TABLESPACE",
|
||||||
"TRIGGER", "VIEW"},
|
"TRIGGER", "VIEW",
|
||||||
|
},
|
||||||
{"IF NOT EXISTS"},
|
{"IF NOT EXISTS"},
|
||||||
{"CUSTOM_FUZZ_STRING"},
|
{"CUSTOM_FUZZ_STRING"},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
// For future use.
|
||||||
var updateTokens = [][]string{
|
var updateTokens = [][]string{
|
||||||
{"LOW_PRIORITY"},
|
{"LOW_PRIORITY"},
|
||||||
{"IGNORE"},
|
{"IGNORE"},
|
||||||
@ -189,6 +202,8 @@ var updateTokens = [][]string{
|
|||||||
{"ORDER BY"},
|
{"ORDER BY"},
|
||||||
{"LIMIT"},
|
{"LIMIT"},
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
var replaceTokens = [][]string{
|
var replaceTokens = [][]string{
|
||||||
{"LOW_PRIORITY", "DELAYED"},
|
{"LOW_PRIORITY", "DELAYED"},
|
||||||
{"INTO"},
|
{"INTO"},
|
||||||
@ -196,6 +211,7 @@ var replaceTokens = [][]string{
|
|||||||
{"CUSTOM_FUZZ_STRING"},
|
{"CUSTOM_FUZZ_STRING"},
|
||||||
{"VALUES", "VALUE"},
|
{"VALUES", "VALUE"},
|
||||||
}
|
}
|
||||||
|
|
||||||
var loadTokens = [][]string{
|
var loadTokens = [][]string{
|
||||||
{"DATA"},
|
{"DATA"},
|
||||||
{"LOW_PRIORITY", "CONCURRENT", "LOCAL"},
|
{"LOW_PRIORITY", "CONCURRENT", "LOCAL"},
|
||||||
@ -271,22 +287,24 @@ var alter_table_options = []string{
|
|||||||
"COMPACT", "SECONDARY_ENGINE_ATTRIBUTE", "STATS_AUTO_RECALC", "STATS_PERSISTENT",
|
"COMPACT", "SECONDARY_ENGINE_ATTRIBUTE", "STATS_AUTO_RECALC", "STATS_PERSISTENT",
|
||||||
"STATS_SAMPLE_PAGES", "ZLIB", "LZ4", "ENGINE_ATTRIBUTE", "KEY_BLOCK_SIZE", "MAX_ROWS",
|
"STATS_SAMPLE_PAGES", "ZLIB", "LZ4", "ENGINE_ATTRIBUTE", "KEY_BLOCK_SIZE", "MAX_ROWS",
|
||||||
"MIN_ROWS", "PACK_KEYS", "PASSWORD", "COMPRESSION", "CONNECTION", "DIRECTORY",
|
"MIN_ROWS", "PACK_KEYS", "PASSWORD", "COMPRESSION", "CONNECTION", "DIRECTORY",
|
||||||
"DELAY_KEY_WRITE", "ENCRYPTION", "STORAGE", "DISK", "MEMORY", "UNION"}
|
"DELAY_KEY_WRITE", "ENCRYPTION", "STORAGE", "DISK", "MEMORY", "UNION",
|
||||||
|
}
|
||||||
|
|
||||||
// Creates an 'alter table' statement. 'alter table' is an exception
|
// Creates an 'alter table' statement. 'alter table' is an exception
|
||||||
// in that it has its own function. The majority of statements
|
// in that it has its own function. The majority of statements
|
||||||
// are created by 'createStmt()'.
|
// are created by 'createStmt()'.
|
||||||
func createAlterTableStmt(f *ConsumeFuzzer) (string, error) {
|
func createAlterTableStmt(f *ConsumeFuzzer) (string, error) {
|
||||||
var stmt strings.Builder
|
|
||||||
stmt.WriteString("ALTER TABLE ")
|
|
||||||
maxArgs, err := f.GetInt()
|
maxArgs, err := f.GetInt()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
maxArgs = maxArgs % 30
|
maxArgs = maxArgs % 30
|
||||||
if maxArgs == 0 {
|
if maxArgs == 0 {
|
||||||
return "", fmt.Errorf("Could not create alter table stmt")
|
return "", fmt.Errorf("could not create alter table stmt")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var stmt strings.Builder
|
||||||
|
stmt.WriteString("ALTER TABLE ")
|
||||||
for i := 0; i < maxArgs; i++ {
|
for i := 0; i < maxArgs; i++ {
|
||||||
// Calculate if we get existing token or custom string
|
// Calculate if we get existing token or custom string
|
||||||
tokenType, err := f.GetInt()
|
tokenType, err := f.GetInt()
|
||||||
@ -298,13 +316,13 @@ func createAlterTableStmt(f *ConsumeFuzzer) (string, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
stmt.WriteString(fmt.Sprintf(" %s", customString))
|
stmt.WriteString(" " + customString)
|
||||||
} else {
|
} else {
|
||||||
tokenIndex, err := f.GetInt()
|
tokenIndex, err := f.GetInt()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
stmt.WriteString(fmt.Sprintf(" %s", alter_table_options[tokenIndex%len(alter_table_options)]))
|
stmt.WriteString(" " + alter_table_options[tokenIndex%len(alter_table_options)])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return stmt.String(), nil
|
return stmt.String(), nil
|
||||||
@ -316,7 +334,7 @@ func chooseToken(tokens []string, f *ConsumeFuzzer) (string, error) {
|
|||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
var token strings.Builder
|
var token strings.Builder
|
||||||
token.WriteString(fmt.Sprintf(" %s", tokens[index%len(tokens)]))
|
token.WriteString(tokens[index%len(tokens)])
|
||||||
if token.String() == "CUSTOM_FUZZ_STRING" {
|
if token.String() == "CUSTOM_FUZZ_STRING" {
|
||||||
customFuzzString, err := f.GetString()
|
customFuzzString, err := f.GetString()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -331,7 +349,7 @@ func chooseToken(tokens []string, f *ConsumeFuzzer) (string, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
token.WriteString(fmt.Sprintf(" %s", customFuzzString))
|
token.WriteString(" " + customFuzzString)
|
||||||
}
|
}
|
||||||
return token.String(), nil
|
return token.String(), nil
|
||||||
}
|
}
|
||||||
@ -398,21 +416,19 @@ func createStmt(f *ConsumeFuzzer) (string, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
query.WriteString(fmt.Sprintf(" %s", queryArgs))
|
query.WriteString(" " + queryArgs)
|
||||||
return query.String(), nil
|
return query.String(), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Creates the arguments of a statements. In a select statement
|
// Creates the arguments of a statements. In a select statement
|
||||||
// that would be everything after "select".
|
// that would be everything after "select".
|
||||||
func createStmtArgs(tokenslice [][]string, f *ConsumeFuzzer) (string, error) {
|
func createStmtArgs(tokenslice [][]string, f *ConsumeFuzzer) (string, error) {
|
||||||
var query strings.Builder
|
var query, token strings.Builder
|
||||||
var token strings.Builder
|
|
||||||
|
|
||||||
// We go through the tokens in the tokenslice,
|
// We go through the tokens in the tokenslice,
|
||||||
// create the respective token and add it to
|
// create the respective token and add it to
|
||||||
// "query"
|
// "query"
|
||||||
for _, tokens := range tokenslice {
|
for _, tokens := range tokenslice {
|
||||||
|
|
||||||
// For extra randomization, the fuzzer can
|
// For extra randomization, the fuzzer can
|
||||||
// choose to not include this token.
|
// choose to not include this token.
|
||||||
includeThisToken, err := f.GetBool()
|
includeThisToken, err := f.GetBool()
|
||||||
@ -429,7 +445,7 @@ func createStmtArgs(tokenslice [][]string, f *ConsumeFuzzer) (string, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
query.WriteString(fmt.Sprintf(" %s", chosenToken))
|
query.WriteString(" " + chosenToken)
|
||||||
} else {
|
} else {
|
||||||
token.WriteString(tokens[0])
|
token.WriteString(tokens[0])
|
||||||
|
|
||||||
@ -440,7 +456,7 @@ func createStmtArgs(tokenslice [][]string, f *ConsumeFuzzer) (string, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
query.WriteString(fmt.Sprintf(" %s", customFuzzString))
|
query.WriteString(" " + customFuzzString)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -470,7 +486,7 @@ func createQuery(f *ConsumeFuzzer) (string, error) {
|
|||||||
}
|
}
|
||||||
maxLen := queryLen % 60
|
maxLen := queryLen % 60
|
||||||
if maxLen == 0 {
|
if maxLen == 0 {
|
||||||
return "", fmt.Errorf("Could not create a query")
|
return "", fmt.Errorf("could not create a query")
|
||||||
}
|
}
|
||||||
var query strings.Builder
|
var query strings.Builder
|
||||||
for i := 0; i < maxLen; i++ {
|
for i := 0; i < maxLen; i++ {
|
||||||
@ -484,23 +500,25 @@ func createQuery(f *ConsumeFuzzer) (string, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
query.WriteString(fmt.Sprintf(" %s", keyword))
|
query.WriteString(" " + keyword)
|
||||||
} else {
|
} else {
|
||||||
customString, err := f.GetString()
|
customString, err := f.GetString()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
query.WriteString(fmt.Sprintf(" %s", customString))
|
query.WriteString(" " + customString)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if query.String() == "" {
|
if query.String() == "" {
|
||||||
return "", fmt.Errorf("Could not create a query")
|
return "", fmt.Errorf("could not create a query")
|
||||||
}
|
}
|
||||||
return query.String(), nil
|
return query.String(), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// This is the API that users will interact with.
|
// GetSQLString is the API that users interact with.
|
||||||
|
//
|
||||||
// Usage:
|
// Usage:
|
||||||
|
//
|
||||||
// f := NewConsumer(data)
|
// f := NewConsumer(data)
|
||||||
// sqlString, err := f.GetSQLString()
|
// sqlString, err := f.GetSQLString()
|
||||||
func (f *ConsumeFuzzer) GetSQLString() (string, error) {
|
func (f *ConsumeFuzzer) GetSQLString() (string, error) {
|
||||||
|
105
vendor/github.com/cpuguy83/go-md2man/v2/md2man/roff.go
generated
vendored
105
vendor/github.com/cpuguy83/go-md2man/v2/md2man/roff.go
generated
vendored
@ -15,7 +15,7 @@ type roffRenderer struct {
|
|||||||
extensions blackfriday.Extensions
|
extensions blackfriday.Extensions
|
||||||
listCounters []int
|
listCounters []int
|
||||||
firstHeader bool
|
firstHeader bool
|
||||||
defineTerm bool
|
firstDD bool
|
||||||
listDepth int
|
listDepth int
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -42,7 +42,8 @@ const (
|
|||||||
quoteCloseTag = "\n.RE\n"
|
quoteCloseTag = "\n.RE\n"
|
||||||
listTag = "\n.RS\n"
|
listTag = "\n.RS\n"
|
||||||
listCloseTag = "\n.RE\n"
|
listCloseTag = "\n.RE\n"
|
||||||
arglistTag = "\n.TP\n"
|
dtTag = "\n.TP\n"
|
||||||
|
dd2Tag = "\n"
|
||||||
tableStart = "\n.TS\nallbox;\n"
|
tableStart = "\n.TS\nallbox;\n"
|
||||||
tableEnd = ".TE\n"
|
tableEnd = ".TE\n"
|
||||||
tableCellStart = "T{\n"
|
tableCellStart = "T{\n"
|
||||||
@ -90,7 +91,7 @@ func (r *roffRenderer) RenderNode(w io.Writer, node *blackfriday.Node, entering
|
|||||||
|
|
||||||
switch node.Type {
|
switch node.Type {
|
||||||
case blackfriday.Text:
|
case blackfriday.Text:
|
||||||
r.handleText(w, node, entering)
|
escapeSpecialChars(w, node.Literal)
|
||||||
case blackfriday.Softbreak:
|
case blackfriday.Softbreak:
|
||||||
out(w, crTag)
|
out(w, crTag)
|
||||||
case blackfriday.Hardbreak:
|
case blackfriday.Hardbreak:
|
||||||
@ -150,40 +151,21 @@ func (r *roffRenderer) RenderNode(w io.Writer, node *blackfriday.Node, entering
|
|||||||
out(w, codeCloseTag)
|
out(w, codeCloseTag)
|
||||||
case blackfriday.Table:
|
case blackfriday.Table:
|
||||||
r.handleTable(w, node, entering)
|
r.handleTable(w, node, entering)
|
||||||
case blackfriday.TableCell:
|
|
||||||
r.handleTableCell(w, node, entering)
|
|
||||||
case blackfriday.TableHead:
|
case blackfriday.TableHead:
|
||||||
case blackfriday.TableBody:
|
case blackfriday.TableBody:
|
||||||
case blackfriday.TableRow:
|
case blackfriday.TableRow:
|
||||||
// no action as cell entries do all the nroff formatting
|
// no action as cell entries do all the nroff formatting
|
||||||
return blackfriday.GoToNext
|
return blackfriday.GoToNext
|
||||||
|
case blackfriday.TableCell:
|
||||||
|
r.handleTableCell(w, node, entering)
|
||||||
|
case blackfriday.HTMLSpan:
|
||||||
|
// ignore other HTML tags
|
||||||
default:
|
default:
|
||||||
fmt.Fprintln(os.Stderr, "WARNING: go-md2man does not handle node type "+node.Type.String())
|
fmt.Fprintln(os.Stderr, "WARNING: go-md2man does not handle node type "+node.Type.String())
|
||||||
}
|
}
|
||||||
return walkAction
|
return walkAction
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *roffRenderer) handleText(w io.Writer, node *blackfriday.Node, entering bool) {
|
|
||||||
var (
|
|
||||||
start, end string
|
|
||||||
)
|
|
||||||
// handle special roff table cell text encapsulation
|
|
||||||
if node.Parent.Type == blackfriday.TableCell {
|
|
||||||
if len(node.Literal) > 30 {
|
|
||||||
start = tableCellStart
|
|
||||||
end = tableCellEnd
|
|
||||||
} else {
|
|
||||||
// end rows that aren't terminated by "tableCellEnd" with a cr if end of row
|
|
||||||
if node.Parent.Next == nil && !node.Parent.IsHeader {
|
|
||||||
end = crTag
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
out(w, start)
|
|
||||||
escapeSpecialChars(w, node.Literal)
|
|
||||||
out(w, end)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (r *roffRenderer) handleHeading(w io.Writer, node *blackfriday.Node, entering bool) {
|
func (r *roffRenderer) handleHeading(w io.Writer, node *blackfriday.Node, entering bool) {
|
||||||
if entering {
|
if entering {
|
||||||
switch node.Level {
|
switch node.Level {
|
||||||
@ -230,15 +212,20 @@ func (r *roffRenderer) handleItem(w io.Writer, node *blackfriday.Node, entering
|
|||||||
if node.ListFlags&blackfriday.ListTypeOrdered != 0 {
|
if node.ListFlags&blackfriday.ListTypeOrdered != 0 {
|
||||||
out(w, fmt.Sprintf(".IP \"%3d.\" 5\n", r.listCounters[len(r.listCounters)-1]))
|
out(w, fmt.Sprintf(".IP \"%3d.\" 5\n", r.listCounters[len(r.listCounters)-1]))
|
||||||
r.listCounters[len(r.listCounters)-1]++
|
r.listCounters[len(r.listCounters)-1]++
|
||||||
|
} else if node.ListFlags&blackfriday.ListTypeTerm != 0 {
|
||||||
|
// DT (definition term): line just before DD (see below).
|
||||||
|
out(w, dtTag)
|
||||||
|
r.firstDD = true
|
||||||
} else if node.ListFlags&blackfriday.ListTypeDefinition != 0 {
|
} else if node.ListFlags&blackfriday.ListTypeDefinition != 0 {
|
||||||
// state machine for handling terms and following definitions
|
// DD (definition description): line that starts with ": ".
|
||||||
// since blackfriday does not distinguish them properly, nor
|
//
|
||||||
// does it seperate them into separate lists as it should
|
// We have to distinguish between the first DD and the
|
||||||
if !r.defineTerm {
|
// subsequent ones, as there should be no vertical
|
||||||
out(w, arglistTag)
|
// whitespace between the DT and the first DD.
|
||||||
r.defineTerm = true
|
if r.firstDD {
|
||||||
|
r.firstDD = false
|
||||||
} else {
|
} else {
|
||||||
r.defineTerm = false
|
out(w, dd2Tag)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
out(w, ".IP \\(bu 2\n")
|
out(w, ".IP \\(bu 2\n")
|
||||||
@ -251,7 +238,7 @@ func (r *roffRenderer) handleItem(w io.Writer, node *blackfriday.Node, entering
|
|||||||
func (r *roffRenderer) handleTable(w io.Writer, node *blackfriday.Node, entering bool) {
|
func (r *roffRenderer) handleTable(w io.Writer, node *blackfriday.Node, entering bool) {
|
||||||
if entering {
|
if entering {
|
||||||
out(w, tableStart)
|
out(w, tableStart)
|
||||||
//call walker to count cells (and rows?) so format section can be produced
|
// call walker to count cells (and rows?) so format section can be produced
|
||||||
columns := countColumns(node)
|
columns := countColumns(node)
|
||||||
out(w, strings.Repeat("l ", columns)+"\n")
|
out(w, strings.Repeat("l ", columns)+"\n")
|
||||||
out(w, strings.Repeat("l ", columns)+".\n")
|
out(w, strings.Repeat("l ", columns)+".\n")
|
||||||
@ -261,28 +248,41 @@ func (r *roffRenderer) handleTable(w io.Writer, node *blackfriday.Node, entering
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (r *roffRenderer) handleTableCell(w io.Writer, node *blackfriday.Node, entering bool) {
|
func (r *roffRenderer) handleTableCell(w io.Writer, node *blackfriday.Node, entering bool) {
|
||||||
var (
|
|
||||||
start, end string
|
|
||||||
)
|
|
||||||
if node.IsHeader {
|
|
||||||
start = codespanTag
|
|
||||||
end = codespanCloseTag
|
|
||||||
}
|
|
||||||
if entering {
|
if entering {
|
||||||
|
var start string
|
||||||
if node.Prev != nil && node.Prev.Type == blackfriday.TableCell {
|
if node.Prev != nil && node.Prev.Type == blackfriday.TableCell {
|
||||||
out(w, "\t"+start)
|
start = "\t"
|
||||||
} else {
|
|
||||||
out(w, start)
|
|
||||||
}
|
}
|
||||||
|
if node.IsHeader {
|
||||||
|
start += codespanTag
|
||||||
|
} else if nodeLiteralSize(node) > 30 {
|
||||||
|
start += tableCellStart
|
||||||
|
}
|
||||||
|
out(w, start)
|
||||||
} else {
|
} else {
|
||||||
// need to carriage return if we are at the end of the header row
|
var end string
|
||||||
if node.IsHeader && node.Next == nil {
|
if node.IsHeader {
|
||||||
end = end + crTag
|
end = codespanCloseTag
|
||||||
|
} else if nodeLiteralSize(node) > 30 {
|
||||||
|
end = tableCellEnd
|
||||||
|
}
|
||||||
|
if node.Next == nil && end != tableCellEnd {
|
||||||
|
// Last cell: need to carriage return if we are at the end of the
|
||||||
|
// header row and content isn't wrapped in a "tablecell"
|
||||||
|
end += crTag
|
||||||
}
|
}
|
||||||
out(w, end)
|
out(w, end)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func nodeLiteralSize(node *blackfriday.Node) int {
|
||||||
|
total := 0
|
||||||
|
for n := node.FirstChild; n != nil; n = n.FirstChild {
|
||||||
|
total += len(n.Literal)
|
||||||
|
}
|
||||||
|
return total
|
||||||
|
}
|
||||||
|
|
||||||
// because roff format requires knowing the column count before outputting any table
|
// because roff format requires knowing the column count before outputting any table
|
||||||
// data we need to walk a table tree and count the columns
|
// data we need to walk a table tree and count the columns
|
||||||
func countColumns(node *blackfriday.Node) int {
|
func countColumns(node *blackfriday.Node) int {
|
||||||
@ -309,15 +309,6 @@ func out(w io.Writer, output string) {
|
|||||||
io.WriteString(w, output) // nolint: errcheck
|
io.WriteString(w, output) // nolint: errcheck
|
||||||
}
|
}
|
||||||
|
|
||||||
func needsBackslash(c byte) bool {
|
|
||||||
for _, r := range []byte("-_&\\~") {
|
|
||||||
if c == r {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
func escapeSpecialChars(w io.Writer, text []byte) {
|
func escapeSpecialChars(w io.Writer, text []byte) {
|
||||||
for i := 0; i < len(text); i++ {
|
for i := 0; i < len(text); i++ {
|
||||||
// escape initial apostrophe or period
|
// escape initial apostrophe or period
|
||||||
@ -328,7 +319,7 @@ func escapeSpecialChars(w io.Writer, text []byte) {
|
|||||||
// directly copy normal characters
|
// directly copy normal characters
|
||||||
org := i
|
org := i
|
||||||
|
|
||||||
for i < len(text) && !needsBackslash(text[i]) {
|
for i < len(text) && text[i] != '\\' {
|
||||||
i++
|
i++
|
||||||
}
|
}
|
||||||
if i > org {
|
if i > org {
|
||||||
|
90
vendor/github.com/russross/blackfriday/v2/README.md
generated
vendored
90
vendor/github.com/russross/blackfriday/v2/README.md
generated
vendored
@ -1,4 +1,6 @@
|
|||||||
Blackfriday [](https://travis-ci.org/russross/blackfriday)
|
Blackfriday
|
||||||
|
[![Build Status][BuildV2SVG]][BuildV2URL]
|
||||||
|
[![PkgGoDev][PkgGoDevV2SVG]][PkgGoDevV2URL]
|
||||||
===========
|
===========
|
||||||
|
|
||||||
Blackfriday is a [Markdown][1] processor implemented in [Go][2]. It
|
Blackfriday is a [Markdown][1] processor implemented in [Go][2]. It
|
||||||
@ -16,19 +18,21 @@ It started as a translation from C of [Sundown][3].
|
|||||||
Installation
|
Installation
|
||||||
------------
|
------------
|
||||||
|
|
||||||
Blackfriday is compatible with any modern Go release. With Go 1.7 and git
|
Blackfriday is compatible with modern Go releases in module mode.
|
||||||
installed:
|
With Go installed:
|
||||||
|
|
||||||
go get gopkg.in/russross/blackfriday.v2
|
go get github.com/russross/blackfriday/v2
|
||||||
|
|
||||||
will download, compile, and install the package into your `$GOPATH`
|
will resolve and add the package to the current development module,
|
||||||
directory hierarchy. Alternatively, you can achieve the same if you
|
then build and install it. Alternatively, you can achieve the same
|
||||||
import it into a project:
|
if you import it in a package:
|
||||||
|
|
||||||
import "gopkg.in/russross/blackfriday.v2"
|
import "github.com/russross/blackfriday/v2"
|
||||||
|
|
||||||
and `go get` without parameters.
|
and `go get` without parameters.
|
||||||
|
|
||||||
|
Legacy GOPATH mode is unsupported.
|
||||||
|
|
||||||
|
|
||||||
Versions
|
Versions
|
||||||
--------
|
--------
|
||||||
@ -36,13 +40,9 @@ Versions
|
|||||||
Currently maintained and recommended version of Blackfriday is `v2`. It's being
|
Currently maintained and recommended version of Blackfriday is `v2`. It's being
|
||||||
developed on its own branch: https://github.com/russross/blackfriday/tree/v2 and the
|
developed on its own branch: https://github.com/russross/blackfriday/tree/v2 and the
|
||||||
documentation is available at
|
documentation is available at
|
||||||
https://godoc.org/gopkg.in/russross/blackfriday.v2.
|
https://pkg.go.dev/github.com/russross/blackfriday/v2.
|
||||||
|
|
||||||
It is `go get`-able via via [gopkg.in][6] at `gopkg.in/russross/blackfriday.v2`,
|
It is `go get`-able in module mode at `github.com/russross/blackfriday/v2`.
|
||||||
but we highly recommend using package management tool like [dep][7] or
|
|
||||||
[Glide][8] and make use of semantic versioning. With package management you
|
|
||||||
should import `github.com/russross/blackfriday` and specify that you're using
|
|
||||||
version 2.0.0.
|
|
||||||
|
|
||||||
Version 2 offers a number of improvements over v1:
|
Version 2 offers a number of improvements over v1:
|
||||||
|
|
||||||
@ -62,6 +62,11 @@ Potential drawbacks:
|
|||||||
v2. See issue [#348](https://github.com/russross/blackfriday/issues/348) for
|
v2. See issue [#348](https://github.com/russross/blackfriday/issues/348) for
|
||||||
tracking.
|
tracking.
|
||||||
|
|
||||||
|
If you are still interested in the legacy `v1`, you can import it from
|
||||||
|
`github.com/russross/blackfriday`. Documentation for the legacy v1 can be found
|
||||||
|
here: https://pkg.go.dev/github.com/russross/blackfriday.
|
||||||
|
|
||||||
|
|
||||||
Usage
|
Usage
|
||||||
-----
|
-----
|
||||||
|
|
||||||
@ -91,7 +96,7 @@ Here's an example of simple usage of Blackfriday together with Bluemonday:
|
|||||||
```go
|
```go
|
||||||
import (
|
import (
|
||||||
"github.com/microcosm-cc/bluemonday"
|
"github.com/microcosm-cc/bluemonday"
|
||||||
"github.com/russross/blackfriday"
|
"github.com/russross/blackfriday/v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ...
|
// ...
|
||||||
@ -104,6 +109,8 @@ html := bluemonday.UGCPolicy().SanitizeBytes(unsafe)
|
|||||||
If you want to customize the set of options, use `blackfriday.WithExtensions`,
|
If you want to customize the set of options, use `blackfriday.WithExtensions`,
|
||||||
`blackfriday.WithRenderer` and `blackfriday.WithRefOverride`.
|
`blackfriday.WithRenderer` and `blackfriday.WithRefOverride`.
|
||||||
|
|
||||||
|
### `blackfriday-tool`
|
||||||
|
|
||||||
You can also check out `blackfriday-tool` for a more complete example
|
You can also check out `blackfriday-tool` for a more complete example
|
||||||
of how to use it. Download and install it using:
|
of how to use it. Download and install it using:
|
||||||
|
|
||||||
@ -114,7 +121,7 @@ markdown file using a standalone program. You can also browse the
|
|||||||
source directly on github if you are just looking for some example
|
source directly on github if you are just looking for some example
|
||||||
code:
|
code:
|
||||||
|
|
||||||
* <http://github.com/russross/blackfriday-tool>
|
* <https://github.com/russross/blackfriday-tool>
|
||||||
|
|
||||||
Note that if you have not already done so, installing
|
Note that if you have not already done so, installing
|
||||||
`blackfriday-tool` will be sufficient to download and install
|
`blackfriday-tool` will be sufficient to download and install
|
||||||
@ -123,6 +130,22 @@ installed in `$GOPATH/bin`. This is a statically-linked binary that
|
|||||||
can be copied to wherever you need it without worrying about
|
can be copied to wherever you need it without worrying about
|
||||||
dependencies and library versions.
|
dependencies and library versions.
|
||||||
|
|
||||||
|
### Sanitized anchor names
|
||||||
|
|
||||||
|
Blackfriday includes an algorithm for creating sanitized anchor names
|
||||||
|
corresponding to a given input text. This algorithm is used to create
|
||||||
|
anchors for headings when `AutoHeadingIDs` extension is enabled. The
|
||||||
|
algorithm has a specification, so that other packages can create
|
||||||
|
compatible anchor names and links to those anchors.
|
||||||
|
|
||||||
|
The specification is located at https://pkg.go.dev/github.com/russross/blackfriday/v2#hdr-Sanitized_Anchor_Names.
|
||||||
|
|
||||||
|
[`SanitizedAnchorName`](https://pkg.go.dev/github.com/russross/blackfriday/v2#SanitizedAnchorName) exposes this functionality, and can be used to
|
||||||
|
create compatible links to the anchor names generated by blackfriday.
|
||||||
|
This algorithm is also implemented in a small standalone package at
|
||||||
|
[`github.com/shurcooL/sanitized_anchor_name`](https://pkg.go.dev/github.com/shurcooL/sanitized_anchor_name). It can be useful for clients
|
||||||
|
that want a small package and don't need full functionality of blackfriday.
|
||||||
|
|
||||||
|
|
||||||
Features
|
Features
|
||||||
--------
|
--------
|
||||||
@ -199,6 +222,15 @@ implements the following extensions:
|
|||||||
You can use 3 or more backticks to mark the beginning of the
|
You can use 3 or more backticks to mark the beginning of the
|
||||||
block, and the same number to mark the end of the block.
|
block, and the same number to mark the end of the block.
|
||||||
|
|
||||||
|
To preserve classes of fenced code blocks while using the bluemonday
|
||||||
|
HTML sanitizer, use the following policy:
|
||||||
|
|
||||||
|
```go
|
||||||
|
p := bluemonday.UGCPolicy()
|
||||||
|
p.AllowAttrs("class").Matching(regexp.MustCompile("^language-[a-zA-Z0-9]+$")).OnElements("code")
|
||||||
|
html := p.SanitizeBytes(unsafe)
|
||||||
|
```
|
||||||
|
|
||||||
* **Definition lists**. A simple definition list is made of a single-line
|
* **Definition lists**. A simple definition list is made of a single-line
|
||||||
term followed by a colon and the definition for that term.
|
term followed by a colon and the definition for that term.
|
||||||
|
|
||||||
@ -250,7 +282,7 @@ Other renderers
|
|||||||
Blackfriday is structured to allow alternative rendering engines. Here
|
Blackfriday is structured to allow alternative rendering engines. Here
|
||||||
are a few of note:
|
are a few of note:
|
||||||
|
|
||||||
* [github_flavored_markdown](https://godoc.org/github.com/shurcooL/github_flavored_markdown):
|
* [github_flavored_markdown](https://pkg.go.dev/github.com/shurcooL/github_flavored_markdown):
|
||||||
provides a GitHub Flavored Markdown renderer with fenced code block
|
provides a GitHub Flavored Markdown renderer with fenced code block
|
||||||
highlighting, clickable heading anchor links.
|
highlighting, clickable heading anchor links.
|
||||||
|
|
||||||
@ -261,20 +293,28 @@ are a few of note:
|
|||||||
* [markdownfmt](https://github.com/shurcooL/markdownfmt): like gofmt,
|
* [markdownfmt](https://github.com/shurcooL/markdownfmt): like gofmt,
|
||||||
but for markdown.
|
but for markdown.
|
||||||
|
|
||||||
* [LaTeX output](https://github.com/Ambrevar/Blackfriday-LaTeX):
|
* [LaTeX output](https://gitlab.com/ambrevar/blackfriday-latex):
|
||||||
renders output as LaTeX.
|
renders output as LaTeX.
|
||||||
|
|
||||||
|
* [bfchroma](https://github.com/Depado/bfchroma/): provides convenience
|
||||||
|
integration with the [Chroma](https://github.com/alecthomas/chroma) code
|
||||||
|
highlighting library. bfchroma is only compatible with v2 of Blackfriday and
|
||||||
|
provides a drop-in renderer ready to use with Blackfriday, as well as
|
||||||
|
options and means for further customization.
|
||||||
|
|
||||||
* [Blackfriday-Confluence](https://github.com/kentaro-m/blackfriday-confluence): provides a [Confluence Wiki Markup](https://confluence.atlassian.com/doc/confluence-wiki-markup-251003035.html) renderer.
|
* [Blackfriday-Confluence](https://github.com/kentaro-m/blackfriday-confluence): provides a [Confluence Wiki Markup](https://confluence.atlassian.com/doc/confluence-wiki-markup-251003035.html) renderer.
|
||||||
|
|
||||||
|
* [Blackfriday-Slack](https://github.com/karriereat/blackfriday-slack): converts markdown to slack message style
|
||||||
|
|
||||||
Todo
|
|
||||||
|
TODO
|
||||||
----
|
----
|
||||||
|
|
||||||
* More unit testing
|
* More unit testing
|
||||||
* Improve unicode support. It does not understand all unicode
|
* Improve Unicode support. It does not understand all Unicode
|
||||||
rules (about what constitutes a letter, a punctuation symbol,
|
rules (about what constitutes a letter, a punctuation symbol,
|
||||||
etc.), so it may fail to detect word boundaries correctly in
|
etc.), so it may fail to detect word boundaries correctly in
|
||||||
some instances. It is safe on all utf-8 input.
|
some instances. It is safe on all UTF-8 input.
|
||||||
|
|
||||||
|
|
||||||
License
|
License
|
||||||
@ -286,6 +326,10 @@ License
|
|||||||
[1]: https://daringfireball.net/projects/markdown/ "Markdown"
|
[1]: https://daringfireball.net/projects/markdown/ "Markdown"
|
||||||
[2]: https://golang.org/ "Go Language"
|
[2]: https://golang.org/ "Go Language"
|
||||||
[3]: https://github.com/vmg/sundown "Sundown"
|
[3]: https://github.com/vmg/sundown "Sundown"
|
||||||
[4]: https://godoc.org/gopkg.in/russross/blackfriday.v2#Parse "Parse func"
|
[4]: https://pkg.go.dev/github.com/russross/blackfriday/v2#Parse "Parse func"
|
||||||
[5]: https://github.com/microcosm-cc/bluemonday "Bluemonday"
|
[5]: https://github.com/microcosm-cc/bluemonday "Bluemonday"
|
||||||
[6]: https://labix.org/gopkg.in "gopkg.in"
|
|
||||||
|
[BuildV2SVG]: https://travis-ci.org/russross/blackfriday.svg?branch=v2
|
||||||
|
[BuildV2URL]: https://travis-ci.org/russross/blackfriday
|
||||||
|
[PkgGoDevV2SVG]: https://pkg.go.dev/badge/github.com/russross/blackfriday/v2
|
||||||
|
[PkgGoDevV2URL]: https://pkg.go.dev/github.com/russross/blackfriday/v2
|
||||||
|
30
vendor/github.com/russross/blackfriday/v2/block.go
generated
vendored
30
vendor/github.com/russross/blackfriday/v2/block.go
generated
vendored
@ -18,8 +18,7 @@ import (
|
|||||||
"html"
|
"html"
|
||||||
"regexp"
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
|
"unicode"
|
||||||
"github.com/shurcooL/sanitized_anchor_name"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -259,7 +258,7 @@ func (p *Markdown) prefixHeading(data []byte) int {
|
|||||||
}
|
}
|
||||||
if end > i {
|
if end > i {
|
||||||
if id == "" && p.extensions&AutoHeadingIDs != 0 {
|
if id == "" && p.extensions&AutoHeadingIDs != 0 {
|
||||||
id = sanitized_anchor_name.Create(string(data[i:end]))
|
id = SanitizedAnchorName(string(data[i:end]))
|
||||||
}
|
}
|
||||||
block := p.addBlock(Heading, data[i:end])
|
block := p.addBlock(Heading, data[i:end])
|
||||||
block.HeadingID = id
|
block.HeadingID = id
|
||||||
@ -673,6 +672,7 @@ func (p *Markdown) fencedCodeBlock(data []byte, doRender bool) int {
|
|||||||
if beg == 0 || beg >= len(data) {
|
if beg == 0 || beg >= len(data) {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
fenceLength := beg - 1
|
||||||
|
|
||||||
var work bytes.Buffer
|
var work bytes.Buffer
|
||||||
work.Write([]byte(info))
|
work.Write([]byte(info))
|
||||||
@ -706,6 +706,7 @@ func (p *Markdown) fencedCodeBlock(data []byte, doRender bool) int {
|
|||||||
if doRender {
|
if doRender {
|
||||||
block := p.addBlock(CodeBlock, work.Bytes()) // TODO: get rid of temp buffer
|
block := p.addBlock(CodeBlock, work.Bytes()) // TODO: get rid of temp buffer
|
||||||
block.IsFenced = true
|
block.IsFenced = true
|
||||||
|
block.FenceLength = fenceLength
|
||||||
finalizeCodeBlock(block)
|
finalizeCodeBlock(block)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1503,7 +1504,7 @@ func (p *Markdown) paragraph(data []byte) int {
|
|||||||
|
|
||||||
id := ""
|
id := ""
|
||||||
if p.extensions&AutoHeadingIDs != 0 {
|
if p.extensions&AutoHeadingIDs != 0 {
|
||||||
id = sanitized_anchor_name.Create(string(data[prev:eol]))
|
id = SanitizedAnchorName(string(data[prev:eol]))
|
||||||
}
|
}
|
||||||
|
|
||||||
block := p.addBlock(Heading, data[prev:eol])
|
block := p.addBlock(Heading, data[prev:eol])
|
||||||
@ -1588,3 +1589,24 @@ func skipUntilChar(text []byte, start int, char byte) int {
|
|||||||
}
|
}
|
||||||
return i
|
return i
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SanitizedAnchorName returns a sanitized anchor name for the given text.
|
||||||
|
//
|
||||||
|
// It implements the algorithm specified in the package comment.
|
||||||
|
func SanitizedAnchorName(text string) string {
|
||||||
|
var anchorName []rune
|
||||||
|
futureDash := false
|
||||||
|
for _, r := range text {
|
||||||
|
switch {
|
||||||
|
case unicode.IsLetter(r) || unicode.IsNumber(r):
|
||||||
|
if futureDash && len(anchorName) > 0 {
|
||||||
|
anchorName = append(anchorName, '-')
|
||||||
|
}
|
||||||
|
futureDash = false
|
||||||
|
anchorName = append(anchorName, unicode.ToLower(r))
|
||||||
|
default:
|
||||||
|
futureDash = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return string(anchorName)
|
||||||
|
}
|
||||||
|
28
vendor/github.com/russross/blackfriday/v2/doc.go
generated
vendored
28
vendor/github.com/russross/blackfriday/v2/doc.go
generated
vendored
@ -15,4 +15,32 @@
|
|||||||
//
|
//
|
||||||
// If you're interested in calling Blackfriday from command line, see
|
// If you're interested in calling Blackfriday from command line, see
|
||||||
// https://github.com/russross/blackfriday-tool.
|
// https://github.com/russross/blackfriday-tool.
|
||||||
|
//
|
||||||
|
// Sanitized Anchor Names
|
||||||
|
//
|
||||||
|
// Blackfriday includes an algorithm for creating sanitized anchor names
|
||||||
|
// corresponding to a given input text. This algorithm is used to create
|
||||||
|
// anchors for headings when AutoHeadingIDs extension is enabled. The
|
||||||
|
// algorithm is specified below, so that other packages can create
|
||||||
|
// compatible anchor names and links to those anchors.
|
||||||
|
//
|
||||||
|
// The algorithm iterates over the input text, interpreted as UTF-8,
|
||||||
|
// one Unicode code point (rune) at a time. All runes that are letters (category L)
|
||||||
|
// or numbers (category N) are considered valid characters. They are mapped to
|
||||||
|
// lower case, and included in the output. All other runes are considered
|
||||||
|
// invalid characters. Invalid characters that precede the first valid character,
|
||||||
|
// as well as invalid character that follow the last valid character
|
||||||
|
// are dropped completely. All other sequences of invalid characters
|
||||||
|
// between two valid characters are replaced with a single dash character '-'.
|
||||||
|
//
|
||||||
|
// SanitizedAnchorName exposes this functionality, and can be used to
|
||||||
|
// create compatible links to the anchor names generated by blackfriday.
|
||||||
|
// This algorithm is also implemented in a small standalone package at
|
||||||
|
// github.com/shurcooL/sanitized_anchor_name. It can be useful for clients
|
||||||
|
// that want a small package and don't need full functionality of blackfriday.
|
||||||
package blackfriday
|
package blackfriday
|
||||||
|
|
||||||
|
// NOTE: Keep Sanitized Anchor Name algorithm in sync with package
|
||||||
|
// github.com/shurcooL/sanitized_anchor_name.
|
||||||
|
// Otherwise, users of sanitized_anchor_name will get anchor names
|
||||||
|
// that are incompatible with those generated by blackfriday.
|
||||||
|
2236
vendor/github.com/russross/blackfriday/v2/entities.go
generated
vendored
Normal file
2236
vendor/github.com/russross/blackfriday/v2/entities.go
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
36
vendor/github.com/russross/blackfriday/v2/esc.go
generated
vendored
36
vendor/github.com/russross/blackfriday/v2/esc.go
generated
vendored
@ -13,14 +13,28 @@ var htmlEscaper = [256][]byte{
|
|||||||
}
|
}
|
||||||
|
|
||||||
func escapeHTML(w io.Writer, s []byte) {
|
func escapeHTML(w io.Writer, s []byte) {
|
||||||
|
escapeEntities(w, s, false)
|
||||||
|
}
|
||||||
|
|
||||||
|
func escapeAllHTML(w io.Writer, s []byte) {
|
||||||
|
escapeEntities(w, s, true)
|
||||||
|
}
|
||||||
|
|
||||||
|
func escapeEntities(w io.Writer, s []byte, escapeValidEntities bool) {
|
||||||
var start, end int
|
var start, end int
|
||||||
for end < len(s) {
|
for end < len(s) {
|
||||||
escSeq := htmlEscaper[s[end]]
|
escSeq := htmlEscaper[s[end]]
|
||||||
if escSeq != nil {
|
if escSeq != nil {
|
||||||
|
isEntity, entityEnd := nodeIsEntity(s, end)
|
||||||
|
if isEntity && !escapeValidEntities {
|
||||||
|
w.Write(s[start : entityEnd+1])
|
||||||
|
start = entityEnd + 1
|
||||||
|
} else {
|
||||||
w.Write(s[start:end])
|
w.Write(s[start:end])
|
||||||
w.Write(escSeq)
|
w.Write(escSeq)
|
||||||
start = end + 1
|
start = end + 1
|
||||||
}
|
}
|
||||||
|
}
|
||||||
end++
|
end++
|
||||||
}
|
}
|
||||||
if start < len(s) && end <= len(s) {
|
if start < len(s) && end <= len(s) {
|
||||||
@ -28,6 +42,28 @@ func escapeHTML(w io.Writer, s []byte) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func nodeIsEntity(s []byte, end int) (isEntity bool, endEntityPos int) {
|
||||||
|
isEntity = false
|
||||||
|
endEntityPos = end + 1
|
||||||
|
|
||||||
|
if s[end] == '&' {
|
||||||
|
for endEntityPos < len(s) {
|
||||||
|
if s[endEntityPos] == ';' {
|
||||||
|
if entities[string(s[end:endEntityPos+1])] {
|
||||||
|
isEntity = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if !isalnum(s[endEntityPos]) && s[endEntityPos] != '&' && s[endEntityPos] != '#' {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
endEntityPos++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return isEntity, endEntityPos
|
||||||
|
}
|
||||||
|
|
||||||
func escLink(w io.Writer, text []byte) {
|
func escLink(w io.Writer, text []byte) {
|
||||||
unesc := html.UnescapeString(string(text))
|
unesc := html.UnescapeString(string(text))
|
||||||
escapeHTML(w, []byte(unesc))
|
escapeHTML(w, []byte(unesc))
|
||||||
|
9
vendor/github.com/russross/blackfriday/v2/html.go
generated
vendored
9
vendor/github.com/russross/blackfriday/v2/html.go
generated
vendored
@ -132,7 +132,10 @@ func NewHTMLRenderer(params HTMLRendererParameters) *HTMLRenderer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if params.FootnoteReturnLinkContents == "" {
|
if params.FootnoteReturnLinkContents == "" {
|
||||||
params.FootnoteReturnLinkContents = `<sup>[return]</sup>`
|
// U+FE0E is VARIATION SELECTOR-15.
|
||||||
|
// It suppresses automatic emoji presentation of the preceding
|
||||||
|
// U+21A9 LEFTWARDS ARROW WITH HOOK on iOS and iPadOS.
|
||||||
|
params.FootnoteReturnLinkContents = "<span aria-label='Return'>↩\ufe0e</span>"
|
||||||
}
|
}
|
||||||
|
|
||||||
return &HTMLRenderer{
|
return &HTMLRenderer{
|
||||||
@ -616,7 +619,7 @@ func (r *HTMLRenderer) RenderNode(w io.Writer, node *Node, entering bool) WalkSt
|
|||||||
}
|
}
|
||||||
case Code:
|
case Code:
|
||||||
r.out(w, codeTag)
|
r.out(w, codeTag)
|
||||||
escapeHTML(w, node.Literal)
|
escapeAllHTML(w, node.Literal)
|
||||||
r.out(w, codeCloseTag)
|
r.out(w, codeCloseTag)
|
||||||
case Document:
|
case Document:
|
||||||
break
|
break
|
||||||
@ -762,7 +765,7 @@ func (r *HTMLRenderer) RenderNode(w io.Writer, node *Node, entering bool) WalkSt
|
|||||||
r.cr(w)
|
r.cr(w)
|
||||||
r.out(w, preTag)
|
r.out(w, preTag)
|
||||||
r.tag(w, codeTag[:len(codeTag)-1], attrs)
|
r.tag(w, codeTag[:len(codeTag)-1], attrs)
|
||||||
escapeHTML(w, node.Literal)
|
escapeAllHTML(w, node.Literal)
|
||||||
r.out(w, codeCloseTag)
|
r.out(w, codeCloseTag)
|
||||||
r.out(w, preCloseTag)
|
r.out(w, preCloseTag)
|
||||||
if node.Parent.Type != Item {
|
if node.Parent.Type != Item {
|
||||||
|
2
vendor/github.com/russross/blackfriday/v2/inline.go
generated
vendored
2
vendor/github.com/russross/blackfriday/v2/inline.go
generated
vendored
@ -278,7 +278,7 @@ func link(p *Markdown, data []byte, offset int) (int, *Node) {
|
|||||||
case data[i] == '\n':
|
case data[i] == '\n':
|
||||||
textHasNl = true
|
textHasNl = true
|
||||||
|
|
||||||
case data[i-1] == '\\':
|
case isBackslashEscaped(data, i):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
case data[i] == '[':
|
case data[i] == '[':
|
||||||
|
12
vendor/github.com/russross/blackfriday/v2/node.go
generated
vendored
12
vendor/github.com/russross/blackfriday/v2/node.go
generated
vendored
@ -199,7 +199,8 @@ func (n *Node) InsertBefore(sibling *Node) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (n *Node) isContainer() bool {
|
// IsContainer returns true if 'n' can contain children.
|
||||||
|
func (n *Node) IsContainer() bool {
|
||||||
switch n.Type {
|
switch n.Type {
|
||||||
case Document:
|
case Document:
|
||||||
fallthrough
|
fallthrough
|
||||||
@ -238,6 +239,11 @@ func (n *Node) isContainer() bool {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IsLeaf returns true if 'n' is a leaf node.
|
||||||
|
func (n *Node) IsLeaf() bool {
|
||||||
|
return !n.IsContainer()
|
||||||
|
}
|
||||||
|
|
||||||
func (n *Node) canContain(t NodeType) bool {
|
func (n *Node) canContain(t NodeType) bool {
|
||||||
if n.Type == List {
|
if n.Type == List {
|
||||||
return t == Item
|
return t == Item
|
||||||
@ -309,11 +315,11 @@ func newNodeWalker(root *Node) *nodeWalker {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (nw *nodeWalker) next() {
|
func (nw *nodeWalker) next() {
|
||||||
if (!nw.current.isContainer() || !nw.entering) && nw.current == nw.root {
|
if (!nw.current.IsContainer() || !nw.entering) && nw.current == nw.root {
|
||||||
nw.current = nil
|
nw.current = nil
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if nw.entering && nw.current.isContainer() {
|
if nw.entering && nw.current.IsContainer() {
|
||||||
if nw.current.FirstChild != nil {
|
if nw.current.FirstChild != nil {
|
||||||
nw.current = nw.current.FirstChild
|
nw.current = nw.current.FirstChild
|
||||||
nw.entering = true
|
nw.entering = true
|
||||||
|
16
vendor/github.com/shurcooL/sanitized_anchor_name/.travis.yml
generated
vendored
16
vendor/github.com/shurcooL/sanitized_anchor_name/.travis.yml
generated
vendored
@ -1,16 +0,0 @@
|
|||||||
sudo: false
|
|
||||||
language: go
|
|
||||||
go:
|
|
||||||
- 1.x
|
|
||||||
- master
|
|
||||||
matrix:
|
|
||||||
allow_failures:
|
|
||||||
- go: master
|
|
||||||
fast_finish: true
|
|
||||||
install:
|
|
||||||
- # Do nothing. This is needed to prevent default install action "go get -t -v ./..." from happening here (we want it to happen inside script step).
|
|
||||||
script:
|
|
||||||
- go get -t -v ./...
|
|
||||||
- diff -u <(echo -n) <(gofmt -d -s .)
|
|
||||||
- go tool vet .
|
|
||||||
- go test -v -race ./...
|
|
21
vendor/github.com/shurcooL/sanitized_anchor_name/LICENSE
generated
vendored
21
vendor/github.com/shurcooL/sanitized_anchor_name/LICENSE
generated
vendored
@ -1,21 +0,0 @@
|
|||||||
MIT License
|
|
||||||
|
|
||||||
Copyright (c) 2015 Dmitri Shuralyov
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
36
vendor/github.com/shurcooL/sanitized_anchor_name/README.md
generated
vendored
36
vendor/github.com/shurcooL/sanitized_anchor_name/README.md
generated
vendored
@ -1,36 +0,0 @@
|
|||||||
sanitized_anchor_name
|
|
||||||
=====================
|
|
||||||
|
|
||||||
[](https://travis-ci.org/shurcooL/sanitized_anchor_name) [](https://godoc.org/github.com/shurcooL/sanitized_anchor_name)
|
|
||||||
|
|
||||||
Package sanitized_anchor_name provides a func to create sanitized anchor names.
|
|
||||||
|
|
||||||
Its logic can be reused by multiple packages to create interoperable anchor names
|
|
||||||
and links to those anchors.
|
|
||||||
|
|
||||||
At this time, it does not try to ensure that generated anchor names
|
|
||||||
are unique, that responsibility falls on the caller.
|
|
||||||
|
|
||||||
Installation
|
|
||||||
------------
|
|
||||||
|
|
||||||
```bash
|
|
||||||
go get -u github.com/shurcooL/sanitized_anchor_name
|
|
||||||
```
|
|
||||||
|
|
||||||
Example
|
|
||||||
-------
|
|
||||||
|
|
||||||
```Go
|
|
||||||
anchorName := sanitized_anchor_name.Create("This is a header")
|
|
||||||
|
|
||||||
fmt.Println(anchorName)
|
|
||||||
|
|
||||||
// Output:
|
|
||||||
// this-is-a-header
|
|
||||||
```
|
|
||||||
|
|
||||||
License
|
|
||||||
-------
|
|
||||||
|
|
||||||
- [MIT License](LICENSE)
|
|
29
vendor/github.com/shurcooL/sanitized_anchor_name/main.go
generated
vendored
29
vendor/github.com/shurcooL/sanitized_anchor_name/main.go
generated
vendored
@ -1,29 +0,0 @@
|
|||||||
// Package sanitized_anchor_name provides a func to create sanitized anchor names.
|
|
||||||
//
|
|
||||||
// Its logic can be reused by multiple packages to create interoperable anchor names
|
|
||||||
// and links to those anchors.
|
|
||||||
//
|
|
||||||
// At this time, it does not try to ensure that generated anchor names
|
|
||||||
// are unique, that responsibility falls on the caller.
|
|
||||||
package sanitized_anchor_name // import "github.com/shurcooL/sanitized_anchor_name"
|
|
||||||
|
|
||||||
import "unicode"
|
|
||||||
|
|
||||||
// Create returns a sanitized anchor name for the given text.
|
|
||||||
func Create(text string) string {
|
|
||||||
var anchorName []rune
|
|
||||||
var futureDash = false
|
|
||||||
for _, r := range text {
|
|
||||||
switch {
|
|
||||||
case unicode.IsLetter(r) || unicode.IsNumber(r):
|
|
||||||
if futureDash && len(anchorName) > 0 {
|
|
||||||
anchorName = append(anchorName, '-')
|
|
||||||
}
|
|
||||||
futureDash = false
|
|
||||||
anchorName = append(anchorName, unicode.ToLower(r))
|
|
||||||
default:
|
|
||||||
futureDash = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return string(anchorName)
|
|
||||||
}
|
|
4
vendor/github.com/sirupsen/logrus/README.md
generated
vendored
4
vendor/github.com/sirupsen/logrus/README.md
generated
vendored
@ -1,4 +1,4 @@
|
|||||||
# Logrus <img src="http://i.imgur.com/hTeVwmJ.png" width="40" height="40" alt=":walrus:" class="emoji" title=":walrus:"/> [](https://travis-ci.org/sirupsen/logrus) [](https://godoc.org/github.com/sirupsen/logrus)
|
# Logrus <img src="http://i.imgur.com/hTeVwmJ.png" width="40" height="40" alt=":walrus:" class="emoji" title=":walrus:"/> [](https://github.com/sirupsen/logrus/actions?query=workflow%3ACI) [](https://travis-ci.org/sirupsen/logrus) [](https://pkg.go.dev/github.com/sirupsen/logrus)
|
||||||
|
|
||||||
Logrus is a structured logger for Go (golang), completely API compatible with
|
Logrus is a structured logger for Go (golang), completely API compatible with
|
||||||
the standard library logger.
|
the standard library logger.
|
||||||
@ -341,7 +341,7 @@ import (
|
|||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
init() {
|
func init() {
|
||||||
// do something here to set environment depending on an environment variable
|
// do something here to set environment depending on an environment variable
|
||||||
// or command-line flag
|
// or command-line flag
|
||||||
if Environment == "production" {
|
if Environment == "production" {
|
||||||
|
9
vendor/github.com/sirupsen/logrus/buffer_pool.go
generated
vendored
9
vendor/github.com/sirupsen/logrus/buffer_pool.go
generated
vendored
@ -26,15 +26,6 @@ func (p *defaultPool) Get() *bytes.Buffer {
|
|||||||
return p.pool.Get().(*bytes.Buffer)
|
return p.pool.Get().(*bytes.Buffer)
|
||||||
}
|
}
|
||||||
|
|
||||||
func getBuffer() *bytes.Buffer {
|
|
||||||
return bufferPool.Get()
|
|
||||||
}
|
|
||||||
|
|
||||||
func putBuffer(buf *bytes.Buffer) {
|
|
||||||
buf.Reset()
|
|
||||||
bufferPool.Put(buf)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetBufferPool allows to replace the default logrus buffer pool
|
// SetBufferPool allows to replace the default logrus buffer pool
|
||||||
// to better meets the specific needs of an application.
|
// to better meets the specific needs of an application.
|
||||||
func SetBufferPool(bp BufferPool) {
|
func SetBufferPool(bp BufferPool) {
|
||||||
|
21
vendor/github.com/sirupsen/logrus/entry.go
generated
vendored
21
vendor/github.com/sirupsen/logrus/entry.go
generated
vendored
@ -232,6 +232,7 @@ func (entry *Entry) log(level Level, msg string) {
|
|||||||
|
|
||||||
newEntry.Logger.mu.Lock()
|
newEntry.Logger.mu.Lock()
|
||||||
reportCaller := newEntry.Logger.ReportCaller
|
reportCaller := newEntry.Logger.ReportCaller
|
||||||
|
bufPool := newEntry.getBufferPool()
|
||||||
newEntry.Logger.mu.Unlock()
|
newEntry.Logger.mu.Unlock()
|
||||||
|
|
||||||
if reportCaller {
|
if reportCaller {
|
||||||
@ -239,11 +240,11 @@ func (entry *Entry) log(level Level, msg string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
newEntry.fireHooks()
|
newEntry.fireHooks()
|
||||||
|
buffer = bufPool.Get()
|
||||||
buffer = getBuffer()
|
|
||||||
defer func() {
|
defer func() {
|
||||||
newEntry.Buffer = nil
|
newEntry.Buffer = nil
|
||||||
putBuffer(buffer)
|
buffer.Reset()
|
||||||
|
bufPool.Put(buffer)
|
||||||
}()
|
}()
|
||||||
buffer.Reset()
|
buffer.Reset()
|
||||||
newEntry.Buffer = buffer
|
newEntry.Buffer = buffer
|
||||||
@ -260,6 +261,13 @@ func (entry *Entry) log(level Level, msg string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (entry *Entry) getBufferPool() (pool BufferPool) {
|
||||||
|
if entry.Logger.BufferPool != nil {
|
||||||
|
return entry.Logger.BufferPool
|
||||||
|
}
|
||||||
|
return bufferPool
|
||||||
|
}
|
||||||
|
|
||||||
func (entry *Entry) fireHooks() {
|
func (entry *Entry) fireHooks() {
|
||||||
var tmpHooks LevelHooks
|
var tmpHooks LevelHooks
|
||||||
entry.Logger.mu.Lock()
|
entry.Logger.mu.Lock()
|
||||||
@ -276,18 +284,21 @@ func (entry *Entry) fireHooks() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (entry *Entry) write() {
|
func (entry *Entry) write() {
|
||||||
|
entry.Logger.mu.Lock()
|
||||||
|
defer entry.Logger.mu.Unlock()
|
||||||
serialized, err := entry.Logger.Formatter.Format(entry)
|
serialized, err := entry.Logger.Formatter.Format(entry)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Fprintf(os.Stderr, "Failed to obtain reader, %v\n", err)
|
fmt.Fprintf(os.Stderr, "Failed to obtain reader, %v\n", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
entry.Logger.mu.Lock()
|
|
||||||
defer entry.Logger.mu.Unlock()
|
|
||||||
if _, err := entry.Logger.Out.Write(serialized); err != nil {
|
if _, err := entry.Logger.Out.Write(serialized); err != nil {
|
||||||
fmt.Fprintf(os.Stderr, "Failed to write to log, %v\n", err)
|
fmt.Fprintf(os.Stderr, "Failed to write to log, %v\n", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Log will log a message at the level given as parameter.
|
||||||
|
// Warning: using Log at Panic or Fatal level will not respectively Panic nor Exit.
|
||||||
|
// For this behaviour Entry.Panic or Entry.Fatal should be used instead.
|
||||||
func (entry *Entry) Log(level Level, args ...interface{}) {
|
func (entry *Entry) Log(level Level, args ...interface{}) {
|
||||||
if entry.Logger.IsLevelEnabled(level) {
|
if entry.Logger.IsLevelEnabled(level) {
|
||||||
entry.log(level, fmt.Sprint(args...))
|
entry.log(level, fmt.Sprint(args...))
|
||||||
|
13
vendor/github.com/sirupsen/logrus/logger.go
generated
vendored
13
vendor/github.com/sirupsen/logrus/logger.go
generated
vendored
@ -44,6 +44,9 @@ type Logger struct {
|
|||||||
entryPool sync.Pool
|
entryPool sync.Pool
|
||||||
// Function to exit the application, defaults to `os.Exit()`
|
// Function to exit the application, defaults to `os.Exit()`
|
||||||
ExitFunc exitFunc
|
ExitFunc exitFunc
|
||||||
|
// The buffer pool used to format the log. If it is nil, the default global
|
||||||
|
// buffer pool will be used.
|
||||||
|
BufferPool BufferPool
|
||||||
}
|
}
|
||||||
|
|
||||||
type exitFunc func(int)
|
type exitFunc func(int)
|
||||||
@ -192,6 +195,9 @@ func (logger *Logger) Panicf(format string, args ...interface{}) {
|
|||||||
logger.Logf(PanicLevel, format, args...)
|
logger.Logf(PanicLevel, format, args...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Log will log a message at the level given as parameter.
|
||||||
|
// Warning: using Log at Panic or Fatal level will not respectively Panic nor Exit.
|
||||||
|
// For this behaviour Logger.Panic or Logger.Fatal should be used instead.
|
||||||
func (logger *Logger) Log(level Level, args ...interface{}) {
|
func (logger *Logger) Log(level Level, args ...interface{}) {
|
||||||
if logger.IsLevelEnabled(level) {
|
if logger.IsLevelEnabled(level) {
|
||||||
entry := logger.newEntry()
|
entry := logger.newEntry()
|
||||||
@ -402,3 +408,10 @@ func (logger *Logger) ReplaceHooks(hooks LevelHooks) LevelHooks {
|
|||||||
logger.mu.Unlock()
|
logger.mu.Unlock()
|
||||||
return oldHooks
|
return oldHooks
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SetBufferPool sets the logger buffer pool.
|
||||||
|
func (logger *Logger) SetBufferPool(pool BufferPool) {
|
||||||
|
logger.mu.Lock()
|
||||||
|
defer logger.mu.Unlock()
|
||||||
|
logger.BufferPool = pool
|
||||||
|
}
|
||||||
|
14
vendor/golang.org/x/sys/unix/sockcmsg_unix.go
generated
vendored
14
vendor/golang.org/x/sys/unix/sockcmsg_unix.go
generated
vendored
@ -52,6 +52,20 @@ func ParseSocketControlMessage(b []byte) ([]SocketControlMessage, error) {
|
|||||||
return msgs, nil
|
return msgs, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ParseOneSocketControlMessage parses a single socket control message from b, returning the message header,
|
||||||
|
// message data (a slice of b), and the remainder of b after that single message.
|
||||||
|
// When there are no remaining messages, len(remainder) == 0.
|
||||||
|
func ParseOneSocketControlMessage(b []byte) (hdr Cmsghdr, data []byte, remainder []byte, err error) {
|
||||||
|
h, dbuf, err := socketControlMessageHeaderAndData(b)
|
||||||
|
if err != nil {
|
||||||
|
return Cmsghdr{}, nil, nil, err
|
||||||
|
}
|
||||||
|
if i := cmsgAlignOf(int(h.Len)); i < len(b) {
|
||||||
|
remainder = b[i:]
|
||||||
|
}
|
||||||
|
return *h, dbuf, remainder, nil
|
||||||
|
}
|
||||||
|
|
||||||
func socketControlMessageHeaderAndData(b []byte) (*Cmsghdr, []byte, error) {
|
func socketControlMessageHeaderAndData(b []byte) (*Cmsghdr, []byte, error) {
|
||||||
h := (*Cmsghdr)(unsafe.Pointer(&b[0]))
|
h := (*Cmsghdr)(unsafe.Pointer(&b[0]))
|
||||||
if h.Len < SizeofCmsghdr || uint64(h.Len) > uint64(len(b)) {
|
if h.Len < SizeofCmsghdr || uint64(h.Len) > uint64(len(b)) {
|
||||||
|
1
vendor/golang.org/x/sys/unix/syscall_linux.go
generated
vendored
1
vendor/golang.org/x/sys/unix/syscall_linux.go
generated
vendored
@ -1554,6 +1554,7 @@ func sendmsgN(fd int, iov []Iovec, oob []byte, ptr unsafe.Pointer, salen _Sockle
|
|||||||
var iova [1]Iovec
|
var iova [1]Iovec
|
||||||
iova[0].Base = &dummy
|
iova[0].Base = &dummy
|
||||||
iova[0].SetLen(1)
|
iova[0].SetLen(1)
|
||||||
|
iov = iova[:]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
msg.Control = &oob[0]
|
msg.Control = &oob[0]
|
||||||
|
21
vendor/modules.txt
vendored
21
vendor/modules.txt
vendored
@ -1,7 +1,7 @@
|
|||||||
# cloud.google.com/go/compute/metadata v0.2.1
|
# cloud.google.com/go/compute/metadata v0.2.1
|
||||||
## explicit; go 1.19
|
## explicit; go 1.19
|
||||||
# github.com/AdaLogics/go-fuzz-headers v0.0.0-20221103172237-443f56ff4ba8
|
# github.com/AdaLogics/go-fuzz-headers v0.0.0-20221118232415-3345c89a7c72
|
||||||
## explicit; go 1.13
|
## explicit; go 1.18
|
||||||
github.com/AdaLogics/go-fuzz-headers
|
github.com/AdaLogics/go-fuzz-headers
|
||||||
# github.com/AdamKorcz/go-118-fuzz-build v0.0.0-20220912195655-e1f97a00006b
|
# github.com/AdamKorcz/go-118-fuzz-build v0.0.0-20220912195655-e1f97a00006b
|
||||||
## explicit; go 1.18
|
## explicit; go 1.18
|
||||||
@ -179,8 +179,8 @@ github.com/containers/ocicrypt/utils/keyprovider
|
|||||||
## explicit; go 1.12
|
## explicit; go 1.12
|
||||||
github.com/coreos/go-systemd/v22/daemon
|
github.com/coreos/go-systemd/v22/daemon
|
||||||
github.com/coreos/go-systemd/v22/dbus
|
github.com/coreos/go-systemd/v22/dbus
|
||||||
# github.com/cpuguy83/go-md2man/v2 v2.0.0
|
# github.com/cpuguy83/go-md2man/v2 v2.0.2
|
||||||
## explicit; go 1.12
|
## explicit; go 1.11
|
||||||
github.com/cpuguy83/go-md2man/v2/md2man
|
github.com/cpuguy83/go-md2man/v2/md2man
|
||||||
# github.com/cyphar/filepath-securejoin v0.2.3
|
# github.com/cyphar/filepath-securejoin v0.2.3
|
||||||
## explicit; go 1.13
|
## explicit; go 1.13
|
||||||
@ -286,7 +286,7 @@ github.com/klauspost/compress/internal/cpuinfo
|
|||||||
github.com/klauspost/compress/internal/snapref
|
github.com/klauspost/compress/internal/snapref
|
||||||
github.com/klauspost/compress/zstd
|
github.com/klauspost/compress/zstd
|
||||||
github.com/klauspost/compress/zstd/internal/xxhash
|
github.com/klauspost/compress/zstd/internal/xxhash
|
||||||
# github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369
|
# github.com/matttproud/golang_protobuf_extensions v1.0.2
|
||||||
## explicit; go 1.9
|
## explicit; go 1.9
|
||||||
github.com/matttproud/golang_protobuf_extensions/pbutil
|
github.com/matttproud/golang_protobuf_extensions/pbutil
|
||||||
# github.com/miekg/pkcs11 v1.1.1
|
# github.com/miekg/pkcs11 v1.1.1
|
||||||
@ -305,7 +305,7 @@ github.com/moby/spdystream/spdy
|
|||||||
# github.com/moby/sys/mountinfo v0.6.2
|
# github.com/moby/sys/mountinfo v0.6.2
|
||||||
## explicit; go 1.16
|
## explicit; go 1.16
|
||||||
github.com/moby/sys/mountinfo
|
github.com/moby/sys/mountinfo
|
||||||
# github.com/moby/sys/sequential v0.0.0-20220829095930-b22ba8a69b30
|
# github.com/moby/sys/sequential v0.5.0
|
||||||
## explicit; go 1.17
|
## explicit; go 1.17
|
||||||
github.com/moby/sys/sequential
|
github.com/moby/sys/sequential
|
||||||
# github.com/moby/sys/signal v0.7.0
|
# github.com/moby/sys/signal v0.7.0
|
||||||
@ -377,13 +377,10 @@ github.com/prometheus/common/model
|
|||||||
github.com/prometheus/procfs
|
github.com/prometheus/procfs
|
||||||
github.com/prometheus/procfs/internal/fs
|
github.com/prometheus/procfs/internal/fs
|
||||||
github.com/prometheus/procfs/internal/util
|
github.com/prometheus/procfs/internal/util
|
||||||
# github.com/russross/blackfriday/v2 v2.0.1
|
# github.com/russross/blackfriday/v2 v2.1.0
|
||||||
## explicit
|
## explicit
|
||||||
github.com/russross/blackfriday/v2
|
github.com/russross/blackfriday/v2
|
||||||
# github.com/shurcooL/sanitized_anchor_name v1.0.0
|
# github.com/sirupsen/logrus v1.9.0
|
||||||
## explicit
|
|
||||||
github.com/shurcooL/sanitized_anchor_name
|
|
||||||
# github.com/sirupsen/logrus v1.8.1
|
|
||||||
## explicit; go 1.13
|
## explicit; go 1.13
|
||||||
github.com/sirupsen/logrus
|
github.com/sirupsen/logrus
|
||||||
# github.com/spf13/pflag v1.0.5
|
# github.com/spf13/pflag v1.0.5
|
||||||
@ -518,7 +515,7 @@ golang.org/x/oauth2/internal
|
|||||||
## explicit
|
## explicit
|
||||||
golang.org/x/sync/errgroup
|
golang.org/x/sync/errgroup
|
||||||
golang.org/x/sync/semaphore
|
golang.org/x/sync/semaphore
|
||||||
# golang.org/x/sys v0.1.0
|
# golang.org/x/sys v0.2.0
|
||||||
## explicit; go 1.17
|
## explicit; go 1.17
|
||||||
golang.org/x/sys/execabs
|
golang.org/x/sys/execabs
|
||||||
golang.org/x/sys/internal/unsafeheader
|
golang.org/x/sys/internal/unsafeheader
|
||||||
|
Loading…
Reference in New Issue
Block a user