VirtualBox

Changeset 69615 in vbox


Ignore:
Timestamp:
Nov 8, 2017 1:04:15 PM (7 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
118975
Message:

FE/Qt: Fixing a crush causing by a dangling reference to QByteArray

Location:
trunk/src/VBox/Frontends/VirtualBox/src
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp

    r69552 r69615  
    33243324
    33253325#ifdef VBOX_WS_X11
    3326 void VBoxGlobal::setWMClass(QWidget *pWidget, const char *pStrName, const char *pStrClass)
     3326void VBoxGlobal::setWMClass(QWidget *pWidget, const QString &strNameString, const QString &strClassString)
    33273327{
    33283328    /* Make sure all arguments set: */
    3329     AssertReturnVoid(pWidget && pStrName && pStrClass);
    3330 
    3331     /* Create duplicates to avoid casting away constness: */
    3332     char *pWindowName = strdup(pStrName);
    3333     char *pWindowClass = strdup(pStrClass);
    3334     AssertReturnVoid(pWindowName && pWindowClass);
     3329    AssertReturnVoid(pWidget && !strNameString.isNull() && !strClassString.isNull());
     3330
     3331    /* Define QByteArray object to make sure data is alive within the scope: */
     3332    QByteArray nameByteArray = strNameString.toLatin1();
     3333    QByteArray classByteArray = strClassString.toLatin1();
     3334
     3335    AssertReturnVoid(nameByteArray.data() && classByteArray.data());
    33353336
    33363337    XClassHint windowClass;
    3337     windowClass.res_name = pWindowName;
    3338     windowClass.res_class = pWindowClass;
     3338    windowClass.res_name = nameByteArray.data();
     3339    windowClass.res_class = classByteArray.data();
    33393340    /* Set WM_CLASS of the window to passed name and class strings: */
    33403341    XSetClassHint(QX11Info::display(), pWidget->window()->winId(), &windowClass);
    3341 
    3342     /* Free duplicates: */
    3343     XFree(windowClass.res_class);
    3344     XFree(windowClass.res_name);
    33453342}
    33463343#endif /* VBOX_WS_X11 */
  • trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.h

    r69552 r69615  
    455455#ifdef VBOX_WS_X11
    456456    /** Assigns WM_CLASS property for passed @a pWidget. */
    457     static void setWMClass(QWidget *pWidget, const char *pStrName, const char *pStrClass);
     457    static void setWMClass(QWidget *pWidget, const QString &strNameString, const QString &strClassString);
    458458#endif
    459459
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineWindow.cpp

    r69552 r69615  
    9999    /* Compose window name: */
    100100    const QString strWindowName = QString("VirtualBox Machine UUID: %1").arg(vboxGlobal().managedVMUuid());
    101 
    102     /* Assign it to both WM_CLASS name & class for now: */
    103     const char *pBuffer = strWindowName.toLatin1().constData();
    104     if (pBuffer)
    105         vboxGlobal().setWMClass(this, pBuffer, pBuffer);
    106     else
    107         vboxGlobal().setWMClass(this, "VirtualBox Machine", "VirtualBox Machine");
     101    vboxGlobal().setWMClass(this, strWindowName, strWindowName);
    108102#endif
    109103
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette