2011-04-29 36 views
2

我一直在試圖爲Upskirt做一個Python擴展。我雖然也不會因爲有一些示例(Upskirt代碼和Ruby擴展中的示例程序),所以對於第一個C項目很難。Upskirt的Python擴展:字符串末尾的垃圾

擴展工作,它轉換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,因爲當我聽到upskirt的時候我想到了這一點。奇怪的名字,我知道。

我希望有人能幫助我。

+3

@David隨機選擇的名字。我真的不在乎。 – Frank 2011-04-29 18:47:01

+6

@David Heffernan:從自述:*「原始libupskirt是NatachaPorté驚人的作品」*。 「娜塔莎」對我來說聽起來像是一個女孩的名字。 – jfs 2011-04-30 10:19:27

+0

@ J.F.Sebastian,是的,我無法理解,爲什麼甚至不需要對**名字這麼激動。不管xyz對男性的貶損程度如何,我都沒有看到任何男性對libxyz感興趣。有人會稱這種行爲爲「[patroniz](http://blogs.studyinsweden.se/2015/05/24/is-patronizing-women-called-feminism-these-days/)ing [feminist] (http://en.wikimannia.org/Women_against_feminism)」。無論如何,它現在稱爲** libsoldout **。見http://fossil.instinctive.eu/libsoldout/wiki?name=about-the-name – Pacerier 2016-02-18 18:44:28

回答

3

你正在做一個strdup in pantyshot_render

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

但我不認爲ob->data是一個空終止的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->data作爲C字符串之前調用bufnullterm(ob);或者你可以看看ob->size,使用mallocstrncpy複製它,並親自處理nul終結符(但請確保你爲複製的字符串分配ob->size + 1字節)。

如果你想擺脫新行(即尾隨\n),那麼你可能需要在某處手動進行一些空白剝離操作。

+0

謝謝,這個工程。 – Frank 2011-04-29 19:56:41