Skip to content

Commit 087ef8e

Browse files
Fix: IPSet mutations (#357)
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: Loyalsoldier <10487845+Loyalsoldier@users.noreply.github.com>
1 parent e25248c commit 087ef8e

2 files changed

Lines changed: 56 additions & 24 deletions

File tree

lib/container.go

Lines changed: 52 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -89,32 +89,46 @@ func (c *container) Add(entry *Entry, opts ...IgnoreIPOption) error {
8989
}
9090
switch ignoreIPType {
9191
case IPv4:
92-
if !val.hasIPv6Builder() {
93-
val.ipv6Builder = new(netipx.IPSetBuilder)
92+
if ipv6set != nil {
93+
if !val.hasIPv6Builder() {
94+
val.ipv6Builder = new(netipx.IPSetBuilder)
95+
}
96+
val.ipv6Builder.AddSet(ipv6set)
97+
val.ipv6Set = nil
9498
}
95-
val.ipv6Builder.AddSet(ipv6set)
9699
case IPv6:
97-
if !val.hasIPv4Builder() {
98-
val.ipv4Builder = new(netipx.IPSetBuilder)
100+
if ipv4set != nil {
101+
if !val.hasIPv4Builder() {
102+
val.ipv4Builder = new(netipx.IPSetBuilder)
103+
}
104+
val.ipv4Builder.AddSet(ipv4set)
105+
val.ipv4Set = nil
99106
}
100-
val.ipv4Builder.AddSet(ipv4set)
101107
default:
102-
if !val.hasIPv4Builder() {
103-
val.ipv4Builder = new(netipx.IPSetBuilder)
108+
if ipv4set != nil {
109+
if !val.hasIPv4Builder() {
110+
val.ipv4Builder = new(netipx.IPSetBuilder)
111+
}
112+
val.ipv4Builder.AddSet(ipv4set)
113+
val.ipv4Set = nil
104114
}
105-
if !val.hasIPv6Builder() {
106-
val.ipv6Builder = new(netipx.IPSetBuilder)
115+
if ipv6set != nil {
116+
if !val.hasIPv6Builder() {
117+
val.ipv6Builder = new(netipx.IPSetBuilder)
118+
}
119+
val.ipv6Builder.AddSet(ipv6set)
120+
val.ipv6Set = nil
107121
}
108-
val.ipv4Builder.AddSet(ipv4set)
109-
val.ipv6Builder.AddSet(ipv6set)
110122
}
111123

112124
case false:
113125
switch ignoreIPType {
114126
case IPv4:
115127
entry.ipv4Builder = nil
128+
entry.ipv4Set = nil
116129
case IPv6:
117130
entry.ipv6Builder = nil
131+
entry.ipv6Set = nil
118132
}
119133
c.entries[name] = entry
120134
}
@@ -155,32 +169,46 @@ func (c *container) Remove(entry *Entry, rCase CaseRemove, opts ...IgnoreIPOptio
155169

156170
switch ignoreIPType {
157171
case IPv4:
158-
if !val.hasIPv6Builder() {
159-
val.ipv6Builder = new(netipx.IPSetBuilder)
172+
if ipv6set != nil {
173+
if !val.hasIPv6Builder() {
174+
val.ipv6Builder = new(netipx.IPSetBuilder)
175+
}
176+
val.ipv6Builder.RemoveSet(ipv6set)
177+
val.ipv6Set = nil
160178
}
161-
val.ipv6Builder.RemoveSet(ipv6set)
162179
case IPv6:
163-
if !val.hasIPv4Builder() {
164-
val.ipv4Builder = new(netipx.IPSetBuilder)
180+
if ipv4set != nil {
181+
if !val.hasIPv4Builder() {
182+
val.ipv4Builder = new(netipx.IPSetBuilder)
183+
}
184+
val.ipv4Builder.RemoveSet(ipv4set)
185+
val.ipv4Set = nil
165186
}
166-
val.ipv4Builder.RemoveSet(ipv4set)
167187
default:
168-
if !val.hasIPv4Builder() {
169-
val.ipv4Builder = new(netipx.IPSetBuilder)
188+
if ipv4set != nil {
189+
if !val.hasIPv4Builder() {
190+
val.ipv4Builder = new(netipx.IPSetBuilder)
191+
}
192+
val.ipv4Builder.RemoveSet(ipv4set)
193+
val.ipv4Set = nil
170194
}
171-
if !val.hasIPv6Builder() {
172-
val.ipv6Builder = new(netipx.IPSetBuilder)
195+
if ipv6set != nil {
196+
if !val.hasIPv6Builder() {
197+
val.ipv6Builder = new(netipx.IPSetBuilder)
198+
}
199+
val.ipv6Builder.RemoveSet(ipv6set)
200+
val.ipv6Set = nil
173201
}
174-
val.ipv4Builder.RemoveSet(ipv4set)
175-
val.ipv6Builder.RemoveSet(ipv6set)
176202
}
177203

178204
case CaseRemoveEntry:
179205
switch ignoreIPType {
180206
case IPv4:
181207
val.ipv6Builder = nil
208+
val.ipv6Set = nil
182209
case IPv6:
183210
val.ipv4Builder = nil
211+
val.ipv4Set = nil
184212
default:
185213
delete(c.entries, name)
186214
}

lib/entry.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,11 +253,13 @@ func (e *Entry) add(prefix *netip.Prefix, ipType IPType) error {
253253
e.ipv4Builder = new(netipx.IPSetBuilder)
254254
}
255255
e.ipv4Builder.AddPrefix(*prefix)
256+
e.ipv4Set = nil
256257
case IPv6:
257258
if !e.hasIPv6Builder() {
258259
e.ipv6Builder = new(netipx.IPSetBuilder)
259260
}
260261
e.ipv6Builder.AddPrefix(*prefix)
262+
e.ipv6Set = nil
261263
default:
262264
return ErrInvalidIPType
263265
}
@@ -270,10 +272,12 @@ func (e *Entry) remove(prefix *netip.Prefix, ipType IPType) error {
270272
case IPv4:
271273
if e.hasIPv4Builder() {
272274
e.ipv4Builder.RemovePrefix(*prefix)
275+
e.ipv4Set = nil
273276
}
274277
case IPv6:
275278
if e.hasIPv6Builder() {
276279
e.ipv6Builder.RemovePrefix(*prefix)
280+
e.ipv6Set = nil
277281
}
278282
default:
279283
return ErrInvalidIPType

0 commit comments

Comments
 (0)