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