* [devel] PyGTK @ 2009-07-24 3:39 REAL 2009-07-24 3:42 ` REAL 2009-07-24 3:51 ` REAL 0 siblings, 2 replies; 15+ messages in thread From: REAL @ 2009-07-24 3:39 UTC (permalink / raw) To: ALT Linux Team development discussions Привет! Пока нет ни от кого реакции, прошу помощи зала: https://bugzilla.altlinux.org/show_bug.cgi?id=20842 Сборка обламывается не из-за чего-то там питоновского, а из-за бага в коде. Не знаю, как у других, а у меня уже большая очередь непересобираемых (на x86_64) пакетов выстроилась, но, поскольку они собираются на i586, чтобы не создавать шизы, я на вики это пока не добавляю. -- REAL aka Евгений Ростовцев, программист ЦНИТ КемГУ ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [devel] PyGTK 2009-07-24 3:39 [devel] PyGTK REAL @ 2009-07-24 3:42 ` REAL 2009-07-24 3:51 ` REAL 1 sibling, 0 replies; 15+ messages in thread From: REAL @ 2009-07-24 3:42 UTC (permalink / raw) To: ALT Linux Team development discussions REAL пишет: > Не знаю, как у других, а у меня уже большая очередь непересобираемых (на > x86_64) пакетов выстроилась Чтобы не путать никого: очередь возникла как раз из-за PyGTK (python-module-pygtk). -- REAL aka Евгений Ростовцев, программист ЦНИТ КемГУ ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [devel] PyGTK 2009-07-24 3:39 [devel] PyGTK REAL 2009-07-24 3:42 ` REAL @ 2009-07-24 3:51 ` REAL 2009-07-24 5:39 ` Eugene Ostapets 2009-07-24 10:34 ` Sergey Vlasov 1 sibling, 2 replies; 15+ messages in thread From: REAL @ 2009-07-24 3:51 UTC (permalink / raw) To: ALT Linux Team development discussions > https://bugzilla.altlinux.org/show_bug.cgi?id=20842 Кусочек из лога: 1017 ./gtk.override: In function '_wrap_gtk_message_dialog_format_secondary_text': 1018 ./gtk.override:6304: warning: format not a string literal and no format arguments 1019 ./gtk.override: In function '_wrap_gtk_message_dialog_format_secondary_markup': 1020 ./gtk.override:6327: warning: format not a string literal and no format arguments 1021 In file included from /usr/include/string.h:658, 1022 from /usr/include/python2.6/Python.h:38, 1023 from gdk.c:4: 1024 In function 'strncpy', 1025 inlined from '_wrap_gdk_event_tp_setattr' at gdkevent.override:357: 1026 /usr/include/bits/string3.h:122: error: call to __builtin___strncpy_chk will always overflow destination buffer 1027 make[2]: *** [_gtk_la-gdk.lo] Error 1 -- REAL aka Евгений Ростовцев, программист ЦНИТ КемГУ ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [devel] PyGTK 2009-07-24 3:51 ` REAL @ 2009-07-24 5:39 ` Eugene Ostapets 2009-07-24 5:58 ` REAL 2009-07-24 10:34 ` Sergey Vlasov 1 sibling, 1 reply; 15+ messages in thread From: Eugene Ostapets @ 2009-07-24 5:39 UTC (permalink / raw) To: ALT Linux Team development discussions On Fri, Jul 24, 2009 at 6:51 AM, REAL<root mmedia2.kemsu.ru> wrote: >> https://bugzilla.altlinux.org/show_bug.cgi?id=20842 > > Кусочек из лога: Это уже рваный боян :) Для printf-подобных функций ныче не допускается вызов типа printf(stringvar), нужно заменить на printf("%s",stringvar). Т.е. патч тривиальный. -- С уважением, Евгений Остапец uin: 23747217 jid: eugene_ostapets@jabber.ru ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [devel] PyGTK 2009-07-24 5:39 ` Eugene Ostapets @ 2009-07-24 5:58 ` REAL 2009-07-24 6:25 ` Eugene Ostapets 0 siblings, 1 reply; 15+ messages in thread From: REAL @ 2009-07-24 5:58 UTC (permalink / raw) To: ALT Linux Team development discussions Eugene Ostapets пишет: >> Кусочек из лога: > Это уже рваный боян :) > Для printf-подобных функций ныче не допускается вызов типа > printf(stringvar), нужно заменить на printf("%s",stringvar). Т.е. патч > тривиальный. Дело не в printf, дело в strncpy, как можно видеть из того кусочка лога, что я привёл. Да и printf не ломает сборку, а для пересборки на варнинги я бы не стал обращать внимания (тем более там и без меня мейнтейнеров хватает). -- REAL aka Евгений Ростовцев, программист ЦНИТ КемГУ ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [devel] PyGTK 2009-07-24 5:58 ` REAL @ 2009-07-24 6:25 ` Eugene Ostapets 2009-07-24 6:53 ` REAL 0 siblings, 1 reply; 15+ messages in thread From: Eugene Ostapets @ 2009-07-24 6:25 UTC (permalink / raw) To: ALT Linux Team development discussions 2009/7/24 REAL <root mmedia2.kemsu.ru>: > Eugene Ostapets пишет: > Дело не в printf, дело в strncpy, как можно видеть из того кусочка лога, что > я привёл. Да, недочитал. Там еще проще, нужно добавить "-1" к последнему аргументу. И повесить багу авторам, ибо они man strncpy явно не читали... -- С уважением, Евгений Остапец uin: 23747217 jid: eugene_ostapets@jabber.ru ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [devel] PyGTK 2009-07-24 6:25 ` Eugene Ostapets @ 2009-07-24 6:53 ` REAL 2009-07-24 6:59 ` Alexey Tourbin 0 siblings, 1 reply; 15+ messages in thread From: REAL @ 2009-07-24 6:53 UTC (permalink / raw) To: ALT Linux Team development discussions Eugene Ostapets пишет: > Там еще проще, нужно добавить "-1" к последнему аргументу. И повесить > багу авторам, ибо они man strncpy явно не читали... Это я попробовал сразу же, но не помогло, сообщение об ошибке не изменилось. В общем, здесь нужно более глубоко рыть, а мейнтейнерам однозначно с этим будет проще и быстрее разобраться. Но раз пока никто из них не отреагировал, решил обратиться к сообществу, потому что мне что-то непонятно, чего этой штуке надо. Исходный код: strncpy((char *) &event->client.data, tmp, sizeof(event->client.data)); Вылетает ошибка. Делал так: strncpy((char *) &event->client.data, tmp, sizeof(event->client.data)-1); Без разницы. -- REAL aka Евгений Ростовцев, программист ЦНИТ КемГУ ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [devel] PyGTK 2009-07-24 6:53 ` REAL @ 2009-07-24 6:59 ` Alexey Tourbin 2009-07-24 7:22 ` REAL 2009-07-24 9:44 ` Alexey Rusakov 0 siblings, 2 replies; 15+ messages in thread From: Alexey Tourbin @ 2009-07-24 6:59 UTC (permalink / raw) To: ALT Linux Team development discussions [-- Attachment #1: Type: text/plain, Size: 891 bytes --] On Fri, Jul 24, 2009 at 02:53:35PM +0800, REAL wrote: > Eugene Ostapets пишет: > >Там еще проще, нужно добавить "-1" к > >последнему аргументу. И повесить > >багу авторам, ибо они man strncpy явно не > >читали... > > Это я попробовал сразу же, но не помогло, > сообщение об ошибке не изменилось. В > общем, здесь нужно более глубоко рыть, а > мейнтейнерам однозначно с этим будет > проще и быстрее разобраться. > > Но раз пока никто из них не отреагировал, > решил обратиться к сообществу, потому > что мне что-то непонятно, чего этой штуке > надо. > > Исходный код: > > strncpy((char *) &event->client.data, tmp, А зачем тут адрес берётся? > sizeof(event->client.data)); > > Вылетает ошибка. Делал так: > > strncpy((char *) &event->client.data, tmp, > sizeof(event->client.data)-1); > > Без разницы. [-- Attachment #2: Type: application/pgp-signature, Size: 197 bytes --] ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [devel] PyGTK 2009-07-24 6:59 ` Alexey Tourbin @ 2009-07-24 7:22 ` REAL 2009-07-24 9:44 ` Alexey Rusakov 1 sibling, 0 replies; 15+ messages in thread From: REAL @ 2009-07-24 7:22 UTC (permalink / raw) To: ALT Linux Team development discussions Alexey Tourbin пишет: >> strncpy((char *) &event->client.data, tmp, > > А зачем тут адрес берётся? Так в исходниках. Попробую убрать эту & (как машина чуть освободится). -- REAL aka Евгений Ростовцев, программист ЦНИТ КемГУ ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [devel] PyGTK 2009-07-24 6:59 ` Alexey Tourbin 2009-07-24 7:22 ` REAL @ 2009-07-24 9:44 ` Alexey Rusakov 2009-07-24 9:51 ` Alexey Tourbin 1 sibling, 1 reply; 15+ messages in thread From: Alexey Rusakov @ 2009-07-24 9:44 UTC (permalink / raw) To: ALT Linux Team development discussions [-- Attachment #1: Type: text/plain, Size: 2347 bytes --] В Птн, 24/07/2009 в 10:59 +0400, Alexey Tourbin пишет: > On Fri, Jul 24, 2009 at 02:53:35PM +0800, REAL wrote: > > Eugene Ostapets пишет: > > >Там еще проще, нужно добавить "-1" к > > >последнему аргументу. И повесить > > >багу авторам, ибо они man strncpy явно не > > >читали... > > > > Это я попробовал сразу же, но не помогло, > > сообщение об ошибке не изменилось. В > > общем, здесь нужно более глубоко рыть, а > > мейнтейнерам однозначно с этим будет > > проще и быстрее разобраться. > > > > Но раз пока никто из них не отреагировал, > > решил обратиться к сообществу, потому > > что мне что-то непонятно, чего этой штуке > > надо. > > > > Исходный код: > > > > strncpy((char *) &event->client.data, tmp, > > А зачем тут адрес берётся? Адрес тут берётся, потому что event->client.data - это union. event->client - это GdkEventClient, который выглядит так: typedef struct { GdkEventType type; GdkWindow *window; gint8 send_event; GdkAtom message_type; gushort data_format; union { char b[20]; short s[10]; long l[5]; } data; } GdkEventClient; Соответственно, люди таким образом копируют строку в event->client.data.b . Не знаю, почему бы не использовать явное указание поля в объединении - может, с переносимостью этого какая проблема... Но у меня есть подозрение, что на 64-разрядной платформе размер этого union'а оказался больше, чем размер его поля. Проверить, к сожалению, в данный момент не на чем (а на 32 битах всё в порядке, sizeof data возвращает 20). -- Alexey "Ktirf" Rusakov GNOME Project ALT Linux Team [-- Attachment #2: Эта часть сообщения подписана цифровой подписью --] [-- Type: application/pgp-signature, Size: 197 bytes --] ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [devel] PyGTK 2009-07-24 9:44 ` Alexey Rusakov @ 2009-07-24 9:51 ` Alexey Tourbin 0 siblings, 0 replies; 15+ messages in thread From: Alexey Tourbin @ 2009-07-24 9:51 UTC (permalink / raw) To: ALT Linux Team development discussions [-- Attachment #1: Type: text/plain, Size: 1284 bytes --] On Fri, Jul 24, 2009 at 01:44:49PM +0400, Alexey Rusakov wrote: > В Птн, 24/07/2009 в 10:59 +0400, Alexey Tourbin пишет: > > On Fri, Jul 24, 2009 at 02:53:35PM +0800, REAL wrote: > > > Исходный код: > > > strncpy((char *) &event->client.data, tmp, > > > > А зачем тут адрес берётся? > Адрес тут берётся, потому что event->client.data - это union. > event->client - это GdkEventClient, который выглядит так: > > typedef struct { > GdkEventType type; > GdkWindow *window; > gint8 send_event; > GdkAtom message_type; > gushort data_format; > union { > char b[20]; > short s[10]; > long l[5]; > } data; > } GdkEventClient; В том-то и дело, что если копируем в массив, то адрес массива брать не нужно (или не обязательно). Поэтому сразу подозрение, что копируют куда-то не туда, куда хотят. > Соответственно, люди таким образом копируют строку в > event->client.data.b . Не знаю, почему бы не использовать явное указание > поля в объединении - может, с переносимостью этого какая проблема... Но > у меня есть подозрение, что на 64-разрядной платформе размер этого > union'а оказался больше, чем размер его поля. Проверить, к сожалению, в > данный момент не на чем (а на 32 битах всё в порядке, sizeof data > возвращает 20). [-- Attachment #2: Type: application/pgp-signature, Size: 197 bytes --] ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [devel] PyGTK 2009-07-24 3:51 ` REAL 2009-07-24 5:39 ` Eugene Ostapets @ 2009-07-24 10:34 ` Sergey Vlasov 2009-07-27 9:27 ` REAL 1 sibling, 1 reply; 15+ messages in thread From: Sergey Vlasov @ 2009-07-24 10:34 UTC (permalink / raw) To: devel [-- Attachment #1: Type: text/plain, Size: 3221 bytes --] On Fri, Jul 24, 2009 at 11:51:32AM +0800, REAL wrote: > >https://bugzilla.altlinux.org/show_bug.cgi?id=20842 > 1021 In file included from /usr/include/string.h:658, > 1022 from /usr/include/python2.6/Python.h:38, > 1023 from gdk.c:4: > 1024 In function 'strncpy', > 1025 inlined from '_wrap_gdk_event_tp_setattr' at > gdkevent.override:357: > 1026 /usr/include/bits/string3.h:122: error: call to > __builtin___strncpy_chk will always overflow destination buffer Часть структуры, с которой производятся операции, выглядит так: struct _GdkEventClient { GdkEventType type; GdkWindow *window; gint8 send_event; GdkAtom message_type; gushort data_format; union { char b[20]; short s[10]; long l[5]; } data; }; Можно сократить testcase до: #include <string.h> struct Event { union { char b[4]; long l[1]; } data; }; void test_fn(struct Event *event, const char *tmp) { strncpy((char *) &event->data, tmp, sizeof(event->data)); } Т.е., копирование производится в поле, являющееся union, один из компонентов которого - массив char. В этом случае, похоже, в качестве размера массива для проверки на переполнение буфера всегда берётся размер массива char, однако sizeof возвращает полный размер всего union (соответствующий максимальному компоненту с учётом выравнивания). В результате код нормально компилируется, пока другие компоненты union не превосходят массив char по размеру; однако на x86_64 long становится 64-битным, в результате размер всего union становится больше, чем размер массива b, и при попытке копирования в union фиксируется переполнение буфера (несмотря на то, что используется адрес поля data, а не data.b). Можно попробовать исправить код так: - strncpy((char *) &event->client.data, tmp, - sizeof(event->client.data)); + strncpy(event->client.data.b, tmp, + sizeof(event->client.data.b)); (данные типа short или long всё равно нельзя будет передать из-за нулевых байтов; нужен ли там '\0' в конце - зависит от того, для кого предназначается этот XClientMessageEvent; в общем случае событие без завершающего '\0' вполне можно передать). Правда, в другом месте есть ещё обратное преобразование: if (!strcmp(attr, "data")) return PyString_FromStringAndSize((char *) &event->client.data, sizeof(event->client.data)); Для соответствия ему можно сделать совсем правильно: } else if (!strcmp(attr, "data")) { char *tmp; Py_ssize_t len; STRING_CHECK(); if (PyString_AsStringAndSize(value, &tmp, &len)) return -1; if (len < 0) return -1; if (len > sizeof(event->client.data)) len = sizeof(event->client.data); memcpy(&event->client.data, tmp, len); memset((char *)&event->client.data + len, 0, sizeof(event->client.data) - len); return 0; } (В этом варианте в строке могут быть и нулевые байты, которые попадут в буфер.) [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 189 bytes --] ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [devel] PyGTK 2009-07-24 10:34 ` Sergey Vlasov @ 2009-07-27 9:27 ` REAL 2009-07-27 11:04 ` Yuri N. Sedunov 0 siblings, 1 reply; 15+ messages in thread From: REAL @ 2009-07-27 9:27 UTC (permalink / raw) To: ALT Linux Team development discussions Привет! Sergey Vlasov пишет: > (В этом варианте в строке могут быть и нулевые байты, которые попадут > в буфер.) Благодарю. Ваш вариант хоть обозвали нехорошим словом "параноидальный", но это всё же скорее как комплимент ;). Занёс на git.alt. -- REAL aka Евгений Ростовцев, программист ЦНИТ КемГУ ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [devel] PyGTK 2009-07-27 9:27 ` REAL @ 2009-07-27 11:04 ` Yuri N. Sedunov 2009-07-28 5:08 ` REAL 0 siblings, 1 reply; 15+ messages in thread From: Yuri N. Sedunov @ 2009-07-27 11:04 UTC (permalink / raw) To: ALT Linux Team development discussions В Пнд, 27/07/2009 в 17:27 +0800, REAL пишет: > Привет! > > Sergey Vlasov пишет: > > (В этом варианте в строке могут быть и нулевые байты, которые попадут > > в буфер.) > > Благодарю. Ваш вариант хоть обозвали нехорошим словом > "параноидальный", но это всё же скорее как комплимент ;). Занёс на > git.alt. Будьте добры, предложите сей патч в апстрим. -- Yuri N. Sedunov ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [devel] PyGTK 2009-07-27 11:04 ` Yuri N. Sedunov @ 2009-07-28 5:08 ` REAL 0 siblings, 0 replies; 15+ messages in thread From: REAL @ 2009-07-28 5:08 UTC (permalink / raw) To: ALT Linux Team development discussions Yuri N. Sedunov пишет: >> Благодарю. Ваш вариант хоть обозвали нехорошим словом >> "параноидальный", но это всё же скорее как комплимент ;). Занёс на >> git.alt. > Будьте добры, предложите сей патч в апстрим. http://bugzilla.gnome.org/show_bug.cgi?id=589957 -- REAL aka Евгений Ростовцев, программист ЦНИТ КемГУ ^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2009-07-28 5:08 UTC | newest] Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2009-07-24 3:39 [devel] PyGTK REAL 2009-07-24 3:42 ` REAL 2009-07-24 3:51 ` REAL 2009-07-24 5:39 ` Eugene Ostapets 2009-07-24 5:58 ` REAL 2009-07-24 6:25 ` Eugene Ostapets 2009-07-24 6:53 ` REAL 2009-07-24 6:59 ` Alexey Tourbin 2009-07-24 7:22 ` REAL 2009-07-24 9:44 ` Alexey Rusakov 2009-07-24 9:51 ` Alexey Tourbin 2009-07-24 10:34 ` Sergey Vlasov 2009-07-27 9:27 ` REAL 2009-07-27 11:04 ` Yuri N. Sedunov 2009-07-28 5:08 ` REAL
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