diff options
Diffstat (limited to 'mDNSShared/uds_daemon.c')
-rw-r--r-- | mDNSShared/uds_daemon.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/mDNSShared/uds_daemon.c b/mDNSShared/uds_daemon.c index ad5f943..e269be6 100644 --- a/mDNSShared/uds_daemon.c +++ b/mDNSShared/uds_daemon.c @@ -21,6 +21,7 @@ #else #include <fcntl.h> #include <errno.h> +#include <cutils/log.h> #include <sys/ioctl.h> #include <sys/types.h> #include <sys/time.h> @@ -1594,6 +1595,7 @@ mDNSlocal mStatus handle_regservice_request(request_state *request) char type_as_string[MAX_ESCAPED_DOMAIN_NAME]; domainname d, srv; mStatus err; + const char *msgTXTData; DNSServiceFlags flags = get_flags(&request->msgptr, request->msgend); mDNSu32 interfaceIndex = get_uint32(&request->msgptr, request->msgend); @@ -1612,7 +1614,7 @@ mDNSlocal mStatus handle_regservice_request(request_state *request) request->u.servicereg.instances = NULL; request->u.servicereg.txtlen = 0; request->u.servicereg.txtdata = NULL; - mDNSPlatformStrCopy(request->u.servicereg.type_as_string, type_as_string); + mDNSPlatformStrLCopy(request->u.servicereg.type_as_string, type_as_string, sizeof(request->u.servicereg.type_as_string)); if (request->msgptr + 2 > request->msgend) request->msgptr = NULL; else @@ -1622,15 +1624,21 @@ mDNSlocal mStatus handle_regservice_request(request_state *request) } request->u.servicereg.txtlen = get_uint16(&request->msgptr, request->msgend); + msgTXTData = get_rdata(&request->msgptr, request->msgend, request->u.servicereg.txtlen); + if (!request->msgptr) + { + LogMsg("%3d: DNSServiceRegister(unreadable parameters)", request->sd); + android_errorWriteWithInfoLog(0x534e4554, "25852056", -1, NULL, 0); + return(mStatus_BadParamErr); + } + if (request->u.servicereg.txtlen) { request->u.servicereg.txtdata = mallocL("service_info txtdata", request->u.servicereg.txtlen); if (!request->u.servicereg.txtdata) FatalError("ERROR: handle_regservice_request - malloc"); - mDNSPlatformMemCopy(request->u.servicereg.txtdata, get_rdata(&request->msgptr, request->msgend, request->u.servicereg.txtlen), request->u.servicereg.txtlen); + mDNSPlatformMemCopy(request->u.servicereg.txtdata, msgTXTData, request->u.servicereg.txtlen); } - if (!request->msgptr) { LogMsg("%3d: DNSServiceRegister(unreadable parameters)", request->sd); return(mStatus_BadParamErr); } - // Check for sub-types after the service type request->u.servicereg.num_subtypes = ChopSubTypes(request->u.servicereg.type_as_string); // Note: Modifies regtype string to remove trailing subtypes if (request->u.servicereg.num_subtypes < 0) @@ -2169,7 +2177,7 @@ mDNSlocal mStatus handle_browse_request(request_state *request) if (!MakeDomainNameFromDNSNameString(&temp, regtype)) return(mStatus_BadParamErr); // For over-long service types, we only allow domain "local" - if (temp.c[0] > 15 && domain[0] == 0) mDNSPlatformStrCopy(domain, "local."); + if (temp.c[0] > 15 && domain[0] == 0) mDNSPlatformStrLCopy(domain, "local.", sizeof(domain)); // Set up browser info request->u.browser.ForceMCast = (flags & kDNSServiceFlagsForceMulticast) != 0; |