2011-04-29 3 views
2

Upskirt에 대한 파이썬 확장을 시도했습니다. 비록 예제가 있기 때문에 이 아닐지라도 (예 : Upskirt 코드와 Ruby 확장 프로그램 예제 프로그램).Upskirt 용 파이썬 확장 : 문자열 끝에 쓰레기가 있습니다.

확장 기능이 작동하면 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에서 찾을 수 있습니다

는 여기에 몇 가지 출력합니다. 나는 상큼함을 들었을 때 그 생각을했기 때문에 그것을 판잣집이라고 불렀다. 이상한 이름, 알아.

누군가가 나를 도울 수 있기를 바랍니다.

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

하지만 ob->data는 NUL 종료 C 문자열입니다 생각하지 않습니다

+3

@David 임의의 선택된 이름입니다. 나는 상관하지 않는다. – Frank

+6

@David Heffernan : readme : * "원래 libupskirt는 Natacha Porté의 놀라운 작품"*입니다. "나 타챠"는 나에게 여자 이름처럼 들린다. – jfs

+0

@ J.F.Sebastian, 진심으로, 나는 왜 ** 이름 **에 너무 동요 될 필요가 있을지 짐작할 수 없다. 나는 남성에 대한 비방 xyz에 관계없이 libxyz를 보잘것없는 남자로 보지 않습니다. 어떤 사람들은 이러한 행동을 "부인 (patroniz)"이라고 부릅니다 (http://blogs.studyinsweden.se/2015/05/24/is-patronizing-women-called-feminism-these-days/) [여성 주의자] (http://en.wikimannia.org/Women_against_feminism) ". 어쨌든 ** libsoldout **라고 부릅니다. http://fossil.instinctive.eu/libsoldout/wiki?name=about-the-name – Pacerier

답변

3

당신은 strdup in pantyshot_render을 다하고 있습니다. 당신은 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'를 쳐서 운이 있어요. C 문자열로 ob->data을 복사하기 전에 bufnullterm(ob)으로 전화해야한다고 생각합니다. 또는 ob->size을 볼 수 있으며 mallocstrncpy을 사용하여 복사하고 수동으로 널 종결자를 처리하십시오 (그러나 복사 된 문자열에 대해서는 ob->size + 1 바이트를 할당해야합니다).

그리고 줄 바꿈 (예 : \n)을 없애려면 어딘가에서 손으로 공백을 제거해야 할 것입니다.

+0

고마워,이 작품을 참조하십시오. – Frank