ALT Linux Team development discussions
 help / color / mirror / Atom feed
* [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