【问题标题】:Python extension for Upskirt: garbage at end of stringUpskirt 的 Python 扩展:字符串末尾的垃圾
【发布时间】:2011-04-29 17:30:33
【问题描述】:

我一直在尝试为Upskirt 制作 Python 扩展。我认为第一个 C 项目不会困难,因为有示例(Upskirt 代码中的示例程序和 Ruby 扩展)。

扩展工作,它转换我扔给它的 Markdown,但有时输出在字符串的末尾有一些垃圾。而且我不知道是什么原因造成的。

这是一些输出:

python test.py 
<module 'pantyshot' from '/home/frank/Code/pantyshot/virtenv/lib/python2.7/site-packages/pantyshot.so'>
<built-in function render>

'<p>This <strong>is</strong> <em>a</em> <code>test</code>. <a href="http://example.com">Test</a>.</p>\n\x7f'
<p>This <strong>is</strong> <em>a</em> <code>test</code>. <a href="http://example.com">Test</a>.</p>

--------------------------------------------------------------------------------

'<p>This <strong>is</strong> <em>a</em> <code>test</code>. <a href="http://example.com">Test</a>.</p>\n\x7f'
<p>This <strong>is</strong> <em>a</em> <code>test</code>. <a href="http://example.com">Test</a>.</p>

--------------------------------------------------------------------------------

我的代码可以在my Github repo 找到。我称它为 pantyshot,因为当我听到超短裙时我想到了这个。奇怪的名字,我知道。

我希望有人可以帮助我。

【问题讨论】:

    标签: python c python-extensions


    【解决方案1】:

    你正在做一个strdup in pantyshot_render:

    output_text = strdup(ob->data); /* ob is a "struct buf *" */
    

    但我不认为 ob-&gt;data 是一个以 nul 结尾的 C 字符串。你会在 upskirt/buffer.c 里面找到这个:

    /* bufnullterm • NUL-termination of the string array (making a C-string) */
    void
    bufnullterm(struct buf *buf) {
        if (!buf || !buf->unit) return;
        if (buf->size < buf->asize && buf->data[buf->size] == 0) return;
        if (bufgrow(buf, buf->size + 1))
            buf->data[buf->size] = 0; }
    

    因此,您可能会跑出缓冲区的尽头并幸运地在造成任何损坏之前点击'\0'。我认为您应该在将ob-&gt;data 复制为C 字符串之前调用bufnullterm(ob);或者您可以查看ob-&gt;size,使用mallocstrncpy 复制它,并手动处理nul 终止符(但确保为复制的字符串分配ob-&gt;size + 1 字节)。

    如果你想去掉换行符(即尾随的\n),那么你可能需要在某处手动进行一些空格剥离。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-21
      • 2016-01-23
      • 2019-01-31
      • 2021-11-13
      • 2018-01-27
      • 2021-11-28
      • 2015-05-28
      • 2015-06-06
      相关资源
      最近更新 更多