diff options
| author | Marcel Holtmann <marcel@holtmann.org> | 2008-06-24 00:24:08 +0000 | 
|---|---|---|
| committer | Marcel Holtmann <marcel@holtmann.org> | 2008-06-24 00:24:08 +0000 | 
| commit | bf39ef3c93da52c445a181b840cbd45601979481 (patch) | |
| tree | afe9d6da312adf5ad85dcd37d6cedb0a17d994c0 | |
| parent | 86a2b9551e7352b6f9115c0b057b0d9133079e25 (diff) | |
Use safe PDU extract functions
| -rw-r--r-- | hcid/dbus-database.c | 4 | ||||
| -rw-r--r-- | hcid/dbus-sdp.c | 13 | 
2 files changed, 9 insertions, 8 deletions
| diff --git a/hcid/dbus-database.c b/hcid/dbus-database.c index c6a689d2..ab88c8f5 100644 --- a/hcid/dbus-database.c +++ b/hcid/dbus-database.c @@ -119,7 +119,7 @@ static DBusMessage *add_service_record(DBusConnection *conn,  	if (len <= 0)  		return invalid_arguments(msg); -	sdp_record = sdp_extract_pdu(record, &scanned); +	sdp_record = sdp_extract_pdu_safe(record, len, &scanned);  	if (!sdp_record) {  		error("Parsing of service record failed");  		return failed(msg); @@ -263,7 +263,7 @@ static DBusMessage *update_service_record(DBusConnection *conn,  	if (!user_record)  		return not_available(msg); -	sdp_record = sdp_extract_pdu(bin_record, &scanned); +	sdp_record = sdp_extract_pdu_safe(bin_record, size, &scanned);  	if (!sdp_record) {  		error("Parsing of service record failed");  		return invalid_arguments(msg); diff --git a/hcid/dbus-sdp.c b/hcid/dbus-sdp.c index cf018f1e..441e8233 100644 --- a/hcid/dbus-sdp.c +++ b/hcid/dbus-sdp.c @@ -499,7 +499,7 @@ static void remote_svc_rec_completed_cb(uint8_t type, uint16_t err,  	dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY,  			DBUS_TYPE_BYTE_AS_STRING, &array_iter); -	rec = sdp_extract_pdu(rsp, &scanned); +	rec = sdp_extract_pdu_safe(rsp, size, &scanned);  	if (rec == NULL || size != scanned) {  		error("Invalid service record!");  		goto done; @@ -562,7 +562,7 @@ static void remote_svc_rec_completed_xml_cb(uint8_t type, uint16_t err,  	reply = dbus_message_new_method_return(ctxt->rq); -	rec = sdp_extract_pdu(rsp, &scanned); +	rec = sdp_extract_pdu_safe(rsp, size, &scanned);  	if (rec == NULL || size != scanned) {  		error("Invalid service record!");  		goto done; @@ -730,7 +730,7 @@ static void remote_svc_identifiers_completed_cb(uint8_t type, uint16_t err,  	char **identifiers;  	DBusMessage *reply;  	GSList *l = NULL; -	int scanned, extracted = 0, len = 0, recsize = 0; +	int scanned, extracted = 0, len = 0, recsize = 0, bytesleft = size;  	uint8_t dtd = 0;  	if (!ctxt) @@ -762,14 +762,15 @@ static void remote_svc_identifiers_completed_cb(uint8_t type, uint16_t err,  		goto failed;  	} -	scanned = sdp_extract_seqtype(rsp, &dtd, &len); +	scanned = sdp_extract_seqtype_safe(rsp, bytesleft, &dtd, &len);  	rsp += scanned; -	for (; extracted < len; rsp += recsize, extracted += recsize) { +	bytesleft -= scanned; +	for (; extracted < len; rsp += recsize, extracted += recsize, bytesleft -= recsize) {  		sdp_record_t *rec;  		sdp_data_t *d;  		recsize = 0; -		rec = sdp_extract_pdu(rsp, &recsize); +		rec = sdp_extract_pdu_safe(rsp, bytesleft, &recsize);  		if (!rec)  			break; | 
