<?xml version="1.0" encoding="UTF-8" ?>

<bugzilla version="5.2"
          urlbase="https://bugzilla.altlinux.org/"
          
          maintainer="jenya@basealt.ru"
>

    <bug>
          <bug_id>47127</bug_id>
          
          <creation_ts>2023-08-04 15:41:19 +0300</creation_ts>
          <short_desc>Ошибка сегментирования при использовании ctypes, системных вызовов и inspect</short_desc>
          <delta_ts>2023-08-04 17:43:58 +0300</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>python3</component>
          <version>unstable</version>
          <rep_platform>x86_64</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>NOTABUG</resolution>
          
          
          <bug_file_loc>https://www.destroyallsoftware.com/talks/wat</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P5</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Anton Zhukharev">ancieg</reporter>
          <assigned_to name="Grigory Ustinov">grenka</assigned_to>
          <cc>amakeenk</cc>
    
    <cc>george</cc>
    
    <cc>glebfm</cc>
    
    <cc>grenka</cc>
    
    <cc>imz</cc>
    
    <cc>kotopesutility</cc>
    
    <cc>vitty</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>230892</commentid>
    <comment_count>0</comment_count>
    <who name="Anton Zhukharev">ancieg</who>
    <bug_when>2023-08-04 15:41:19 +0300</bug_when>
    <thetext>Система:
========
ALT Workstation K 10.2 (обновлена 04.08.2023).


Пакеты:
=======

python3-3.9.16-alt1.x86_64


Шаги воспроизведения:
=====================

$ cat &lt;&lt; \EOF &gt;&gt; script.py
import ctypes

class utsname(ctypes.Structure):
    _fields = [
        (&apos;sysname&apos;, ctypes.ARRAY(ctypes.c_char, 1024)),
        (&apos;nodename&apos;, ctypes.ARRAY(ctypes.c_char, 1024)),
        (&apos;release&apos;, ctypes.ARRAY(ctypes.c_char, 1024)),
        (&apos;version&apos;, ctypes.ARRAY(ctypes.c_char, 1024)),
        (&apos;machine&apos;, ctypes.ARRAY(ctypes.c_char, 1024)),
        (&apos;domainname&apos;, ctypes.ARRAY(ctypes.c_char, 1024))
    ]

o = utsname()
syscall = ctypes.CDLL(None).syscall
syscall(63, ctypes.byref(o))
import inspect
EOF

$ python3 ./script.py


Фактический результат:
======================

Ошибка сегментирования.


Ожидаемый результат:
====================

Ошибки сегментирования нет.


Частота воспроизведения:
========================

Всегда.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230896</commentid>
    <comment_count>1</comment_count>
    <who name="Alexander Makeenkov">amakeenk</who>
    <bug_when>2023-08-04 15:53:28 +0300</bug_when>
    <thetext>Воспроизводится в сизифе по шагам из описания.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230900</commentid>
    <comment_count>2</comment_count>
    <who name="Gleb F-Malinovskiy">glebfm</who>
    <bug_when>2023-08-04 16:57:04 +0300</bug_when>
    <thetext>Так это и не могло работать.  Во-первых, должно быть _fields_, а не _fields, во вторых:

$ python3 -c &apos;import ctypes; help(ctypes.ARRAY)&apos; | cat
Help on function ARRAY in module ctypes:

ARRAY(typ, len)
    # XXX Deprecated
$ cat test.py
import ctypes

c_char_array = ctypes.c_char * 65

class utsname(ctypes.Structure):
    _fields_ = [
        (&apos;sysname&apos;, c_char_array),
        (&apos;nodename&apos;, c_char_array),
        (&apos;release&apos;, c_char_array),
        (&apos;version&apos;, c_char_array),
        (&apos;machine&apos;, c_char_array),
        (&apos;domainname&apos;, c_char_array),
    ]

o = utsname()
syscall = ctypes.CDLL(None).syscall
syscall(63, ctypes.byref(o))
print(o.machine)

Вот так даже будет работать, но если вы собираетесь этим на самом деле пользоваться -- WAT! :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230903</commentid>
    <comment_count>3</comment_count>
    <who name="Anton Zhukharev">ancieg</who>
    <bug_when>2023-08-04 17:28:40 +0300</bug_when>
    <thetext>(In reply to Gleb F-Malinovskiy from comment #2)
&gt; Так это и не могло работать.  Во-первых, должно быть _fields_, а не _fields,

Да, уже увидел, спасибо :)


&gt; во вторых:
&gt; 
&gt; $ python3 -c &apos;import ctypes; help(ctypes.ARRAY)&apos; | cat
&gt; Help on function ARRAY in module ctypes:
&gt; 
&gt; ARRAY(typ, len)
&gt;     # XXX Deprecated
&gt; $ cat test.py
&gt; import ctypes
&gt; 
&gt; c_char_array = ctypes.c_char * 65
&gt; 
&gt; class utsname(ctypes.Structure):
&gt;     _fields_ = [
&gt;         (&apos;sysname&apos;, c_char_array),
&gt;         (&apos;nodename&apos;, c_char_array),
&gt;         (&apos;release&apos;, c_char_array),
&gt;         (&apos;version&apos;, c_char_array),
&gt;         (&apos;machine&apos;, c_char_array),
&gt;         (&apos;domainname&apos;, c_char_array),
&gt;     ]
&gt; 
&gt; o = utsname()
&gt; syscall = ctypes.CDLL(None).syscall
&gt; syscall(63, ctypes.byref(o))
&gt; print(o.machine)
&gt; 
&gt; Вот так даже будет работать, но если вы собираетесь этим на самом деле
&gt; пользоваться -- WAT! :)

На самом деле я просто пытался разобраться с использованием ctypes в Python (честно говоря, мне не понравилось - проще уж на Си писать).
И мне другой системный вызов нужен был :)

Крест на конкретно этой затее поставила константа 65 (длина полей в utsname), которую в Python в общем случае в рантайме не определить (судя по исходникам, значения размеров тех или иных полей могут быть разными). :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230904</commentid>
    <comment_count>4</comment_count>
    <who name="Gleb F-Malinovskiy">glebfm</who>
    <bug_when>2023-08-04 17:43:58 +0300</bug_when>
    <thetext>(In reply to Anton Zhukharev from comment #3)
&gt; проще уж на Си писать).
+1

&gt; Крест на конкретно этой затее поставила константа 65 (длина полей в
&gt; utsname), которую в Python в общем случае в рантайме не определить
Да ведь константа 63 тоже ничем не лучше.</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>