From: Yu Date: Mon, 3 Aug 2020 05:08:13 +0000 (+0900) Subject: Handle virtual header allocation failure to deliver_request on test X-Git-Tag: accepted/tizen/6.0/unified/20201030.121942^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fheads%2Ftizen_6.0_hotfix;p=platform%2Fcore%2Fapi%2Fnsd.git Handle virtual header allocation failure to deliver_request on test Change-Id: I7e0d9041b4a2dd4667163e98ef716f265ee88a9a Signed-off-by: Yu jiung --- diff --git a/tests/mock/nsd-mock-dns-sd.c b/tests/mock/nsd-mock-dns-sd.c index 03907bf..6634b54 100644 --- a/tests/mock/nsd-mock-dns-sd.c +++ b/tests/mock/nsd-mock-dns-sd.c @@ -27,40 +27,40 @@ /* dnssd_sock_t, ipc_msg_hdr and request_op_t are from dnssd_ipc.h */ -# define dnssd_InvalidSocket -1 -# define dnssd_SocketValid(s) ((s) >= 0) +#define dnssd_InvalidSocket -1 +#define dnssd_SocketValid(s) ((s) >= 0) typedef int dnssd_sock_t; typedef struct { - uint32_t op; // request_op_t or reply_op_t + uint32_t op; // request_op_t or reply_op_t } ipc_msg_hdr; typedef enum { - request_op_none = 0, // No request yet received on this connection - connection_request = 1, // connected socket via DNSServiceConnect() - reg_record_request, // reg/remove record only valid for connected sockets - remove_record_request, - enumeration_request, - reg_service_request, - browse_request, - resolve_request, - query_request, - reconfirm_record_request, - add_record_request, - update_record_request, - setdomain_request, // Up to here is in Tiger and B4W 1.0.3 - getproperty_request, // New in B4W 1.0.4 - port_mapping_request, // New in Leopard and B4W 2.0 - addrinfo_request, - send_bpf, // New in SL - getpid_request, - release_request, - connection_delegate_request, - - cancel_request = 63 + request_op_none = 0, // No request yet received on this connection + connection_request = 1, // connected socket via DNSServiceConnect() + reg_record_request, // reg/remove record only valid for connected sockets + remove_record_request, + enumeration_request, + reg_service_request, + browse_request, + resolve_request, + query_request, + reconfirm_record_request, + add_record_request, + update_record_request, + setdomain_request, // Up to here is in Tiger and B4W 1.0.3 + getproperty_request, // New in B4W 1.0.4 + port_mapping_request, // New in Leopard and B4W 2.0 + addrinfo_request, + send_bpf, // New in SL + getpid_request, + release_request, + connection_delegate_request, + + cancel_request = 63 } request_op_t; typedef struct _DNSServiceRef_t DNSServiceOp; @@ -68,10 +68,10 @@ typedef struct _DNSRecordRef_t DNSRecord; typedef struct { - ipc_msg_hdr ipc_hdr; - DNSServiceFlags cb_flags; - uint32_t cb_interface; - DNSServiceErrorType cb_err; + ipc_msg_hdr ipc_hdr; + DNSServiceFlags cb_flags; + uint32_t cb_interface; + DNSServiceErrorType cb_err; } CallbackHeader; // client stub callback to process message from server and deliver results to client application @@ -83,60 +83,60 @@ typedef void (*ProcessReplyFn)(DNSServiceOp *const sdr, const CallbackHeader *co /* The virtual #_DNSServiceRef_t structure for unittest */ struct _DNSServiceRef_t { - dnssd_sock_t sockfd; // Connected socket between client and daemon - dnssd_sock_t validator; // Used to detect memory corruption, double disposals, etc. - uint32_t op; // request_op_t or reply_op_t - ProcessReplyFn ProcessReply; // Function pointer to the code to handle received messages - void *AppCallback; // Client callback function and context - void *AppContext; - DNSRecord *rec; + dnssd_sock_t sockfd; // Connected socket between client and daemon + dnssd_sock_t validator; // Used to detect memory corruption, double disposals, etc. + uint32_t op; // request_op_t or reply_op_t + ProcessReplyFn ProcessReply; // Function pointer to the code to handle received messages + void *AppCallback; // Client callback function and context + void *AppContext; + DNSRecord *rec; }; /* The virtual #_DNSRecordRef_t structure for unittest */ struct _DNSRecordRef_t { - DNSRecord *recnext; + DNSRecord *recnext; DNSServiceOp *sdr; }; static ipc_msg_hdr *create_hdr(uint32_t op, size_t *len, char **data_start, int SeparateReturnSocket, DNSServiceOp *ref) { - char *msg = NULL; - ipc_msg_hdr *hdr; + char *msg = NULL; + ipc_msg_hdr *hdr; - *len += sizeof(ipc_msg_hdr); + *len += sizeof(ipc_msg_hdr); - // Write message to buffer - msg = malloc(*len); + // Write message to buffer + msg = malloc(*len); - memset(msg, 0, *len); - hdr = (ipc_msg_hdr *)msg; - hdr->op = op; - *data_start = msg + sizeof(ipc_msg_hdr); + memset(msg, 0, *len); + hdr = (ipc_msg_hdr *)msg; + hdr->op = op; + *data_start = msg + sizeof(ipc_msg_hdr); - return hdr; + return hdr; } static void FreeDNSRecords(DNSServiceOp *sdRef) { - DNSRecord *rec = sdRef->rec; - while (rec) - { - DNSRecord *next = rec->recnext; - free(rec); - rec = next; - } + DNSRecord *rec = sdRef->rec; + while (rec) + { + DNSRecord *next = rec->recnext; + free(rec); + rec = next; + } } static void FreeDNSServiceOp(DNSServiceOp *x) { - // We don't use our DNSServiceRefValid macro here because if we're cleaning up after a socket() call failed - // then sockfd could legitimately contain a failing value (e.g. dnssd_InvalidSocket) - x->sockfd = dnssd_InvalidSocket; - x->validator = 0xDDDDDDDD; - x->op = request_op_none; - x->AppCallback = NULL; - FreeDNSRecords(x); + // We don't use our DNSServiceRefValid macro here because if we're cleaning up after a socket() call failed + // then sockfd could legitimately contain a failing value (e.g. dnssd_InvalidSocket) + x->sockfd = dnssd_InvalidSocket; + x->validator = 0xDDDDDDDD; + x->op = request_op_none; + x->AppCallback = NULL; + FreeDNSRecords(x); free(x); } @@ -145,25 +145,25 @@ static void FreeDNSServiceOp(DNSServiceOp *x) // Return a connected service ref (deallocate with DNSServiceRefDeallocate) static DNSServiceErrorType ConnectToServer(DNSServiceRef *ref, DNSServiceFlags flags, uint32_t op, ProcessReplyFn ProcessReply, void *AppCallback, void *AppContext) { - DNSServiceOp *sdr; + DNSServiceOp *sdr; - if (!ref) - return kDNSServiceErr_BadParam; + if (!ref) + return kDNSServiceErr_BadParam; - sdr = malloc(sizeof(DNSServiceOp)); - sdr->sockfd = dnssd_InvalidSocket; - sdr->validator = sdr->sockfd ^ ValidatorBits; - sdr->op = op; - sdr->AppCallback = AppCallback; - sdr->AppContext = AppContext; - sdr->rec = NULL; + sdr = malloc(sizeof(DNSServiceOp)); + sdr->sockfd = dnssd_InvalidSocket; + sdr->validator = sdr->sockfd ^ ValidatorBits; + sdr->op = op; + sdr->AppCallback = AppCallback; + sdr->AppContext = AppContext; + sdr->rec = NULL; *ref = NULL; sdr->sockfd = MOCK_DNSSD_SOCK_FD; sdr->validator = sdr->sockfd ^ ValidatorBits; - *ref = sdr; - return kDNSServiceErr_NoError; + *ref = sdr; + return kDNSServiceErr_NoError; } #define TIZEN_DNSSD_MOCK_SERVICE "TizenDnssdMock" @@ -177,22 +177,23 @@ static DNSServiceErrorType ConnectToServer(DNSServiceRef *ref, DNSServiceFlags f static DNSServiceErrorType deliver_request(ipc_msg_hdr *hdr, DNSServiceOp *sdr) { if (!DNSServiceRefValid(sdr)) - return kDNSServiceErr_BadReference; + return kDNSServiceErr_BadReference; - free(hdr); + if (hdr) + free(hdr); return kDNSServiceErr_NoError; } API dnssd_sock_t DNSServiceRefSockFD(DNSServiceRef sdRef) { - if (!sdRef) - return dnssd_InvalidSocket; + if (!sdRef) + return dnssd_InvalidSocket; - if (!DNSServiceRefValid(sdRef)) - return dnssd_InvalidSocket; + if (!DNSServiceRefValid(sdRef)) + return dnssd_InvalidSocket; - return sdRef->sockfd; + return sdRef->sockfd; } @@ -273,11 +274,11 @@ API DNSServiceErrorType DNSServiceProcessResult(DNSServiceRef sdRef) return kDNSServiceErr_BadReference; /* original flow: - * Read reply header - * check header validity - * read body - * call sdRef->ProcessReply(sdRef, &cbh, ptr, data + cbh.ipc_hdr.datalen); - */ + * Read reply header + * check header validity + * read body + * call sdRef->ProcessReply(sdRef, &cbh, ptr, data + cbh.ipc_hdr.datalen); + */ if (sdRef->op == reg_service_request) __nsd_mock_dnssd_process_result_reg_service_request(sdRef); else if (sdRef->op == browse_request) @@ -287,17 +288,17 @@ API DNSServiceErrorType DNSServiceProcessResult(DNSServiceRef sdRef) else if (sdRef->op == addrinfo_request) __nsd_mock_dnssd_process_result_addrinfo_request(sdRef); - return kDNSServiceErr_NoError; + return kDNSServiceErr_NoError; } API void DNSServiceRefDeallocate(DNSServiceRef sdRef) { if (!sdRef) - return; + return; if (!DNSServiceRefValid(sdRef)) - return; + return; FreeDNSServiceOp(sdRef); } @@ -404,11 +405,11 @@ API DNSServiceErrorType DNSServiceAddRecord uint32_t ttl ) { - ipc_msg_hdr *hdr; - size_t len = 0; - char *ptr; - DNSRecordRef rref; - DNSRecord **p; + ipc_msg_hdr *hdr; + size_t len = 0; + char *ptr; + DNSRecordRef rref; + DNSRecord **p; if (!sdRef || !RecordRef || (!rdata && rdlen)) return kDNSServiceErr_BadParam; @@ -419,19 +420,19 @@ API DNSServiceErrorType DNSServiceAddRecord if (!DNSServiceRefValid(sdRef)) return kDNSServiceErr_BadReference; - *RecordRef = NULL; + *RecordRef = NULL; - hdr = create_hdr(add_record_request, &len, &ptr, 0, sdRef); + hdr = create_hdr(add_record_request, &len, &ptr, 0, sdRef); - rref = malloc(sizeof(DNSRecord)); - rref->sdr = sdRef; - rref->recnext = NULL; + rref = malloc(sizeof(DNSRecord)); + rref->sdr = sdRef; + rref->recnext = NULL; - *RecordRef = rref; + *RecordRef = rref; - p = &(sdRef)->rec; - while (*p) p = &(*p)->recnext; - *p = rref; + p = &(sdRef)->rec; + while (*p) p = &(*p)->recnext; + *p = rref; return deliver_request(hdr, sdRef);; } @@ -446,13 +447,13 @@ API DNSServiceErrorType DNSServiceUpdateRecord uint32_t ttl ) { - (void)sdRef; // Unused - (void)RecordRef; // Unused - (void)flags; // Unused - (void)rdlen; // Unused - (void)rdata; // Unused - (void)ttl; // Unused - return kDNSServiceErr_NoError; + (void)sdRef; // Unused + (void)RecordRef; // Unused + (void)flags; // Unused + (void)rdlen; // Unused + (void)rdata; // Unused + (void)ttl; // Unused + return kDNSServiceErr_NoError; } API DNSServiceErrorType DNSServiceRemoveRecord diff --git a/tests/mock/nsd-mock-gio.c b/tests/mock/nsd-mock-gsource.c similarity index 95% rename from tests/mock/nsd-mock-gio.c rename to tests/mock/nsd-mock-gsource.c index 4ae7606..2acf4f5 100644 --- a/tests/mock/nsd-mock-gio.c +++ b/tests/mock/nsd-mock-gsource.c @@ -98,15 +98,9 @@ API gboolean g_source_remove (guint tag) { GSource *source; - if (tag != 0) + if (tag == 0 || tag > 1000) return FALSE; - printf("g_source_remove %u\n", tag); - if (tag > 1000) { - printf("FUCK\n"); - return FALSE; - } - source = g_main_context_find_source_by_id (NULL, tag); if (source) g_source_destroy (source); diff --git a/tests/mock/nsd-mock-gssdp.c b/tests/mock/nsd-mock-gssdp.c index 52fbd97..5014358 100644 --- a/tests/mock/nsd-mock-gssdp.c +++ b/tests/mock/nsd-mock-gssdp.c @@ -50,11 +50,11 @@ typedef struct _GSSDPClient GSSDPClient; typedef struct _GSSDPClientClass GSSDPClientClass; struct _GSSDPClient { - GObject parent; + GObject parent; }; struct _GSSDPClientClass { - GObjectClass parent_class; + GObjectClass parent_class; }; GType @@ -85,11 +85,11 @@ typedef struct _GSSDPResourceGroup GSSDPResourceGroup; typedef struct _GSSDPResourceGroupClass GSSDPResourceGroupClass; struct _GSSDPResourceGroup { - GObject parent; + GObject parent; }; struct _GSSDPResourceGroupClass { - GObjectClass parent_class; + GObjectClass parent_class; }; GType @@ -120,11 +120,11 @@ typedef struct _GSSDPResourceBrowser GSSDPResourceBrowser; typedef struct _GSSDPResourceBrowserClass GSSDPResourceBrowserClass; struct _GSSDPResourceBrowser { - GObject parent; + GObject parent; }; struct _GSSDPResourceBrowserClass { - GObjectClass parent_class; + GObjectClass parent_class; }; API GSSDPClient *gssdp_client_new(GMainContext *main_context, diff --git a/tests/mock/nsd-mock.c b/tests/mock/nsd-mock.c index 31b7da8..38407d0 100644 --- a/tests/mock/nsd-mock.c +++ b/tests/mock/nsd-mock.c @@ -76,8 +76,7 @@ API gulong g_signal_connect_data(gpointer instance, return DEFAULT_MOCK_GOBJECT_SIGNAL; } -API void g_signal_handler_disconnect (gpointer instance, - gulong handler_id) +API void g_signal_handler_disconnect (gpointer instance, gulong handler_id) { return; }