On Sun, Nov 09, 2008 at 04:04:11PM +0300, Alexey I. Froloff wrote: > * Dmitry V. Levin [081109 15:10]: > > Я пока не улавливаю суть происходящего с mutt_md5. > Код (md5_process_bytes): > > /* Move remaining bytes in internal buffer. */ > if (len > 0) > { > size_t left_over = ctx->buflen; > > memcpy (&((char *) ctx->buffer)[left_over], buffer, len); > left_over += len; > if (left_over >= 64) > { > md5_process_block (ctx->buffer, 64, ctx); > left_over -= 64; > memcpy (ctx->buffer, &ctx->buffer[16], left_over); > } > ctx->buflen = left_over; > } > > Соответственно затык происходит на первом memcpy. > > (gdb) run > Starting program: /home/raorn/src/gitsnaps/packages/mutt1.5/work/mutt-1.5.18/mutt_md5 > foobar > > Breakpoint 1, md5_process_bytes (buffer=0xbfd62df4, len=7, ctx=0xbfd63e3c) at md5.c:223 > 223 if (ctx->buflen != 0) > (gdb) nexti > 220 { > (gdb) > 0x080497ac 220 { > (gdb) > 0x080497af 220 { > (gdb) > 0x080497b2 220 { > (gdb) > 223 if (ctx->buflen != 0) > (gdb) > 0x080497b8 223 if (ctx->buflen != 0) > (gdb) > 0x080497ba 223 if (ctx->buflen != 0) > (gdb) > 247 if (len >= 64) > (gdb) > 0x080497bf 247 if (len >= 64) > (gdb) > 269 if (len > 0) > (gdb) > 0x080497c3 269 if (len > 0) > (gdb) > 271 size_t left_over = ctx->buflen; > (gdb) > 52 return __builtin___memcpy_chk (__dest, __src, __len, __bos0 (__dest)); > (gdb) > 271 size_t left_over = ctx->buflen; > (gdb) > 52 return __builtin___memcpy_chk (__dest, __src, __len, __bos0 (__dest)); > (gdb) > 0x080497e5 52 return __builtin___memcpy_chk (__dest, __src, __len, __bos0 (__dest)); > (gdb) > 0x080497e9 52 return __builtin___memcpy_chk (__dest, __src, __len, __bos0 (__dest)); > (gdb) > 274 left_over += len; > (gdb) > 52 return __builtin___memcpy_chk (__dest, __src, __len, __bos0 (__dest)); > (gdb) > 0x080497f2 52 return __builtin___memcpy_chk (__dest, __src, __len, __bos0 (__dest)); > (gdb) > > ^C > Program received signal SIGINT, Interrupt. > memcpy (__dest=0xbfd62df4, __src=0x7, __len=3218488892) at /usr/include/bits/string3.h:52 > 52 return __builtin___memcpy_chk (__dest, __src, __len, __bos0 (__dest)); __len=3218488892? Не многовато ли? -- ldv