This is an automated email from the ASF dual-hosted git repository.

zhangjintao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/apisix-ingress-controller.git


The following commit(s) were added to refs/heads/master by this push:
     new 4241b673 fix: panic at empty http spec (#1660)
4241b673 is described below

commit 4241b673b3fd385e82d5ca3a39fed8acafa5bd64
Author: Basuotian <[email protected]>
AuthorDate: Tue Feb 14 14:00:29 2023 +0800

    fix: panic at empty http spec (#1660)
---
 pkg/providers/ingress/translation/translator.go    |  3 ++
 .../suite-ingress-resource/ingress.go              | 33 ++++++++++++++++++++++
 2 files changed, 36 insertions(+)

diff --git a/pkg/providers/ingress/translation/translator.go 
b/pkg/providers/ingress/translation/translator.go
index a4307860..ea8f31e6 100644
--- a/pkg/providers/ingress/translation/translator.go
+++ b/pkg/providers/ingress/translation/translator.go
@@ -160,6 +160,9 @@ func (t *translator) translateIngressV1(ing 
*networkingv1.Ingress, skipVerify bo
                ns = ingress.ServiceNamespace
        }
        for _, rule := range ing.Spec.Rules {
+               if rule.HTTP == nil {
+                       continue
+               }
                for _, pathRule := range rule.HTTP.Paths {
                        var (
                                ups *apisixv1.Upstream
diff --git a/test/e2e/suite-ingress/suite-ingress-resource/ingress.go 
b/test/e2e/suite-ingress/suite-ingress-resource/ingress.go
index 3f32f682..923117f4 100644
--- a/test/e2e/suite-ingress/suite-ingress-resource/ingress.go
+++ b/test/e2e/suite-ingress/suite-ingress-resource/ingress.go
@@ -466,6 +466,39 @@ spec:
                // Mismatched host
                _ = 
s.NewAPISIXClient().GET("/anything/aaa/ok").WithHeader("Host", 
"a.httpbin.org").Expect().Status(http.StatusNotFound)
        })
+
+       ginkgo.It("v1 ingress with empty http spec", func() {
+               backendSvc, backendPort := s.DefaultHTTPBackend()
+               ing := fmt.Sprintf(`
+apiVersion: networking.k8s.io/v1
+kind: Ingress
+metadata:
+  annotations:
+    kubernetes.io/ingress.class: apisix
+  name: ingress-v1
+spec:
+  rules:
+  - host: empty.httpbin.org
+  - host: httpbin.org
+    http:
+      paths:
+      - path: /status
+        pathType: Prefix
+        backend:
+          service:
+            name: %s
+            port:
+              number: %d
+`, backendSvc, backendPort[0])
+               assert.Nil(ginkgo.GinkgoT(), s.CreateResourceFromString(ing), 
"creating ingress")
+               assert.Nil(ginkgo.GinkgoT(), s.EnsureNumApisixRoutesCreated(1))
+
+               _ = s.NewAPISIXClient().GET("/status/500").WithHeader("Host", 
"httpbin.org").Expect().Status(http.StatusInternalServerError)
+               _ = s.NewAPISIXClient().GET("/status/504").WithHeader("Host", 
"httpbin.org").Expect().Status(http.StatusGatewayTimeout)
+               _ = s.NewAPISIXClient().GET("/statusaaa").WithHeader("Host", 
"httpbin.org").Expect().Status(http.StatusNotFound).Body().Contains("404 Route 
Not Found")
+               // Mismatched host
+               _ = s.NewAPISIXClient().GET("/status/200").WithHeader("Host", 
"empty.httpbin.org").Expect().Status(http.StatusNotFound)
+       })
 })
 
 var _ = ginkgo.Describe("suite-ingress-resource: support 
ingress.networking/v1beta1", func() {

Reply via email to