Skip to content

Commit 411615c

Browse files
authored
Merge pull request #877 from hzxuzhonghu/improve-map-op
Prevent potential panic when object is nil or empty
2 parents 85fd6ae + fc3f04f commit 411615c

File tree

5 files changed

+49
-7
lines changed

5 files changed

+49
-7
lines changed

pkg/cache/v2/maps/authz.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@ import (
3131

3232
func authorizationToGolang(goMsg *security_v2.Authorization, cMsg *C.Istio__Security__Authorization) error {
3333
buf := make([]byte, C.istio__security__authorization__get_packed_size(cMsg))
34+
if len(buf) == 0 {
35+
return nil
36+
}
3437

3538
C.istio__security__authorization__pack(cMsg, convertToPack(buf))
3639
if err := proto.Unmarshal(buf, goMsg); err != nil {
@@ -45,6 +48,10 @@ func authorizationToClang(goMsg *security_v2.Authorization) (*C.Istio__Security_
4548
return nil, err
4649
}
4750

51+
if len(buf) == 0 {
52+
return nil, nil
53+
}
54+
4855
cMsg := C.istio__security__authorization__unpack(nil, C.size_t(len(buf)), convertToPack(buf))
4956
if cMsg == nil {
5057
return nil, fmt.Errorf("istio__security__authorization__unpack failed")

pkg/cache/v2/maps/cluster.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@ import (
3434

3535
func clusterToGolang(goMsg *cluster_v2.Cluster, cMsg *C.Cluster__Cluster) error {
3636
buf := make([]byte, C.cluster__cluster__get_packed_size(cMsg))
37+
if len(buf) == 0 {
38+
return nil
39+
}
3740

3841
C.cluster__cluster__pack(cMsg, convertToPack(buf))
3942
if err := proto.Unmarshal(buf, goMsg); err != nil {
@@ -47,6 +50,9 @@ func clusterToClang(goMsg *cluster_v2.Cluster) (*C.Cluster__Cluster, error) {
4750
if err != nil {
4851
return nil, err
4952
}
53+
if len(buf) == 0 {
54+
return nil, nil
55+
}
5056

5157
cMsg := C.cluster__cluster__unpack(nil, C.size_t(len(buf)), convertToPack(buf))
5258
if cMsg == nil {
@@ -86,6 +92,9 @@ func ClusterUpdate(key string, value *cluster_v2.Cluster) error {
8692
if err != nil {
8793
return fmt.Errorf("ClusterUpdate %s", err)
8894
}
95+
if cMsg == nil {
96+
return nil
97+
}
8998
defer clusterFreeClang(cMsg)
9099

91100
testString(key, cKey)

pkg/cache/v2/maps/common.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@ func convertToPack(buf []byte) *C.uint8_t {
3939

4040
func socketAddressToGolang(goMsg *core_v2.SocketAddress, cMsg *C.Core__SocketAddress) error {
4141
buf := make([]byte, C.core__socket_address__get_packed_size(cMsg))
42+
if len(buf) == 0 {
43+
return nil
44+
}
4245

4346
C.core__socket_address__pack(cMsg, convertToPack(buf))
4447
if err := proto.Unmarshal(buf, goMsg); err != nil {
@@ -52,7 +55,9 @@ func socketAddressToClang(goMsg *core_v2.SocketAddress) (*C.Core__SocketAddress,
5255
if err != nil {
5356
return nil, err
5457
}
55-
58+
if len(buf) == 0 {
59+
return nil, nil
60+
}
5661
cMsg := C.core__socket_address__unpack(nil, C.size_t(len(buf)), convertToPack(buf))
5762
if cMsg == nil {
5863
return nil, fmt.Errorf("core__socket_address__unpack failed")

pkg/cache/v2/maps/listener.go

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,6 @@
1212
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1313
* See the License for the specific language governing permissions and
1414
* limitations under the License.
15-
16-
* Author: LemmyHuang
17-
* Create: 2022-02-28
1815
*/
1916

2017
package maps
@@ -40,6 +37,9 @@ var (
4037

4138
func listenerToGolang(goMsg *listener_v2.Listener, cMsg *C.Listener__Listener) error {
4239
buf := make([]byte, C.listener__listener__get_packed_size(cMsg))
40+
if len(buf) == 0 {
41+
return nil
42+
}
4343

4444
C.listener__listener__pack(cMsg, convertToPack(buf))
4545
if err := proto.Unmarshal(buf, goMsg); err != nil {
@@ -53,6 +53,9 @@ func listenerToClang(goMsg *listener_v2.Listener) (*C.Listener__Listener, error)
5353
if err != nil {
5454
return nil, err
5555
}
56+
if len(buf) == 0 {
57+
return nil, nil
58+
}
5659

5760
cMsg := C.listener__listener__unpack(nil, C.size_t(len(buf)), convertToPack(buf))
5861
if cMsg == nil {
@@ -72,6 +75,9 @@ func ListenerLookup(key *core_v2.SocketAddress, value *listener_v2.Listener) err
7275
if err != nil {
7376
return fmt.Errorf("ListenerLookup %s", err)
7477
}
78+
if cKey == nil {
79+
return nil
80+
}
7581
defer socketAddressFreeClang(cKey)
7682

7783
desc := cKey.base.descriptor
@@ -96,12 +102,18 @@ func ListenerUpdate(key *core_v2.SocketAddress, value *listener_v2.Listener) err
96102
if err != nil {
97103
return fmt.Errorf("ListenerLookup %s", err)
98104
}
105+
if cKey == nil {
106+
return nil
107+
}
99108
defer socketAddressFreeClang(cKey)
100109

101110
cMsg, err := listenerToClang(value)
102111
if err != nil {
103112
return fmt.Errorf("ListenerUpdate %s", err)
104113
}
114+
if cMsg == nil {
115+
return nil
116+
}
105117
defer listenerFreeClang(cMsg)
106118

107119
testSocketAddress(key, cKey)
@@ -125,6 +137,9 @@ func ListenerDelete(key *core_v2.SocketAddress) error {
125137
if err != nil {
126138
return fmt.Errorf("ListenerLookup %s", err)
127139
}
140+
if cKey == nil {
141+
return nil
142+
}
128143
defer socketAddressFreeClang(cKey)
129144

130145
desc := cKey.base.descriptor

pkg/cache/v2/maps/route.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,6 @@
1212
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1313
* See the License for the specific language governing permissions and
1414
* limitations under the License.
15-
16-
* Author: LemmyHuang
17-
* Create: 2022-03-01
1815
*/
1916

2017
package maps
@@ -34,6 +31,9 @@ import (
3431

3532
func routeConfigToGolang(goMsg *route_v2.RouteConfiguration, cMsg *C.Route__RouteConfiguration) error {
3633
buf := make([]byte, C.route__route_configuration__get_packed_size(cMsg))
34+
if len(buf) == 0 {
35+
return nil
36+
}
3737

3838
C.route__route_configuration__pack(cMsg, convertToPack(buf))
3939
if err := proto.Unmarshal(buf, goMsg); err != nil {
@@ -47,6 +47,9 @@ func routeConfigToClang(goMsg *route_v2.RouteConfiguration) (*C.Route__RouteConf
4747
if err != nil {
4848
return nil, err
4949
}
50+
if len(buf) == 0 {
51+
return nil, nil
52+
}
5053

5154
cMsg := C.route__route_configuration__unpack(nil, C.size_t(len(buf)), convertToPack(buf))
5255
if cMsg == nil {
@@ -86,6 +89,9 @@ func RouteConfigUpdate(key string, value *route_v2.RouteConfiguration) error {
8689
if err != nil {
8790
return fmt.Errorf("RouteConfigUpdate %s", err)
8891
}
92+
if cMsg == nil {
93+
return nil
94+
}
8995
defer routeConfigFreeClang(cMsg)
9096

9197
testString(key, cKey)

0 commit comments

Comments
 (0)