sdpscanner: fix format strings for (u)int64_t

This probably only worked on Little-Endian machines, but it's UB
there, too, of course.

Wasn't detected by the compiler because qsnprintf() doen't have
__attribute__(printf), for some reason.

Prepare the folded part of the line so a follow-up port to
std::snprintf() doesn't have to re-indent it.

Amends 3ee0be1013.

[ChangeLog][QtBluetooth][sdpscanner] Fixed a bug involving broken
serialization of SDP_(U)INT64 DTDs on Big-Endian machines.

Pick-to: 6.8 6.7 6.5 6.2 5.15
Change-Id: Ib4e24007cf498814f3c91b5a57e7dfd6a311926c
Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
Marc Mutz 2024-07-18 16:26:21 +02:00
parent f9888436c8
commit fcee2074e1
1 changed files with 4 additions and 2 deletions

View File

@ -60,7 +60,8 @@ static void parseAttributeValues(sdp_data_t *data, int indentation, QByteArray &
xmlOutput.append(snBuffer);
break;
case SDP_UINT64:
qsnprintf(snBuffer, BUFFER_SIZE, "<uint64 value=\"0x%016x\"/>\n", data->val.uint64);
qsnprintf(snBuffer, BUFFER_SIZE, "<uint64 value=\"0x%016llx\"/>\n",
qulonglong(data->val.uint64));
xmlOutput.append(snBuffer);
break;
case SDP_UINT128:
@ -83,7 +84,8 @@ static void parseAttributeValues(sdp_data_t *data, int indentation, QByteArray &
xmlOutput.append(snBuffer);
break;
case SDP_INT64:
qsnprintf(snBuffer, BUFFER_SIZE, "<int64 value=\"%d\"/>/n", data->val.int64);
qsnprintf(snBuffer, BUFFER_SIZE, "<int64 value=\"%lld\"/>/n",
qlonglong(data->val.int64));
xmlOutput.append(snBuffer);
break;
case SDP_INT128: