* [devel] Fwd: [#308801] FAILED del=ffmpeg
@ 2022-10-22 9:56 ` Arbars
2022-10-22 9:57 ` Anton Farygin
0 siblings, 1 reply; 4+ messages in thread
From: Arbars @ 2022-10-22 9:56 UTC (permalink / raw)
To: ALT Linux Team development discussions
https://git.altlinux.org/tasks/308801/logs/events.1.1.log
Есть решение:
https://github.com/FFmpeg/FFmpeg/commit/e5163b1d34381a3319214a902ef1df923dd2eeba
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [devel] Fwd: [#308801] FAILED del=ffmpeg
2022-10-22 9:56 ` [devel] Fwd: [#308801] FAILED del=ffmpeg Arbars
@ 2022-10-22 9:57 ` Anton Farygin
2022-10-22 10:19 ` [devel] [qt6-base] nullptr передаётся в constexpr функцию? Ilya Kurdyukov
0 siblings, 1 reply; 4+ messages in thread
From: Anton Farygin @ 2022-10-22 9:57 UTC (permalink / raw)
To: devel
On 22.10.2022 12:56, Arbars wrote:
>
> https://git.altlinux.org/tasks/308801/logs/events.1.1.log
>
> Есть решение:
> https://github.com/FFmpeg/FFmpeg/commit/e5163b1d34381a3319214a902ef1df923dd2eeba
Спасибо, сейчас гляну.
^ permalink raw reply [flat|nested] 4+ messages in thread
* [devel] [qt6-base] nullptr передаётся в constexpr функцию?
2022-10-22 9:57 ` Anton Farygin
@ 2022-10-22 10:19 ` Ilya Kurdyukov
2022-10-22 10:40 ` Ilya Kurdyukov
0 siblings, 1 reply; 4+ messages in thread
From: Ilya Kurdyukov @ 2022-10-22 10:19 UTC (permalink / raw)
To: devel
На Эльбрусе такое возникло.
Срабатывает при выполнении qdbusxml2cpp, что используется в некоторых
пакетах (qt6-sensors, qt6-positioning).
Считаю что баг в апстриме. Но как это вообще может работать на других
архитектурах (компиляторах) ?
Для Эльбурса используется EDG, что "constexpr int normalizeType()"
выполянет в рантайме.
Стектрейс:
#0 0x0000455555cfec30 in QtPrivate::QTypeNormalizer::normalizeType(char
const*, char const*, bool) () from /usr/lib64/libQt6Core.so.6
#1 0x0000455555d010b8 in QtPrivate::qNormalizeType(char const*, char
const*, char*) () from /usr/lib64/libQt6Core.so.6
#2 0x0000455555ce3b00 in
_INTERNAL_15_qmetaobject_cpp_4823c95c::normalizeTypeInternal(char
const*, char const*) () from /usr/lib64/libQt6Core.so.6
#3 0x0000455555ce8a68 in QMetaObject::normalizedType(char const*) ()
from /usr/lib64/libQt6Core.so.6
#4 0x0000455555d984b0 in (anonymous
namespace)::QMetaTypeCustomRegistry::registerCustomType(QtPrivate::QMetaTypeInterface
const*) ()
from /usr/lib64/libQt6Core.so.6
#5 0x0000455555d2c8b8 in QMetaType::idHelper() const ()
from /usr/lib64/libQt6Core.so.6
#6 0x000000000003aea0 in QMetaType::id(int) const ()
#7 0x0000000000022d88 in
_INTERNAL_16_qdbusxml2cpp_cpp_4823c95c::qtTypeName(QString const&,
QMap<QString, QString> const&, int, char const*, bool) ()
#8 0x0000000000027838 in
_INTERNAL_16_qdbusxml2cpp_cpp_4823c95c::writeProxy(QString const&,
QMap<QString, QSharedDataPointer<QDBusIntrospection::Interface> > const&) ()
#9 0x0000000000032db0 in main ()
Последние три функции, в *t приходит нулевой указатель:
static QByteArray normalizeTypeInternal(const char *t, const char *e)
{
int len = QtPrivate::qNormalizeType(t, e, nullptr);
if (len == 0)
return QByteArray();
QByteArray result(len, Qt::Uninitialized);
len = QtPrivate::qNormalizeType(t, e, result.data());
Q_ASSERT(len == result.size());
return result;
}
constexpr int qNormalizeType(const char *begin, const char *end, char
*output)
{
return QTypeNormalizer { output }.normalizeType(begin, end);
}
struct QTypeNormalizer
{
constexpr int normalizeType(const char *begin, const char *end,
bool adjustConst = true)
{
// Trim spaces
while (begin != end && is_space(*begin))
begin++;
while (begin != end && is_space(*(end - 1)))
end--;
// Convert 'char const *' into 'const char *'. Start at index 1,
// not 0, because 'const char *' is already OK.
const char *cst = begin + 1;
if (*begin == '\'' || *begin == '"')
cst = skipString(begin, end);
bool seenStar = false;
bool hasMiddleConst = false;
while (cst < end) {
...
Падает на *begin == '\''.
Отсюда (qdbusxml2cpp.cpp):
static QByteArray qtTypeName(const QString &signature, const
QDBusIntrospection::Annotations &annotations, int paramId = -1, const
char *direction = "Out", bool isSignal = false)
{
int type =
QDBusMetaType::signatureToMetaType(signature.toLatin1()).id();
if (type == QMetaType::UnknownType) {
...
вызывается id() -> idHelper() -> registerCustomType() ... -> normalizeType()
QMetaType QDBusMetaType::signatureToMetaType(const char *signature)
{
if (!signature)
return QMetaType(QMetaType::UnknownType);
QDBusMetaTypeId::init();
switch (signature[0])
{
...
default:
return QMetaType(QMetaType::UnknownType);
}
}
QMetaType::UnknownType имеет name = nullptr, с нулевой длиной.
qmetatype.cpp:
static const struct { const char * typeName; int typeNameLength; int
type; } types[] = {
QT_FOR_EACH_STATIC_TYPE(QT_ADD_STATIC_METATYPE)
QT_FOR_EACH_STATIC_ALIAS_TYPE(QT_ADD_STATIC_METATYPE_ALIASES_ITER)
QT_ADD_STATIC_METATYPE(_, QMetaTypeId2<qreal>::MetaType, qreal)
{nullptr, 0, QMetaType::UnknownType}
};
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [devel] [qt6-base] nullptr передаётся в constexpr функцию?
2022-10-22 10:19 ` [devel] [qt6-base] nullptr передаётся в constexpr функцию? Ilya Kurdyukov
@ 2022-10-22 10:40 ` Ilya Kurdyukov
0 siblings, 0 replies; 4+ messages in thread
From: Ilya Kurdyukov @ 2022-10-22 10:40 UTC (permalink / raw)
To: devel
Похоже оно и не выполняется на других архитектурах, то есть на Эльбрусе
возникла ошибка где-то до этого, когда тип почему-то не нашелся, поэтому
вернуло QMetaType::UnknownType, что и вызвало ошибку, тем не менее в
таком случае в коде апстрима будет UB.
On 10/22/22 17:19, Ilya Kurdyukov wrote:
> На Эльбрусе такое возникло.
>
> Срабатывает при выполнении qdbusxml2cpp, что используется в некоторых
> пакетах (qt6-sensors, qt6-positioning).
>
> Считаю что баг в апстриме. Но как это вообще может работать на других
> архитектурах (компиляторах) ?
>
> Для Эльбурса используется EDG, что "constexpr int normalizeType()"
> выполянет в рантайме.
>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2022-10-22 10:40 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-10-22 9:56 ` [devel] Fwd: [#308801] FAILED del=ffmpeg Arbars
2022-10-22 9:57 ` Anton Farygin
2022-10-22 10:19 ` [devel] [qt6-base] nullptr передаётся в constexpr функцию? Ilya Kurdyukov
2022-10-22 10:40 ` Ilya Kurdyukov
ALT Linux Team development discussions
This inbox may be cloned and mirrored by anyone:
git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \
devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru
public-inbox-index devel
Example config snippet for mirrors.
Newsgroup available over NNTP:
nntp://lore.altlinux.org/org.altlinux.lists.devel
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git