Make moc ready for when null byte-arrays have null constData()
Various places in moc relied on the magic behavior of QByteArray, that provided a non-null pointer to a null byte when the byte array was null, resulting in crashes when QT5_NULL_STRINGS is turned off. Fixed them to cope with this (and optimised out some pointless effort, when empty QByteArrays are involved, in the process). Change-Id: I617a878eb2e9ac8be244080efa1f0de4ac9a68a2 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
This commit is contained in:
parent
4e27961db9
commit
3a53fd9f23
@ -1,7 +1,7 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2016 The Qt Company Ltd.
|
||||
** Copyright (C) 2013 Olivier Goffart <ogoffart@woboq.com>
|
||||
** Copyright (C) 2020 The Qt Company Ltd.
|
||||
** Copyright (C) 2019 Olivier Goffart <ogoffart@woboq.com>
|
||||
** Copyright (C) 2018 Intel Corporation.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
@ -283,7 +283,7 @@ void Generator::generateCode()
|
||||
if (i != strings.size() - 1)
|
||||
fputc(',', out);
|
||||
const QByteArray comment = str.length() > 32 ? str.left(29) + "..." : str;
|
||||
fprintf(out, " // \"%s\"\n", comment.constData());
|
||||
fprintf(out, " // \"%s\"\n", comment.size() ? comment.constData() : "");
|
||||
idx += str.length() + 1;
|
||||
for (int j = 0; j < str.length(); ++j) {
|
||||
if (str.at(j) == '\\') {
|
||||
@ -1466,8 +1466,12 @@ void Generator::generateSignal(FunctionDef *def,int index)
|
||||
for (int j = 0; j < def->arguments.count(); ++j) {
|
||||
const ArgumentDef &a = def->arguments.at(j);
|
||||
if (j)
|
||||
fprintf(out, ", ");
|
||||
fprintf(out, "%s _t%d%s", a.type.name.constData(), offset++, a.rightType.constData());
|
||||
fputs(", ", out);
|
||||
if (a.type.name.size())
|
||||
fputs(a.type.name.constData(), out);
|
||||
fprintf(out, " _t%d", offset++);
|
||||
if (a.rightType.size())
|
||||
fputs(a.rightType.constData(), out);
|
||||
}
|
||||
if (def->isPrivateSignal) {
|
||||
if (!def->arguments.isEmpty())
|
||||
|
@ -1,7 +1,7 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2016 The Qt Company Ltd.
|
||||
** Copyright (C) 2016 Olivier Goffart <ogoffart@woboq.com>
|
||||
** Copyright (C) 2020 The Qt Company Ltd.
|
||||
** Copyright (C) 2019 Olivier Goffart <ogoffart@woboq.com>
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the tools applications of the Qt Toolkit.
|
||||
@ -46,8 +46,7 @@ QT_BEGIN_NAMESPACE
|
||||
// only moc needs this function
|
||||
static QByteArray normalizeType(const QByteArray &ba)
|
||||
{
|
||||
QByteArray result = normalizeTypeInternal(ba.constBegin(), ba.constEnd());
|
||||
return result;
|
||||
return ba.size() ? normalizeTypeInternal(ba.constBegin(), ba.constEnd()) : ba;
|
||||
}
|
||||
|
||||
bool Moc::parseClassHead(ClassDef *def)
|
||||
|
Loading…
Reference in New Issue
Block a user