Skip to content

Commit 3437561

Browse files
committed
fix: take care of nil handlers, fixes #1
1 parent ab0a1fc commit 3437561

4 files changed

Lines changed: 36 additions & 15 deletions

File tree

.idea/watcherTasks.xml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

README.md

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,7 @@ func main() {
4242
return lolhtml.Continue
4343
},
4444
nil,
45-
func(*lolhtml.TextChunk) lolhtml.RewriterDirective {
46-
return lolhtml.Continue
47-
},
45+
nil,
4846
)
4947
r, _ := rb.Build(
5048
lolhtml.Config{

lolhtml.go

Lines changed: 31 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -130,19 +130,32 @@ func (rb *RewriterBuilder) AddDocumentContentHandlers(
130130
textChunkHandler TextChunkHandler,
131131
docEndHandler DocEndHandler,
132132
) {
133+
var cCallbackDoctypePointer, cCallbackCommentPointer, cCallbackTextChunkPointer, cCallbackDocEndPointer *[0]byte
134+
if doctypeHandler != nil {
135+
cCallbackDoctypePointer = (*[0]byte)(C.callback_doctype)
136+
}
137+
if commentHandler != nil {
138+
cCallbackCommentPointer = (*[0]byte)(C.callback_comment)
139+
}
140+
if textChunkHandler != nil {
141+
cCallbackTextChunkPointer = (*[0]byte)(C.callback_text_chunk)
142+
}
143+
if docEndHandler != nil {
144+
cCallbackDocEndPointer = (*[0]byte)(C.callback_doc_end)
145+
}
133146
doctypeHandlerPointer := pointer.Save(doctypeHandler)
134147
commentHandlerPointer := pointer.Save(commentHandler)
135148
textChunkHandlerPointer := pointer.Save(textChunkHandler)
136149
docEndHandlerPointer := pointer.Save(docEndHandler)
137150
C.lol_html_rewriter_builder_add_document_content_handlers(
138151
(*C.lol_html_rewriter_builder_t)(rb),
139-
(*[0]byte)(C.callback_doctype),
152+
cCallbackDoctypePointer,
140153
doctypeHandlerPointer,
141-
(*[0]byte)(C.callback_comment),
154+
cCallbackCommentPointer,
142155
commentHandlerPointer,
143-
(*[0]byte)(C.callback_text_chunk),
156+
cCallbackTextChunkPointer,
144157
textChunkHandlerPointer,
145-
(*[0]byte)(C.callback_doc_end),
158+
cCallbackDocEndPointer,
146159
docEndHandlerPointer,
147160
)
148161
}
@@ -153,17 +166,27 @@ func (rb *RewriterBuilder) AddElementContentHandlers(
153166
commentHandler CommentHandler,
154167
textChunkHandler TextChunkHandler,
155168
) {
156-
commentHandlerPointer := pointer.Save(commentHandler)
169+
var cCallbackElementPointer, cCallbackCommentPointer, cCallbackTextChunkPointer *[0]byte
170+
if elementHandler != nil {
171+
cCallbackElementPointer = (*[0]byte)(C.callback_element)
172+
}
173+
if commentHandler != nil {
174+
cCallbackCommentPointer = (*[0]byte)(C.callback_comment)
175+
}
176+
if textChunkHandler != nil {
177+
cCallbackTextChunkPointer = (*[0]byte)(C.callback_text_chunk)
178+
}
157179
elementHandlerPointer := pointer.Save(elementHandler)
180+
commentHandlerPointer := pointer.Save(commentHandler)
158181
textChunkHandlerPointer := pointer.Save(textChunkHandler)
159182
C.lol_html_rewriter_builder_add_element_content_handlers(
160183
(*C.lol_html_rewriter_builder_t)(rb),
161184
(*C.lol_html_selector_t)(selector),
162-
(*[0]byte)(C.callback_element),
185+
cCallbackElementPointer,
163186
elementHandlerPointer,
164-
(*[0]byte)(C.callback_comment),
187+
cCallbackCommentPointer,
165188
commentHandlerPointer,
166-
(*[0]byte)(C.callback_text_chunk),
189+
cCallbackTextChunkPointer,
167190
textChunkHandlerPointer,
168191
)
169192
}

lolhtml_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ func TestDoctypeApi(t *testing.T) {
126126
},
127127
nil,
128128
nil,
129-
func(*lolhtml.DocEnd) lolhtml.RewriterDirective { return lolhtml.Continue },
129+
nil,
130130
)
131131
r, err := rb.Build(lolhtml.NewDefaultConfig())
132132
if err != nil {
@@ -160,7 +160,7 @@ func TestCommentApi(t *testing.T) {
160160
return lolhtml.Continue
161161
},
162162
nil,
163-
func(*lolhtml.DocEnd) lolhtml.RewriterDirective { return lolhtml.Continue },
163+
nil,
164164
)
165165
var finalText string
166166
r, err := rb.Build(lolhtml.Config{
@@ -221,7 +221,7 @@ func TestTextChunkApi(t *testing.T) {
221221
}
222222
return lolhtml.Continue
223223
},
224-
func(*lolhtml.DocEnd) lolhtml.RewriterDirective { return lolhtml.Continue },
224+
nil,
225225
)
226226
var finalText string
227227
r, err := rb.Build(lolhtml.Config{

0 commit comments

Comments
 (0)