Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-109073

[REG] Memory leak in QJsonObject

    XMLWordPrintable

Details

    • Linux/X11
    • 21
    • 83f079619 (dev), 6e269fe18 (6.7)
    • Foundation Sprint 100

    Description

      Updating a QJsonObject with a string value causes increasing memory use, the following program exhibits the problem:

      #include <QDebug>
      #include <QJsonObject>
      #include <QString>
      
      int main(int argc, char **argv) {
          QJsonObject container;
          while (true) {
             container.insert("key", "value");
             qDebug() << container.size();
           }
           return 0;
      }
      

      Tested on default packages on Debian and Fedora36 for 5.15 as well as 6.3 on Debian.

      5.12 does not exhibit the same problem, but as far as I can tell it doesn't use QCborContainerPrivate as the internal representation.

      The problem is that the QByteArray in container.o.d.data keeps growing; after the first loop iteration it is :

      data = "\003\000\000\000key\000\005\000\000\000value" = {
       [0] = 3 '\003',
       [1] = 0 '\000',
       [2] = 0 '\000',
       [3] = 0 '\000',
       [4] = 107 'k',
       [5] = 101 'e',
       [6] = 121 'y',
       [7] = 0 '\000',
       [8] = 5 '\005',
       [9] = 0 '\000',
       [10] = 0 '\000',
       [11] = 0 '\000',
       [12] = 118 'v',
       [13] = 97 'a',
       [14] = 108 'l',
       [15] = 117 'u',
       [16] = 101 'e'
       }

      after the second:

      data = "\003\000\000\000key\000\005\000\000\000value\000\000\000\005\000\000\000value" = {
          [0] = 3 '\003',
          [1] = 0 '\000',
          [2] = 0 '\000',
          [3] = 0 '\000',
          [4] = 107 'k',
          [5] = 101 'e',
          [6] = 121 'y',
          [7] = 0 '\000',
          [8] = 5 '\005',
          [9] = 0 '\000',
          [10] = 0 '\000',
          [11] = 0 '\000',
          [12] = 118 'v',
          [13] = 97 'a',
          [14] = 108 'l',
          [15] = 117 'u',
          [16] = 101 'e',
          [17] = 0 '\000',
          [18] = 0 '\000',
          [19] = 0 '\000',
          [20] = 5 '\005',
          [21] = 0 '\000',
          [22] = 0 '\000',
          [23] = 0 '\000',
          [24] = 118 'v',
          [25] = 97 'a',
          [26] = 108 'l',
          [27] = 117 'u',
          [28] = 101 'e'
        },
      

      Presumably there's a bug in how strings are (re)allocated in QJsonObjects. There doesn't seem to be a problem with int-types. At least I haven't seen one.

      Attachments

        For Gerrit Dashboard: QTBUG-109073
        # Subject Branch Project Status CR V

        Activity

          People

            ivan.solovev Ivan Solovev
            olemd Ole-Morten Duesund
            Vladimir Minenko Vladimir Minenko
            Alex Blasche Alex Blasche
            Votes:
            1 Vote for this issue
            Watchers:
            5 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Gerrit Reviews

                There are no open Gerrit changes