From 3ce3334e9f64eb9eb9f6f52608ca00c2fb74b516 Mon Sep 17 00:00:00 2001 From: Tomas Popela Date: Mon, 23 Jul 2018 10:30:35 +0200 Subject: [PATCH 04/17] Correctly check whether virtual method is implemented before calling it yelp-3.28.1/libyelp/yelp-document.c:819:27: warning: Access to field 'request_page' results in a dereference of a null pointer (loaded from field 'g_class') g_return_val_if_fail (YELP_DOCUMENT_GET_CLASS (document)->request_page != NULL, FALSE); yelp-3.28.1/libyelp/yelp-document.c:943:27: warning: Access to field 'read_contents' results in a dereference of a null pointer (loaded from field 'g_class') g_return_val_if_fail (YELP_DOCUMENT_GET_CLASS (document)->read_contents != NULL, NULL); yelp-3.28.1/libyelp/yelp-document.c:1100:23: warning: Access to field 'finish_read' results in a dereference of a null pointer (loaded from field 'g_class') g_return_if_fail (YELP_DOCUMENT_GET_CLASS (document)->finish_read != NULL); yelp-3.28.1/libyelp/yelp-document.c:1141:27: warning: Access to field 'get_mime_type' results in a dereference of a null pointer (loaded from field 'g_class') g_return_val_if_fail (YELP_DOCUMENT_GET_CLASS (document)->get_mime_type != NULL, NULL); yelp-3.28.1/libyelp/yelp-document.c:1173:23: warning: Access to field 'index' results in a dereference of a null pointer (loaded from field 'g_class') g_return_if_fail (YELP_DOCUMENT_GET_CLASS (document)->index != NULL); --- libyelp/yelp-document.c | 56 ++++++++++++++++++++++++++++++----------- 1 file changed, 41 insertions(+), 15 deletions(-) diff --git a/libyelp/yelp-document.c b/libyelp/yelp-document.c index c1eec9cc..d832d1ed 100644 --- a/libyelp/yelp-document.c +++ b/libyelp/yelp-document.c @@ -815,17 +815,19 @@ yelp_document_request_page (YelpDocument *document, gpointer user_data, GDestroyNotify notify) { + YelpDocumentClass *klass; + + g_return_val_if_fail (document != NULL, FALSE); g_return_val_if_fail (YELP_IS_DOCUMENT (document), FALSE); - g_return_val_if_fail (YELP_DOCUMENT_GET_CLASS (document)->request_page != NULL, FALSE); + + klass = YELP_DOCUMENT_GET_CLASS (document); + g_return_val_if_fail (klass != NULL, FALSE); + g_return_val_if_fail (klass->request_page != NULL, FALSE); debug_print (DB_FUNCTION, "entering\n"); - return YELP_DOCUMENT_GET_CLASS (document)->request_page (document, - page_id, - cancellable, - callback, - user_data, - notify); + return klass->request_page (document, page_id, cancellable, callback, + user_data, notify); } static gboolean @@ -939,10 +941,16 @@ const gchar * yelp_document_read_contents (YelpDocument *document, const gchar *page_id) { + YelpDocumentClass *klass; + + g_return_val_if_fail (document != NULL, NULL); g_return_val_if_fail (YELP_IS_DOCUMENT (document), NULL); - g_return_val_if_fail (YELP_DOCUMENT_GET_CLASS (document)->read_contents != NULL, NULL); - return YELP_DOCUMENT_GET_CLASS (document)->read_contents (document, page_id); + klass = YELP_DOCUMENT_GET_CLASS (document); + g_return_val_if_fail (klass != NULL, FALSE); + g_return_val_if_fail (klass->read_contents != NULL, FALSE); + + return klass->read_contents (document, page_id); } static const gchar * @@ -1096,10 +1104,16 @@ void yelp_document_finish_read (YelpDocument *document, const gchar *contents) { + YelpDocumentClass *klass; + + g_return_if_fail (document != NULL); g_return_if_fail (YELP_IS_DOCUMENT (document)); - g_return_if_fail (YELP_DOCUMENT_GET_CLASS (document)->finish_read != NULL); - YELP_DOCUMENT_GET_CLASS (document)->finish_read (document, contents); + klass = YELP_DOCUMENT_GET_CLASS (document); + g_return_if_fail (klass != NULL); + g_return_if_fail (klass->finish_read != NULL); + + klass->finish_read (document, contents); } static void @@ -1137,10 +1151,16 @@ gchar * yelp_document_get_mime_type (YelpDocument *document, const gchar *page_id) { + YelpDocumentClass *klass; + + g_return_val_if_fail (document != NULL, NULL); g_return_val_if_fail (YELP_IS_DOCUMENT (document), NULL); - g_return_val_if_fail (YELP_DOCUMENT_GET_CLASS (document)->get_mime_type != NULL, NULL); - return YELP_DOCUMENT_GET_CLASS (document)->get_mime_type (document, page_id); + klass = YELP_DOCUMENT_GET_CLASS (document); + g_return_val_if_fail (klass != NULL, NULL); + g_return_val_if_fail (klass->get_mime_type != NULL, FALSE); + + return klass->get_mime_type (document, page_id); } static gchar * @@ -1169,10 +1189,16 @@ document_get_mime_type (YelpDocument *document, void yelp_document_index (YelpDocument *document) { + YelpDocumentClass *klass; + + g_return_if_fail (document != NULL); g_return_if_fail (YELP_IS_DOCUMENT (document)); - g_return_if_fail (YELP_DOCUMENT_GET_CLASS (document)->index != NULL); - YELP_DOCUMENT_GET_CLASS (document)->index (document); + klass = YELP_DOCUMENT_GET_CLASS (document); + g_return_if_fail (klass != NULL); + g_return_if_fail (klass->index != NULL); + + klass->index (document); } static void -- 2.19.1