aboutsummaryrefslogtreecommitdiff
path: root/mDNSShared/uds_daemon.c
diff options
context:
space:
mode:
Diffstat (limited to 'mDNSShared/uds_daemon.c')
-rw-r--r--mDNSShared/uds_daemon.c18
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;