0008-QXmlStreamReader-use-qOffsetStringArray-for-storing-.patch 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. From 7e50927d133e25577a0c3481c00b6877b581f411 Mon Sep 17 00:00:00 2001
  2. From: Sona Kurazyan <sona.kurazyan@qt.io>
  3. Date: Fri, 2 Sep 2022 16:52:04 +0200
  4. Subject: [PATCH] QXmlStreamReader: use qOffsetStringArray for storing token
  5. types
  6. MIME-Version: 1.0
  7. Content-Type: text/plain; charset=UTF-8
  8. Content-Transfer-Encoding: 8bit
  9. Change-Id: I9e58c17d97c44e1b13899d30396f65b452d8600f
  10. Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
  11. Upstream: https://github.com/qt/qtbase/commit/d674f3f5454fb39de9405484a8c01fb928523f67
  12. [Thomas: needed to backport fix for CVE-2023-38197]
  13. Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
  14. ---
  15. src/corelib/serialization/qxmlstream.cpp | 67 ++++++------------------
  16. 1 file changed, 16 insertions(+), 51 deletions(-)
  17. diff --git a/src/corelib/serialization/qxmlstream.cpp b/src/corelib/serialization/qxmlstream.cpp
  18. index 70e65df9957..a31bd16f1ce 100644
  19. --- a/src/corelib/serialization/qxmlstream.cpp
  20. +++ b/src/corelib/serialization/qxmlstream.cpp
  21. @@ -15,6 +15,8 @@
  22. #include <qscopeguard.h>
  23. #include <qcoreapplication.h>
  24. +#include <private/qoffsetstringarray_p.h>
  25. +
  26. #include <iterator>
  27. #include "qxmlstream_p.h"
  28. #include "qxmlstreamparser_p.h"
  29. @@ -642,55 +644,19 @@ void QXmlStreamReader::skipCurrentElement()
  30. }
  31. }
  32. -/*
  33. - * Use the following Perl script to generate the error string index list:
  34. -===== PERL SCRIPT ====
  35. -print "static const char QXmlStreamReader_tokenTypeString_string[] =\n";
  36. -$counter = 0;
  37. -$i = 0;
  38. -while (<STDIN>) {
  39. - chomp;
  40. - print " \"$_\\0\"\n";
  41. - $sizes[$i++] = $counter;
  42. - $counter += length 1 + $_;
  43. -}
  44. -print " \"\\0\";\n\nstatic const short QXmlStreamReader_tokenTypeString_indices[] = {\n ";
  45. -for ($j = 0; $j < $i; ++$j) {
  46. - printf "$sizes[$j], ";
  47. -}
  48. -print "0\n};\n";
  49. -===== PERL SCRIPT ====
  50. -
  51. - * The input data is as follows (copied from qxmlstream.h):
  52. -NoToken
  53. -Invalid
  54. -StartDocument
  55. -EndDocument
  56. -StartElement
  57. -EndElement
  58. -Characters
  59. -Comment
  60. -DTD
  61. -EntityReference
  62. -ProcessingInstruction
  63. -*/
  64. -static const char QXmlStreamReader_tokenTypeString_string[] =
  65. - "NoToken\0"
  66. - "Invalid\0"
  67. - "StartDocument\0"
  68. - "EndDocument\0"
  69. - "StartElement\0"
  70. - "EndElement\0"
  71. - "Characters\0"
  72. - "Comment\0"
  73. - "DTD\0"
  74. - "EntityReference\0"
  75. - "ProcessingInstruction\0";
  76. -
  77. -static const short QXmlStreamReader_tokenTypeString_indices[] = {
  78. - 0, 8, 16, 30, 42, 55, 66, 77, 85, 89, 105, 0
  79. -};
  80. -
  81. +static constexpr auto QXmlStreamReader_tokenTypeString = qOffsetStringArray(
  82. + "NoToken",
  83. + "Invalid",
  84. + "StartDocument",
  85. + "EndDocument",
  86. + "StartElement",
  87. + "EndElement",
  88. + "Characters",
  89. + "Comment",
  90. + "DTD",
  91. + "EntityReference",
  92. + "ProcessingInstruction"
  93. +);
  94. /*!
  95. \property QXmlStreamReader::namespaceProcessing
  96. @@ -723,8 +689,7 @@ bool QXmlStreamReader::namespaceProcessing() const
  97. QString QXmlStreamReader::tokenString() const
  98. {
  99. Q_D(const QXmlStreamReader);
  100. - return QLatin1StringView(QXmlStreamReader_tokenTypeString_string +
  101. - QXmlStreamReader_tokenTypeString_indices[d->type]);
  102. + return QLatin1StringView(QXmlStreamReader_tokenTypeString.at(d->type));
  103. }
  104. #endif // QT_NO_XMLSTREAMREADER
  105. --
  106. 2.46.0