QXmlStreamReader: port Value::prefix from int to qint16
The prefix is a part of a name, the length of which is bounded to 4k in fastScanName(), so qint16 suffices. The length field also shouldn't stay int, but that's a different patch, because it's just a relative offset to pos, and so isn't as easily overflown. This shrinks the Value struct a tiny bit; created QTBUG-103306 to track ideas to shrink it further. Pick-to: 6.3 6.2 Task-number: QTBUG-102465 Change-Id: I579815e72501a091360f55e750af63cb4dc5a5a7 Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
This commit is contained in:
parent
61c83dfb22
commit
dffba486d1
@ -1279,14 +1279,14 @@ inline int QXmlStreamReaderPrivate::fastScanContentCharList()
|
|||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int QXmlStreamReaderPrivate::fastScanName(int *prefix)
|
inline int QXmlStreamReaderPrivate::fastScanName(qint16 *prefix)
|
||||||
{
|
{
|
||||||
int n = 0;
|
int n = 0;
|
||||||
uint c;
|
uint c;
|
||||||
while ((c = getChar()) != StreamEOF) {
|
while ((c = getChar()) != StreamEOF) {
|
||||||
if (n >= 4096) {
|
if (n >= 4096) {
|
||||||
// This is too long to be a sensible name, and
|
// This is too long to be a sensible name, and
|
||||||
// can exhaust memory
|
// can exhaust memory, or the range of decltype(*prefix)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
switch (c) {
|
switch (c) {
|
||||||
@ -1325,7 +1325,7 @@ inline int QXmlStreamReaderPrivate::fastScanName(int *prefix)
|
|||||||
case ':':
|
case ':':
|
||||||
if (prefix) {
|
if (prefix) {
|
||||||
if (*prefix == 0) {
|
if (*prefix == 0) {
|
||||||
*prefix = n+2;
|
*prefix = qint16(n + 2);
|
||||||
} else { // only one colon allowed according to the namespace spec.
|
} else { // only one colon allowed according to the namespace spec.
|
||||||
putChar(c);
|
putChar(c);
|
||||||
return n;
|
return n;
|
||||||
|
@ -411,7 +411,7 @@ public:
|
|||||||
struct Value {
|
struct Value {
|
||||||
qsizetype pos; // offset into textBuffer
|
qsizetype pos; // offset into textBuffer
|
||||||
int len;
|
int len;
|
||||||
int prefix;
|
qint16 prefix; // prefix of a name (as in "prefix:name") limited to 4k in fastScanName()
|
||||||
ushort c;
|
ushort c;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -507,7 +507,7 @@ public:
|
|||||||
int fastScanLiteralContent();
|
int fastScanLiteralContent();
|
||||||
int fastScanSpace();
|
int fastScanSpace();
|
||||||
int fastScanContentCharList();
|
int fastScanContentCharList();
|
||||||
int fastScanName(int *prefix = nullptr);
|
int fastScanName(qint16 *prefix = nullptr);
|
||||||
inline int fastScanNMTOKEN();
|
inline int fastScanNMTOKEN();
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user