Skip to content

Commit adf30a8

Browse files
committed
Avoid undefined behavior on goValueActivate.
Updates #19.
1 parent 91d0a93 commit adf30a8

File tree

1 file changed

+10
-16
lines changed

1 file changed

+10
-16
lines changed

cpp/capi.cpp

+10-16
Original file line numberDiff line numberDiff line change
@@ -513,30 +513,30 @@ error *objectConnect(QObject_ *object, const char *signal, int signalLen, QQmlEn
513513

514514
QQmlContext_ *objectContext(QObject_ *object)
515515
{
516-
return qmlContext(reinterpret_cast<QObject *>(object));
516+
return qmlContext(static_cast<QObject *>(object));
517517
}
518518

519519
int objectIsComponent(QObject_ *object)
520520
{
521-
QObject *qobject = reinterpret_cast<QObject *>(object);
521+
QObject *qobject = static_cast<QObject *>(object);
522522
return dynamic_cast<QQmlComponent *>(qobject) ? 1 : 0;
523523
}
524524

525525
int objectIsWindow(QObject_ *object)
526526
{
527-
QObject *qobject = reinterpret_cast<QObject *>(object);
527+
QObject *qobject = static_cast<QObject *>(object);
528528
return dynamic_cast<QQuickWindow *>(qobject) ? 1 : 0;
529529
}
530530

531531
int objectIsView(QObject_ *object)
532532
{
533-
QObject *qobject = reinterpret_cast<QObject *>(object);
533+
QObject *qobject = static_cast<QObject *>(object);
534534
return dynamic_cast<QQuickView *>(qobject) ? 1 : 0;
535535
}
536536

537537
error *objectGoAddr(QObject_ *object, GoAddr **addr)
538538
{
539-
QObject *qobject = reinterpret_cast<QObject *>(object);
539+
QObject *qobject = static_cast<QObject *>(object);
540540
GoValue *goValue = dynamic_cast<GoValue *>(qobject);
541541
if (goValue) {
542542
*addr = goValue->addr;
@@ -576,18 +576,12 @@ void goValueActivate(GoValue_ *value, GoTypeInfo *typeInfo, int addrOffset)
576576
GoMemberInfo *fieldInfo = typeInfo->fields;
577577
for (int i = 0; i < typeInfo->fieldsLen; i++) {
578578
if (fieldInfo->addrOffset == addrOffset) {
579-
QObject *qvalue = reinterpret_cast<QObject *>(value);
580-
GoValue *goValue = dynamic_cast<GoValue *>(qvalue);
581-
if (goValue) {
582-
goValue->activate(fieldInfo->metaIndex);
583-
return;
584-
}
585-
GoPaintedValue *goPaintedValue = dynamic_cast<GoPaintedValue *>(qvalue);
586-
if (goPaintedValue) {
587-
goPaintedValue->activate(fieldInfo->metaIndex);
588-
return;
579+
if (typeInfo->paint) {
580+
static_cast<GoPaintedValue *>(value)->activate(fieldInfo->metaIndex);
581+
} else {
582+
static_cast<GoValue *>(value)->activate(fieldInfo->metaIndex);
589583
}
590-
panicf("invalid GoValue address");
584+
return;
591585
}
592586
fieldInfo++;
593587
}

0 commit comments

Comments
 (0)