From: Mike N. <ta...@al...> - 2001-05-10 04:53:43
|
Ann W. Harrison wrote: > My copy of Firebird and earlier versions > of both Firebird and InterBase get a "wrong length record (183)" > error on the second or third record in the RDB$FUNCTIONS table > of one particular V5.6 database. First, do you know if this works using the original tarball, or does that one also fail? Try adding a static size_t and increment it everytime you enter VIO_data. It will probably break when the counter reaches 7352. It gives you a nice counter to break on in the debugger. Using Win32, if you're lazy, you can even add static size_t nEntries = 0; ++nEntries; if (nEntries == 0x1cb8) { __asm int 3; } What's wrong here is that he record format doesn't match the length of the decompressed block. SQZ is fine, it's bad earlier. The function it tries to write is probably "F_DEFAULTFLOAT" (last one printed in the gbak console), while the particular relation is "RDB$FUNCTION_ARGUMENTS". From tracing into MET_format() (via VIO_record), it already here display that this relation.rel_cur_format.fmt_length is 0x34. What we get from SQZ_decompress later on is 0x32. It's bad input even earlier. The compressed buffer that breaks, len 0x1f, looks like 01 80 FD 00 0E F_DEFAULTFLOAT EF 20 FB 00 01 1B FB 00 01 08 FB 00 The closest I get back in the call stack before becoming completely lost is rse.c get_record() on the rsb_indexed case. Well, if you don't count how it gets the RPB* in get_record(): request->req_rpb + rsb->rsb_stream rsb->rsb_stream is zero, why it's the plain request->req_rpb that it gets. > The certified InterBase does > not, though I can't find any changes on sourceforge that might > account for the difference. Then we definitely have to dig deeper. Have you tried the *hrm* mers build *hrm*? > Could someone who has a recent Firebird build (blush) try > the same? It breaks. > The values from -3 to -128 indicate that the byte > that follows is to be replicated (-1 times )that many times. Are -1 and -2 illegal values? If so, I think it should be asserted. I even ran the server under Purify to rule out buffer overflows. No detected problems. Not much of a help, but I hope it can speed you on your way. /Mike |