On 1/8/06, Erik Schanze <[EMAIL PROTECTED]> wrote:
> Please provide some sample data for testing. (No private material!)
> A backtrace of gdb would also be nice, if you are able to do so.

I got this backgrace running with attachment file `gbk.txt'.

0$ echo $LANG
C
0$ export LANG=C
0$ ./txt2pdbdoc test gbk.txt gbk.pdb
*** glibc detected *** double free or corruption (out): 0x0804da50 ***
Aborted (core dumped)
134$ gdb ./txt2pdbdoc ./core
GNU gdb 6.4-debian
Copyright 2005 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i486-linux-gnu"...Using host libthread_db
library "/lib/tls/libthread_db.so.1".

Core was generated by `./txt2pdbdoc test gbk.txt gbk.pdb'.
Program terminated with signal 6, Aborted.

warning: Can't read pathname for load map: Input/output error.
Reading symbols from /lib/tls/libc.so.6...done.
Loaded symbols for /lib/tls/libc.so.6
Reading symbols from /lib/ld-linux.so.2...done.
Loaded symbols for /lib/ld-linux.so.2
#0  0xb7e3a7a7 in raise () from /lib/tls/libc.so.6
(gdb) bt
#0  0xb7e3a7a7 in raise () from /lib/tls/libc.so.6
#1  0xb7e3c04b in abort () from /lib/tls/libc.so.6
#2  0xb7e71015 in __fsetlocking () from /lib/tls/libc.so.6
#3  0xb7e77667 in malloc_usable_size () from /lib/tls/libc.so.6
#4  0xb7e77b02 in free () from /lib/tls/libc.so.6
#5  0x08048cfb in compress (b=0xbfe6c11c) at txt2pdbdoc.c:306
#6  0x0804950b in encode (document_name=0xbfe6d8f6 "test",
src_file_name=0x0, dest_file_name=0x0) at txt2pdbdoc.c:561
#7  0x08049b3f in main (argc=3, argv=0xbfe6c204) at txt2pdbdoc.c:217
(gdb) frame
#0  0xb7e3a7a7 in raise () from /lib/tls/libc.so.6
(gdb) l txt2pdbdoc.c:306
301                     /* when we get to the end of the buffer, don't
inc past the */
302                     /* end; this forces the residue chars out one
at a time */
303                     if ( tail != end )
304                             ++tail;
305             }
306             free( buf_orig );
307
308             if ( space )
309                     b->data[ b->len++ ] = ' ';      /* add
left-over space */
310
(gdb)
0$

And compress utf8 file will be ok.

0$ cat gbk.txt | iconv -f gbk -t utf8 > utf8.txt
0$ ./txt2pdbdoc test utf8.txt utf8.pdb

These can explain what happens:

0$ gdb ./txt2pdbdoc
(gdb) b txt2pdbdoc.c:306
Breakpoint 1 at 0x8048cf0: file txt2pdbdoc.c, line 306.
(gdb) b txt2pdbdoc.c:561
Breakpoint 2 at 0x8049500: file txt2pdbdoc.c, line 561.
(gdb) r test gbk.txt gbk.pdb
Starting program: /home/xyb/deb/txt2pdbdoc/txt2pdbdoc-1.4.4/txt2pdbdoc
test gbk.txt gbk.pdb

Breakpoint 2, encode (document_name=0xbfab38ca "test",
src_file_name=0x1 <Address 0x1 out of bounds>,
    dest_file_name=0x1 <Address 0x1 out of bounds>) at txt2pdbdoc.c:561
561                             compress( &buf );
(gdb) p buf.len
$1 = 4004
(gdb) c
Continuing.

Breakpoint 1, compress (b=0xbfab1a0c) at txt2pdbdoc.c:306
306             free( buf_orig );
(gdb) p b.len
$2 = 6034
(gdb) s
*** glibc detected *** double free or corruption (out): 0x0804da50 ***

Program received signal SIGABRT, Aborted.
0xb7e807a7 in raise () from /lib/tls/libc.so.6
(gdb) c
Continuing.

Program terminated with signal SIGABRT, Aborted.
The program no longer exists.
(gdb) q
0$
0$ gdb ./txt2pdbdoc
(gdb) b txt2pdbdoc.c:306
Breakpoint 1 at 0x8048cf0: file txt2pdbdoc.c, line 306.
(gdb) b txt2pdbdoc.c:561
Breakpoint 2 at 0x8049500: file txt2pdbdoc.c, line 561.
(gdb) r test utf8.txt utf8.pdb
Starting program: /home/xyb/deb/txt2pdbdoc/txt2pdbdoc-1.4.4/txt2pdbdoc
test utf8.txt utf8.pdb

Breakpoint 2, encode (document_name=0xbfe518c8 "test",
src_file_name=0x1 <Address 0x1 out of bounds>,
    dest_file_name=0x1 <Address 0x1 out of bounds>) at txt2pdbdoc.c:561
561                             compress( &buf );
(gdb) p buf.len
$1 = 4096
(gdb) c
Continuing.

Breakpoint 1, compress (b=0xbfe4ff7c) at txt2pdbdoc.c:306
306             free( buf_orig );
(gdb) p b.len
$2 = 4351
(gdb) c
Continuing.

Breakpoint 2, encode (document_name=0xbfe518c8 "test",
src_file_name=0x1 <Address 0x1 out of bounds>,
    dest_file_name=0x1 <Address 0x1 out of bounds>) at txt2pdbdoc.c:561
561                             compress( &buf );
(gdb) p buf.len
$3 = 1872
(gdb) c
Continuing.

Breakpoint 1, compress (b=0xbfe4ff7c) at txt2pdbdoc.c:306
306             free( buf_orig );
(gdb) p b.len
$4 = 2256
(gdb) c
Continuing.

Program exited normally.
(gdb) q
0$
´óÃ÷³É׿»ÊµÛÓÀÀÖÁùÄê°ËÔÂÒÒ䣬Î÷ÄϺ£Íâ²³Äà¹ú¹úÍõÂéÄÇÈǼÓÄÇÄË£¬ÂÊͬåú×Ó¡¢µÜ¡¢ 
Ãá¢ÊÀ×Ó¼°Åã³¼À´³¯£¬½ø¹±ÁúÄÔ¡¢º×¶¥¡¢çé裡¢Ï¬½Ç¡¢½ðÒø±¦Æ÷µÈÖî°ãÎïÊ¡£³É׿»ÊµÛ´óÔÃ
 £¬¼ÎÀÍÁ¼¾Ã£¬´ÍÑç·îÌìÃÅ¡£

ÄÇØÃÄà¹ú¼´½ñÆÅÂÞÖÞ±±²¿µÄÆÅÂÞÄË£¬ÓÖ³ÆÎÄÀ³£¨²³Äà¡¢ÆÅÂÞÄË¡¢ÎÄÀ³ÒÔ¼°Ó¢ÓïBrunei¾ù 
ϵͬһµØÃûÖ®ÒôÒ룩£¬ËäºÍÖÐÍÁÏà¸ôº£³ÌÍòÀµ«ÏòÀ´ÑöĽÖлª¡£Ëγ¯Ì«Æ½Ð˹ú¶þÄ꣬ÆäÍõ
 
Ïò´ò£¨¼´ËÕµ¤£¬ÖйúÊ·ÊéÉÏÒëΪ¡°Ïò´ò¡±£©ÔøÇ²Ê¹À´³¯£¬½ø¹±ÁúÄÔ¡¢ÏóÑÀ¡¢Ì´ÏãµÈÎÆäºó
 ³¯¹±²»¾ø¡£

ÂéÄÇÈǼÓÄÇÄ˹úÍõÑÛ¼ûÌ쳯ÉϹúÃñ·áÎ︷£¬ÎÄÖν̻¯¡¢ÒÂ¹ÚÆ÷¾ß£¬ÎÞ²»ÁîËû»¶Ï²ÔÞ̾£¬ 
Ã÷µÛÓÖÏà´ýÉõºñ£¬¾¹È»ÁôÁµ²»È¥¡£µ½¸ÃÄêʮһÔ£¬Ò»À´ÄêÀÏ£¬¶þÀ´Ë®ÍÁ²»·þ£¬»¼²¡²»ÖΡ£³É
 
׿ÉîΪµ¿Ï§£¬ÎªÖ®ê¡³¯ÈýÈÕ£¬´ÍÔáÄϾ©°²µÂÃÅÍ⣨½ñÄϾ©ÖлªÃÅÍâ¾Û±¦É½Â´£¬ÓÐÍõĹÒÅÖ·£¬
 
Ë׺ôÂí»Ø»Ø·Ø£©£¬ÓÖÃüÊÀ×ÓåÚÍúÏ®·â²³Äà¹úÍõ£¬Ç²Ê¹Õß»¤Ë͹é¹ú£¬ÉʹͽðÒø¡¢Æ÷Ãó¡¢½õç²£¬
 É´ÂÞµÈÎï¡£åÚÍúÍõ×à³Æ£ºÐ¡¹úºóɽ£¬ÆÄÓÐÉñÒ죬Æò»ÊÉϴͷ⣬±íΪһ¹úÖ®Õò¡£

³É׿±ã·âÆäɽÃûΪ¡°³¤ÄþÕò¹úɽ¡±£¬Ç×ÖÆ±®ÎÄ£¬²¢ÌâʫһÊ×£¬Ê«Ô»£º

¡°Ñ׺£Ö®Ð棬²³ÄàËù´¦¡£ìãÈʽ¥Ò壬ÓÐ˳ÎÞåᣡõ¡õÏÍÍõ£¬Î©»¯Ö®Ä½¡£

µ¼ÒÔÏóñ㣬¡õÀ´±¼¸°¡£Í¬Æä¸¾×Ó£¬ÐÖµÜÅã³¼¡£»üòªãÚÏ£¬ÓÐÑÔÒԳ¡£

À˲°·çéÉ£¬ÊµÀÍ¿ÒÇÚ¡£»ü¹ÅÔ¶³¼£¬Ë³À´Å­ôô¡£ÒÔ¹ª»òÄÑ£¬ïòÔ»¼ÒÊÒ£¿

ÍõÐÄ¡õ³Ï£¬½ðʯÆä¼á¡£Î÷ÄÏÞ¬³¤£¬³ëÓëÍõÏÍ£¿´£´£¸ßɽ£¬ÒÔÕòÍõ¹ú¡£

¡õÎÄÒÔʯ£¬í®ÕÑÍõµÂ¡£ÍõµÂ¿ËÕÑ£¬Íõ¹úØüÄþ¡£ÓÚ˹ÍòÄ꣬ÑöÎÒ´óÃ÷¡£¡±

³É׿»ÊµÛµÄÓùÖÆÊ«ÎÄ£¬±ã¿ÌÔÚ²³Äà¹ú³¤ÄþÕò¹úɽµÄÒ»¿é´óʯ±®ÉÏ¡£´ËºóºéÎõ¡¢ÕýµÂ¡¢¼Î 
¾¸Äê¼ä£¬¾ùÓг¯¹±¡£ÖйúÈËÈ¥µ½²³Äà¹úµÄ£¬ÓÐЩ»¹×öÁË´ó¹Ù£¬±»·âΪ¡°ÄǶ½¡±¡£µ½µÃÍòÀúÄê
 
¼ä£¬²³Äà¹úÄÚºöÆðÄÚÂÒ£¬¡¶Ã÷Ê·¡¤²³Äà´«¡·Ôسƣº¡°ÆäÍõ×䣬ÎÞËá£×åÈËÕùÁ¢£¬¹úÖÐɱ¾¼¸
 
¾¡£¬ÄËÁ¢ÆäŮΪÍõ¡£ÕÄÖÝÈËÕÅÐÕÕߣ¬³õΪÆä¹úÄǶ½£¬»ªÑÔ×ð¹ÙÒ²£¬ÒòÂÒ³ö±¼£¬Å®ÍõÁ¢£¬Ó­»¹
 
Ö®¡£ÆäÅ®³öÈëÍõ¹¬£¬µÃÐļ²£¬ÍýÑÔ¸¸Óз´Ä±¡£Å®Ö÷¾å£¬Ç²È˰´ÎÊÆä¼Ò£¬ÄǶ½×Ôɱ¡£¹úÈËΪËÏ
 
Ô©¡£Å®Ö÷»Ú£¬½ÊɱÆäÅ®£¬ÊÚÆä×Ó¹Ù¡£¡±ÕâλÕÅÄǶ½µÄÅ®¶ùΪºÎÉñ¾­´íÂÒ£¬ÏòÅ®ÍõÎܸ游Ç×Ôì
 
·´£¬ÒÔÖÂÄð³ÉÕâ¸ö±¯¾ç£¬Ïë±ØÁíÓÐÇúÕÛÄÚÇ飬ʷÊ鲢δÏêÔØ£¬ºóÈ˲»µÃ¶øÖª¡£¸£½¨ÕÄÖÝÕÅÊÏ
 
ÔÚ²³Äà¹úÀÛÊÀÊÜ·âÄǶ½£¬ÆÄÓÐÈ¨ÊÆ¡£Îª¹úÈËËù¾´¡£»ªÈËÔڱ˰ÉÌÎñÅ©£¬ÊýÒ಻ÉÙ£¬Åû¾£Õ¶
 
¼¬£¬ÉõÓй¦¼¨£¬ºÍµ±µØÍÁÈËÏà´¦ÈÚÇ¢¡£·ÑÐÅ¡¶ÐÇé¶Ê¤ÀÀ¡·Ò»ÊéÖмÇÔÆ£º¡°²³Äà¹ú¡­¡­Æä¹úÖ®
 
Ãñ³ç·ðÏñ£¬ºÃÕ«ãå¡£·²¼ûÌÆÈËÖÁÆä¹ú£¬ÉõÓа®¾´¡£ÓÐ×íÕߣ¬Ôò·ö¹é¼ÒÇÞËÞ£¬ÒÔÀñ´ýÖ®Èô¹Ê¾É
 ¡£¡±ÓÐʫΪ֤£¬Ê«Ô»£º
¡°²³Äà²×º£Í⣬Á¢¹ú×ÔºÎÄꣿÏÄÀ䶬ÉúÈÈ£¬É½Å̵Ø×ÔÆ«¡£»ýÐÞ³ç·ð½Ì£¬·ö×í´ý±öÏÍ¡£È¡ÐÅ 
ͨÉ̲°£¬ÒÅ·çÊ¿ɴ«¡£¡±

²³Äà¹úÄǶ½ÕÅÊÏÊý´«ºóÊÇΪÕÅÐÅ£¬Ï¥ÏÂΩÓÐÒ»×Ó¡£ÕÅÐŲ»Íü¹Ê¹ú£¬Îª¶ù×ÓÈ¡Ãû³¯ÌÆ¡£

µ½Õų¯ÌÆÊ®¶þËêÄÇÒ»Ä꣬¸£½¨ÓÐÒ»ÃûÊ¿ÈËÂÅÊÔ²»µÚ£¬ÆúÈå¾­ÉÌ£¬Ëæ×ÅÏçÈËÀ´µ½²³Äà¹ú¡£ 
ÕâÈ˲»Éƾ­Óª£¬±¾Ç®Ê´µÃ¸É¸É¾»¾»£¬ÎÞÑÕ»ØÏ磬¾Í´ËÁ÷ÂäÒì°î¡£ÓÐÈ˼öËûÈ¥¼ûÕÅÐÅ£¬ÏëҪı
 
¸öÉú¼Æ¡£ÕÅÐźÍËûһ̸֮Ï£¬ÐÄÏ´óϲ£¬±ã¼´Æ¸ÎªÎ÷±ö£¬½Ì¶ù×Ó¶ÁÊé¡£Õų¯ÌÆ¿ªÃÉËä³Ù£¬È´
 
ÊÇÌì×Ê´ÏÓ±£¬Ê®ÄêÖ®¼ä£¬ËÄÊéÎå¾­¾ãÒÑÊìϰ¡£ÄÇÀÏʦÁ¦È°ÕÅÐÅDz×Ó»ØÖÐÍÁÓ¦ÊÔ£¬ÈôÄÜ¿¼µÃ¸ö
 
Ðã²Å¡¢¾ÙÈË£¬ÓÐÁËÖлªµÄ¹¦Ãû£¬»Øµ½²³ÄàÀ´ÄÇ¿ÉÊÇ´óÓйâ²Ê¡£ÕÅÐÅÒ²Åζù×Ó»ØÏçÈ¥¹Û¹âÉϹú
 
·çÎÓÚÊÇÖØÖØ³êлÁËÀÏʦ£¬´òµã½ðÒøÐÐÀÔÙÅÉÙ×¶ùÕÅ¿µ¸úËæ£¬ÃüÕų¯ÌÆËæÍ¬ÀÏʦ»ØÕÄÖÝ
 
Ô­¼®Ó¦ÊÔ¡£ÆäʱÕýÊdzçìõÁùÄê£¬ÄæÑÙκÖÒÏÍËäÒÑ·üÖµ«ÔÚÌìÆô³¯ÆßÄêÖ®¼ä»ö¹úÑêÃñ£¬É±º¦
 
ÖÒÁ¼£¬ÌìÏÂÔªÆø´óÉË£¬¼æÖ®Á¬ÄêË®ºµ³ÉÔÖ£¬Á÷¿ÜËÄÆð¡£Õų¯ÌƵÈÈýÈË´ÓÏÃÃÅÉϰ¶£¬¹Í´¬Î÷ÉÏ
 
ÕÄÖÝ¡£²»ÁÏÖ»ÐгöÊýÊ®ÀËÄÏçºöÈ»´óÂÒ£¬Ò»ÈºµÁÔôÓ¿ÉÏ´¬À´£¬²»ÓÉ·Ö˵£¬±ã½«ÄǽÌÊéÏÈÉú
 ɱÁË¡£Õų¯ÌÆÖ÷ÆÍÐÒºÃʶµÃË®ÐÔ£¬ÌøË®ÌÓÃü£¬²ÅÃâÁËÒ»µ¶Ö®¶ò¡£

Á½ÈËÔÚÏç¼ä¶ãÁËÈýÈÕ£¬ÌýµÃËÄÏç¼¢Ãñ¾ÛÖÚÒª¹¥ÕÄÖÝ¡¢ÏÃÃÅ¡£ÕâÒ»À´£¬Ö»½«Õų¯ÌÆÏŵÃÂú 
Ç»ÐÛÐÄ£¬µÇ»¯ÎÚÓУ¬ÑÛ¼ûΣ°î²»¿É¾Ó£¬»¹ÊǼ±ËٻؼҵÄΪÊÇ¡£ÆäʱÏÃÃÅÒѲ»ÄÜÔÙÈ¥£¬Ö÷ÆÍÁ½
 
ÈËÒ»ÉÌÁ¿£¬¾ö¶¨´Ó½·Î÷¸°¹ãÖÝ£¬Ôٳ˺£´¬³öÑó¡£Á½ÈËÂòÁËÁ½Æ¥×øÆï£¬µ¨Õ½Ðľª£¬ÑØÂ·´òÌý
 
£¬Ïò¹ã¶«¶øÈ¥¡£ÐÒϲһ·ÎÞÊ£¬¾­ÄϾ¸¡¢Æ½ºÍ£¬À´µ½ÈýºÓ°Ó£¬ÒÑÊǹ㶫ʡ¾³£¬ÔÙ¹ýÃ·ÏØ¡¢Ë®
 
¿Ú£¬ÏòÎ÷åÆåÎÐÐÀ´¡£Õų¯ÌÆËØÎŹ㶫ÊǸ»ÊüÖ®µØ£¬µ«ÑØÍ¾Ëù¼û£¬¾¡ÊǼ¢Ãñ£¬ÐÄÏëÖлªµØ´óÎï
 
²©£¬°ÙÐÕÈËÈËÉúËÀϵÓÚÒ»Ïߣ¬²³ÄàÖ»ÊǺ£ÍâС°î£¬ÄÐÅ®ÀÏÓ×È´Êǰ²¾ÓÀÖÒµ£¬ÎÞÓÇÎÞÂÇ£¬²»ÓÉ
 
µÃ´óÊÇ̾Ϣ£¬ÐÄÏëÖйúɽ´¨ÐÛÆæ£¬ÑÛ¼ûÕß°ÙδµÃÒ»£¬µ«Èç´Ë³¯²»±£Ï¦£¬»¹ÊÇÈ¥²³ÄàÒ¬×ÓÊ÷ÏÂ
 
³ª¸è˯¾õ°²ÀֵöàÁË¡£ÕâÒ»ÈÕÐо­ºèͼáÖ£¬É½µÀÆéá«£¬ÌìÉ«½¥Íí£¬ËûÐÄÖн¹¼±ÆðÀ´£¬´ßÂí¼±
 
±¼¡£Ò»¿ÚÆø±¼³öÊ®¶àÀïµØ£¬µ½ÁËÒ»¸öСÊÐÕòÉÏ£¬Ö÷ÆÍÁ½ÈË´óϲ£¬ÏëÕÒ¸ö¿Íµê½èËÞ£¬ÄÄÖªµÀÊÐ
 
ÕòÉϾ²ÇÄÇĵÄÒ»¸öÈËÓ°Ò²ÎÞ¡£ÕÅ¿µÏÂÂí£¬×ßµ½Ò»¼Ò¹Ò×Å¡°ÔÁ¶«¿ÍÕ»¡±ÕÐÅÆµÄ¿ÍµêÖ®Í⣬¸ßÉù
 ½ÐµÀ£º¡°Î¹£¬µê¼Ò£¬µê¼Ò
È´ºÁÎÞ¶¯¾²¡£ÕýÔÚÕâʱ£¬Ò»Õó±±·ç´µÀ´£¬ÁÔÁÔ×÷Ï죬Á½È˶¼¸Ðë¹Çã¤È»¡£Õų¯ÌưγöÅå½£ 
£¬´³½øµêÈ¥£¬Ö»¼ûÔº×ÓÄÚµØÏµ¹×ÅÁ½¾ßʬÊ×£¬Á÷ÁËÒ»´ó̲ºÚѪ£¬²ÔÓ¬ÈÆ×ÅʬÊ×ÂÒ·É¡£¸¯³ôÆË
 ±Ç£¬¿´À´ËÀÕßÒÑËÀÈ¥¶àÈÕ¡£

Reply via email to