Bug 60314
| Summary: | undefining the allocator of T_DATA class FCGI | ||
|---|---|---|---|
| Product: | Sisyphus | Reporter: | Vladislav Glinkin <glinkinvd> |
| Component: | gem-fcgi | Assignee: | majioa <majioa> |
| Status: | CLOSED WONTFIX | QA Contact: | qa-sisyphus |
| Severity: | normal | ||
| Priority: | P5 | CC: | 3aHyga, admsasha, cas, majioa, mike, nbr, pav, rider, thatman |
| Version: | unstable | ||
| Hardware: | x86_64 | ||
| OS: | Linux | ||
warning не являяется ошибкой. болѣе того, не отнсится къ этому пакету (Ответ для Малъ Скрылевъ на комментарий #1) > warning не являяется ошибкой. болѣе того, не отнсится къ этому пакету Да, это warning, а не фатальная ошибка. Но к `gem-fcgi` он относится напрямую. Ruby выдаёт этот warning, когда C-расширение создаёт `T_DATA`, не переопределив и не удалив allocator класса. Это прямо описано в Ruby Bug #18007: https://bugs.ruby-lang.org/issues/18007 Документация Ruby также требует для таких классов использовать `rb_define_alloc_func()` или `rb_undef_alloc_func()`: https://docs.ruby-lang.org/en/master/extension_rdoc.html В `fcgi` объекты `FCGI` и `FCGI::Stream` создаются через `Data_Make_Struct()`, но allocator для этих классов не удаляется: https://github.com/alphallc/ruby-fcgi-ng/blob/master/ext/fcgi/fcgi.c Минимальное исправление: ``` rb_undef_alloc_func(cFCGI); rb_undef_alloc_func(cFCGIStream); ``` это рекомендація только для разработчиковъ upstream-а,чтобы они дѣлали свой кодъ правильно, такъ что ошибкой не является. Я открылъ имъ запросъ: https://github.com/alphallc/ruby-fcgi-ng/issues/12 У насъ это отдѣльно отъ upstream исправляться не планируется, въ данномъ случаѣ я сошлюсь на мнѣніе @rider: #41650 это ограниченіе возможностей исходнаго кода, а не ошибка пакета. |

Description
Vladislav Glinkin 2026-08-28 18:45:09 MSKВерсия пакета: gem-fcgi-0.9.2.2-alt1 Шаги воспроизведения: 1) `# ruby -rsocket -rfcgi -e 's=TCPServer.new("127.0.0.1",0); p=s.addr[1]; pid=fork{STDIN.reopen(s);s.close;r=FCGI.accept;r.finish}; c=TCPSocket.new("127.0.0.1",p); rec=->(t,d=""){n=d.bytesize;[1,t,0,1,n>>8,n&255,0,0].pack("C8")+d}; c.write(rec[1,[0,1,0,0,0,0,0,0].pack("C8")]+rec[4]+rec[5]); c.close; Process.wait(pid)'` Фактический результат: ``` -e:1: warning: undefining the allocator of T_DATA class FCGI -e:1: warning: undefining the allocator of T_DATA class FCGI::Stream ``` Ожидаемый результат: Отсутствие предупреждений.