Skip to content

Commit 4d46c69

Browse files
authored
Merge pull request #445 from lbcjbb/fix-crash
fix: don't use defer in a loop
2 parents 778a111 + ac7f9cf commit 4d46c69

File tree

2 files changed

+16
-17
lines changed

2 files changed

+16
-17
lines changed

internal/native/message_server.go

+7-9
Original file line numberDiff line numberDiff line change
@@ -121,20 +121,18 @@ func (m *Message) GivenWithParameter(state string, params map[string]interface{}
121121
defer free(cState)
122122

123123
if len(params) == 0 {
124-
cState := C.CString(state)
125-
defer free(cState)
126-
127124
C.pactffi_given(m.handle, cState)
128125
} else {
129126
for k, v := range params {
130127
cKey := C.CString(k)
131-
defer free(cKey)
128+
132129
param := stringFromInterface(v)
133130
cValue := C.CString(param)
134-
defer free(cValue)
135131

136132
C.pactffi_given_with_param(m.handle, cState, cKey, cValue)
137133

134+
free(cValue)
135+
free(cKey)
138136
}
139137
}
140138

@@ -152,18 +150,18 @@ func (m *Message) ExpectsToReceive(description string) *Message {
152150

153151
func (m *Message) WithMetadata(valueOrMatcher map[string]string) *Message {
154152
for k, v := range valueOrMatcher {
155-
156153
cName := C.CString(k)
157-
defer free(cName)
158154

159155
// TODO: check if matching rules allowed here
160156
// value := stringFromInterface(v)
161157
// fmt.Printf("withheaders, sending: %+v \n\n", value)
162158
// cValue := C.CString(value)
163159
cValue := C.CString(v)
164-
defer free(cValue)
165160

166161
C.pactffi_message_with_metadata(m.handle, cName, cValue)
162+
163+
free(cValue)
164+
free(cName)
167165
}
168166

169167
return m
@@ -237,7 +235,7 @@ func (m *MessageServer) UsingPlugin(pluginName string, pluginVersion string) err
237235
defer free(cPluginName)
238236
cPluginVersion := C.CString(pluginVersion)
239237
defer free(cPluginVersion)
240-
238+
241239
r := C.pactffi_using_plugin(m.messagePact.handle, cPluginName, cPluginVersion)
242240
InstallSignalHandlers()
243241

internal/native/mock_server.go

+9-8
Original file line numberDiff line numberDiff line change
@@ -500,13 +500,13 @@ func (i *Interaction) GivenWithParameter(state string, params map[string]interfa
500500

501501
for k, v := range params {
502502
cKey := C.CString(k)
503-
defer free(cKey)
504503
param := stringFromInterface(v)
505504
cValue := C.CString(param)
506-
defer free(cValue)
507505

508506
C.pactffi_given_with_param(i.handle, cState, cKey, cValue)
509507

508+
free(cValue)
509+
free(cKey)
510510
}
511511

512512
return i
@@ -535,36 +535,37 @@ func (i *Interaction) WithResponseHeaders(valueOrMatcher map[string][]interface{
535535

536536
func (i *Interaction) withHeaders(part interactionPart, valueOrMatcher map[string][]interface{}) *Interaction {
537537
for k, v := range valueOrMatcher {
538-
539538
cName := C.CString(k)
540-
defer free(cName)
541539

542540
for _, header := range v {
543541
value := stringFromInterface(header)
544542
cValue := C.CString(value)
545-
defer free(cValue)
546543

547544
C.pactffi_with_header_v2(i.handle, C.int(part), cName, C.ulong(0), cValue)
545+
546+
free(cValue)
548547
}
549548

549+
free(cName)
550550
}
551551

552552
return i
553553
}
554554

555555
func (i *Interaction) WithQuery(valueOrMatcher map[string][]interface{}) *Interaction {
556556
for k, values := range valueOrMatcher {
557-
558557
cName := C.CString(k)
559-
defer free(cName)
560558

561559
for idx, v := range values {
562560
value := stringFromInterface(v)
563561
cValue := C.CString(value)
564-
defer free(cValue)
565562

566563
C.pactffi_with_query_parameter_v2(i.handle, cName, C.ulong(idx), cValue)
564+
565+
free(cValue)
567566
}
567+
568+
free(cName)
568569
}
569570

570571
return i

0 commit comments

Comments
 (0)